[ webjunior @ 19.04.2012. 21:16 ] @
Code:
<?php
        //If form was submitted
        if ($_POST['submitted']==1) {
            $errormsg = ""; //Initialize errors
            if ($_POST[title]){
                $title = $_POST[title]; //If title was entered
            }
            else{
                $errormsg = "Please enter title";
            }
            if ($_POST[textentry]){
                $textentry = $_POST[textentry]; //If comment was entered
            }
            else{
                if ($errormsg){ //If there is already an error, add next error
                    $errormsg = $errormsg . " & content";
                }else{
                    $errormsg = "Please enter content";
                }
            }
        }

        if ($errormsg){ //If any errors display them
            echo "<div class=\"box red\">$errormsg</div>";
        }

        //If all fields present
        if ($title && $textentry){
           //Do something
            echo "<div class=\"box green\">Form completed!</div>";
        }    
        ?>


Zanima me da li postoje neke sigurnosne rupe u ovom kodu za validaciju. Nebitno je koja polja za tekst su i koliko ih ima, ali da li moze ovako nesto da se primeni? osim sto bi za mail, dodao posebnu funkciju za proveru. Nailazio sam na razne kodove a ovaj mi bas deluje jednostavno.


Ili je mozda bolje da koristim ovaj kod:

Code:

 $greska=0
if (!trim(nadimak))
{
echo "nesto";
$greska++;
}

if (!trim(tekst))
{
echo "nesto";
$greska++;
}

if ($greska >0)
echo "nesto";
if ($greska ==1)
echo "nesto";
if ($greska>1)
echo "nesto";



[Ovu poruku je menjao webjunior dana 19.04.2012. u 22:48 GMT+1]

[Ovu poruku je menjao webjunior dana 19.04.2012. u 22:48 GMT+1]
[ ivan.a @ 20.04.2012. 01:01 ] @
Ako unosiš podatke u bazu obavezno "očisti" polja i upotrebi samo one znakove koji su potrebni.
Na primer ako je broj dodaj funkciju is_numeric (npr. if (is_numeric($_POST["neki_broj"]) ) ...).
Imaj na umu da svaki korisnikov unos može biti potencijalno maliciozan, zato gledaj da se obezbediš što više.

Za proveru forme možeš koristiti jednostavnu metodu tako što svaku grešku dodaješ u niz i na kraju samo proveriš da li postoji greška. Ako postoji onda u petlji prikažeš sve greške. Možda nisam najbolje objasnio jer kucam kasno ali princip je sledeći:

Code:
if ( isset($_POST["submit"]) ) { //Forma je poslata
   
   $greske = array();
   
   $naslov= $_POST["title"]; //Ispred ovog $_POST dodaj funkciju za "čišćenje" teksta. Npr. mysql_real_escape_string za bazu
   $komentar = $_POST["textentry"]; //Isto kao za prethodno

   if (strlen($naslov)<3 ) $greske[] = "Naslov nema dovoljno znakova (min. 3)";
   if (strlen($komentar )<5 ) $greske[] = "Tekst nema dovoljno znakova (min. 5)";

   if (!empty($greske) ) { // Ako postoji greška
      echo "<b>Sledeća polja nisu ispravna:</b>";
      foreach ($greske as $greska) {
      echo '<div class="box red">'.$greska.'</div>';
      }
  } else {
    //UNOS FORME (FORMA JE ISPRAVNA)
    echo '<div class="box green">Podaci su uspešno dodati.</div>';
   }

}


Na ovaj način možeš jednostavno proveravati formu i dodavati greške u niz ukoliko postoje. Ako sadržaj upisuješ u bazu podataka obavezno svako polje "očisti" pre unosa...za naslove se obično koriste samo slova i brojevi, a sve ostalo se uklanja...
[ webjunior @ 20.04.2012. 09:07 ] @
Da, nameravam da podatke unesim u bazu. Kako da ocistim polja? Za duzinu teksta mogu koristiti html kod za unos recimo
maxlength="20" . Ali razmisljam kako polja da stavim u niz pa da posle mogu lako da dodam ili oduzmem neko polje.
[ ivan.a @ 20.04.2012. 20:35 ] @
Citat:
Za duzinu teksta mogu koristiti html kod za unos recimo
maxlength="20" .
To nije dobar pristup (tj. jeste ali samo "vizuelno"), pošto se provera vrši client side, a ne server side. Ok je koristiti to, ali treba proveru pre svega vršiti preko server side skripte (php je u ovom slučaju).
Na primer ja lako mogu promeniti atribut maxlength tako što kliknem na "Inspect element" (Google chrome primer) i jednostavno promenim atribut maxlength u željeni broj. Takođe, postoji još dosta načina da se ovaj atribut zaobiđe ili ignoriše.

Citat:
Ali razmisljam kako polja da stavim u niz pa da posle mogu lako da dodam ili oduzmem neko polje.
Možeš li dati konkretan primer za ovo...
Ako misliš na neki "automatizovan" proces dodavanja i proveru polja možeš napraviti klasu ili funkciju za to. Npr. $forma->dodaj_polje($atributi) ... Mada je ponekad bolje i praktičnije ne komplikovati previše.
[ webjunior @ 20.04.2012. 20:48 ] @
Hm, ovo nisam znao. Ali vec sam se nekako snasao. Pravim posebne stranice za logovanje, registraciju i slicno...posle cu vec nekako da sve to kompaktujem :)

Malo se igram sa css i php i prosto vidim kakvih sve mogucnosti ima. Recimo, mogu posebno header da napravim, telo i module pa ih ubacujem po zelji. Za php koristim notepad++ a za html i css dreamweaver. Jos samo da proucim mysql.