Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 12 odgovora
  • 4.922 pregleda

Najnovija ↓

Novi red u textarea, problem - baza ? 09.08.2012. u 20:29 · pre 173 meseca #1
Code (php):

// validacija description
function valid_description($description) {
     global $error;
     if (preg_match("/[^-a-z0-9šđč枊ĐČĆŽ.: _\/]/i", $description)) {
          $error[] = 'Opis može sadržati velika i mala slova srpske latinice i (brojeve . : _ - / prazna mesta).';   
     }
     if (strlen($description)<3 && strlen($description)>0) {
          $error[] = 'Opis mora sadržati više od 3 karaktera.';
     }
     if (strlen($description)>300) {
          $error[] = 'Previše karaktera.';
     }
}
 


uradio sam neku prostu validaciju za unos teksta , prazna mesta prolaze, kao i crtice, tačke, brojevi, kosa crta...ali kad u textarea kliknem enter za novi red, onda mi to ne prolazi validaciju.
E sad ja sam probao da iskljucim validaciju i da vidim šta će da zapiše , ali vidim i source strane ne sadrži nikakve karaktere, mislio sam da je to <br> ali nije, pogledao sam i bazu, samo stoje prazna polja, tj. redovi. O čemu se radi?
Re: Novi red u textarea, problem - baza ? 09.08.2012. u 21:29 · pre 173 meseca #3
Code (php):

// validacija description
function valid_description($description) {
     global $error;
     $description = nl2br($description);
     if (preg_match("/[^-a-z0-9šđč枊ĐČĆŽ.: _\/]/i", $description)) {
          $error[] = 'Opis može sadržati velika i mala slova srpske latinice i (brojeve . : _ - / prazna mesta).';   
     }
     if (strlen($description)<3 && strlen($description)>0) {
          $error[] = 'Opis mora sadržati više od 3 karaktera.';
     }
     if (strlen($description)>300) {
          $error[] = 'Previše karaktera.';
     }
}
 


uradio sam ovo ali i dalje ne ispisuje ništa, tj, ne prolazi validaciju.
Re: Novi red u textarea, problem - baza ? 09.08.2012. u 21:36 · pre 173 meseca #5
ma ne zelim da mi ovaj tekst bude izvršan. evo probao sam i ima raznih varijanti, moze da se ubaci 300 <br> simbola i ode ceo dizajn. Jel moze na ovaj description da uradim samo htmlentities, pitam zato šro ima naših slova...ajde probaću.
Re: Novi red u textarea, problem - baza ? 09.08.2012. u 21:42 · pre 173 meseca #6
nl2br pretvara nove redove u <br/> kao što piše u dokumentaciji. Što se tiče htmlentities, ja mislim da ti ne znaš čemu to služi..
Re: Novi red u textarea, problem - baza ? 09.08.2012. u 21:54 · pre 173 meseca #7
videcu nl2br ako mi se bude uklopilo, moram malo da ga proucim,

inace sad sam uradio samo:

$_POST['description'] = htmlentities($_POST['description'], ENT_QUOTES, "UTF-8");
tako da sto napisem to i dobijem. mislim to mi više odgovara, za ovo polje

--------------

sad sam video pogresno sam upotrebio nl2br, na mestu gde ne treba..sad cu da proverim ponovo
Re: Novi red u textarea, problem - baza ? 09.08.2012. u 23:37 · pre 173 meseca #8
Citat:
ma ne zelim da mi ovaj tekst bude izvršan.

Ako uradis ono sto sam ti vec bio napisao u drugoj temi nece ti biti izvrseno. Ne znam zasto komplikujes i sam sebi pravis probleme umesto da uradis na jednostavan nacin.

Sto se tice velikog broja razmaka, mozes regularnim izrazom da zamenis vise uzastopnih novih linija sa samo jednom.
Potpis
xxx
mali mali mali kamičak...nebo plave boje.
In Memoriam: Madzone Zeka(15.09.2005-16.09.2005)
Re: Novi red u textarea, problem - baza ? 09.08.2012. u 23:46 · pre 173 meseca #9
Za to cuvanje u bazi ne treba da radis nista osim html special chars, i mysql real escape string.
Za ispis na stranici koristis nl2br, a za edit u texarea ne koristis (novi redovi ce se sami pojaviti).

Prestani da trcis kao muva bez glave, i citaj objasnjenja funkcija i komentare ispod (da si radio to isto, znao bi da je napr koriscenje regular expressions-a u toj situaciji overkill)... Kad se vec trudis da naucis, potrudi se da razumes to sto radis, a ne da samo letimicno preletis preko problema i kazes "radi, naucio sam"...
Re: Novi red u textarea, problem - baza ? 11.08.2012. u 10:00 · pre 173 meseca #11
A zašto ne bi automatski uklonio prazne redove (npr. ukoliko ima više od 2)?

Jednostavan primer:
Code:
function custom_nl2br($str, $rep = "\n", $max = 2) {
$arr = explode($rep, $str);
$str = '';
$nls = 0;
    foreach($arr as $line) {
    $str .= $line;
    if (empty($line)) {
    $nls++;
    } else {
    $nls = 0;
           }
      if ($nls < $max) {
      $str .= $rep;
                       }
      }
return substr($str, 0, strlen($str) - strlen($rep));
}


Da bi shvatio kako funkcioniše prvo dobro pogledaj ovaj kod (mada je jednostavan).
Prvo se generiše niz ($arr) na osnovu praznih polja. U petlji se proverava da li postoji prazno polje. Ukoliko postoji brojač ($nls) se povećava za 1, u suprotnom se brojač resetuje na 0. Zatim se proverava da li je brojač veći od broja dozvoljenih praznih redova ($max) i ako nije stringu se dodaje taj red.

Korišćenje:
$text = custom_nl2br($text, "\n", 2);

prvi argument je string(tekst), drugi je znak za "razdvajanje" praznih polja (<br> ili <br /> ili \n), treći argument je ukupan broj dozovljenih praznih polja.
Potpis
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
Sviđa mi se1
Re: Novi red u textarea, problem - baza ? 11.08.2012. u 14:29 · pre 173 meseca
izmenjeno 1 put, poslednji put Goran Rakić 11.08.2012. u 16:20
  1. Goran Rakić11.08.2012. u 16:20zapis iz teksta poruke
#13
Ivane, ja bih to pre ovako rešio. Regularni izraz hvata od jednog do $max pojavljivanja preloma reda i zanemaruje ostale uzastopne. Na svakom uhvaćenom delu kroz callback prebacuje u <br />.

Code (php):

/**
 * Kao nl2br() ali zanemaruje više od $max uzastopnih preloma reda  
 */

function custom_nl2br($str, $max=2) {
   $needle = "(\r\n|\n\r|\n|\r)";
   $regexp = '/('.$needle.'{1,'.$max.'})'.$needle.'*/';
   return preg_replace_callback($regexp, function($match) {
      return nl2br($match[1]);
   }, $str);
}

// primer:
var_dump(custom_nl2br("Hello\nWorld\n\n\n\nSomething\n\nKeep."));
 


Kada bolje razmislim, bolje je prvo propustiti sve kroz nl2br(), a onda otkloniti duplirane <br />:
Code (php):

function custom_nl2br($str, $max=2) {
   $str = nl2br($str, true);
   $needle = '('.PHP_EOL.')';
   $regexp = '%('.$needle.'{1,'.$max.'})'.$needle.'*%';
   return preg_replace($regexp, '\1', $str);
}
 


Obe verzije za razliku od tvog primera gore rade i kada veb pregledač pošalje \r\n umesto \n kao oznaku preloma. nl2br() se isto tako ponaša. Trebalo bi i da je memorijski manje zahtevno jer ne prebacuje string u niz bez potrebe, mada bih rekao da je to već sitničarenje.
Potpis
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
Sviđa mi se1
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme