Szerver-oldali Form validálás
Üdv
Eme cikk a formos kérdésem folytatása. A kliens-oldali ellenőrzés rendben, ám adódott gond frissítés után a szerver-oldalon is. Sajnos.... a lényeg, elején deklarálok egy változót, ami itt még üres, de hiba esetén ehhez adódik a 3 hiba egyike. A gondom kétoldali.
Első gondom : Ellenőrzéskor, nem tudom úgy elelnőrízni, hogy létezik-e a változó (tehát adódott-e hozzá a 3-ból már vmelyik), mivel alapból létrehoztam egy üres értékkel. Így akárhogy ellenőrzöm, mégha helyes is, hibás értékkel tér vissza.
Itt van hozzá az érintett kódrészlet, összevágva:Második gondom: Igyekeztem normális e-mail ellenőrzést összehozni, de ahogy olvastam is néhány oldalon, egyetemes elelnőrzőt összehozni szinte lehetetlen. Próbálkoztam wordpress-szerű elelnőrzéssel is, és végülis erre jutottam(lejjebb). A gondom, hogy erre unexpected-et ír egy { -re. Hátha valaki meglátja a hibát benne, amit én nem veszek észre...C.
■ Eme cikk a formos kérdésem folytatása. A kliens-oldali ellenőrzés rendben, ám adódott gond frissítés után a szerver-oldalon is. Sajnos.... a lényeg, elején deklarálok egy változót, ami itt még üres, de hiba esetén ehhez adódik a 3 hiba egyike. A gondom kétoldali.
Első gondom : Ellenőrzéskor, nem tudom úgy elelnőrízni, hogy létezik-e a változó (tehát adódott-e hozzá a 3-ból már vmelyik), mivel alapból létrehoztam egy üres értékkel. Így akárhogy ellenőrzöm, mégha helyes is, hibás értékkel tér vissza.
Itt van hozzá az érintett kódrészlet, összevágva:
if(isset($_POST['Submit'])) {
$hiba = '';
$nev = ($_POST['name']);
$mail = ($_POST['email']);
$comment = ($_POST['comment']);
function checkName($nev) {
if(strlen($nev) < 3) { // elég hosszú a név mező értéke?
return false;
}
else { return true; }
if(strlen($nev) > 20) { // nem túl hosszú a név mező értéke?
return false;
}
else { return true; }
}
function checkMail($mail) {
if($mail == (eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6}$", $mail))) {
// az e-mail mező értéke szabványos?
return false;
}
else { return true;}
}
function checkComment($comment) {
if(strlen($comment) < 6) { // elég hosszú az üzenet?
return false;
}
else { return true; }
if(strlen($comment) > 280) { // nem túl hosszú az üzenet?
return false;
}
else { return true; }
}
if(!checkName($_POST['name'])) {
$hiba .= '<li>Hiba a névvel!</li>';
}
if(!checkMail($_POST['email'])) {
$hiba .= '<li>Hiba az e-maillel!</li>';
}
if(!checkComment($_POST['comment'])) {
$hiba .= '<li>Hiba az üzenettel!</li>';
}
if(!isset($hiba) || count($hiba) <1) { // nincs hiba, feldolgozás behívása
echo("Gratula ;)");
}
else { // hiba esetén kilistázza a hibákat
echo '
<div id="thx_frame">
<div id="thx_input">
<div>
<H2>Hiba!</H2>
A hozzászólása nem került mentésre !<br />
Ennek lehetséges okai:<br /><br /><ul>
<color=#a43b35>'.$hiba.'</color>
</ul><br />
Kérem próbálja újra.<br />
</div><br />
<div>
>> <a href="'.$_SERVER['HTTP_REFERER'].'">Vissza a vendégkönyvhöz</a> <<
</div>
</div>
</div>
';
}
}
function checkMail($mail) {
if($mail == (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $mail)) {
return false;
}
else { return true;}
}
probald igy
if(!isset($hiba) || count($hiba) <1) {
helyett
if ($hiba===''){
Zárójelek
Remélem nem gond, ha nem
Azt szeretném tudni, hogy adatbazásiba mentés előtt elég e ennyit tenni a voltozóval:
function safe($value)
{
$this->db_connect();
$value = trim($value);
if(get_magic_quotes_gpc()) $value = stripslashes($value);
$value = mysql_real_escape_string($value);
return $value;
}
Jelenleg én ezt használom, de megannyi topik szól arról, hogy szükséges a htmlentities, htmlspecialchars is. Illetve arról is hogy nem, mert ezek kimeneti szűrők és tehát használatuk az SQL-injection ellen nem véd (sőt!), ezért kiolvasás után kell hasznalni őket XSS ellen!
Nem véletlenül kérdezem, mert mint mondtam 1000 helyen hol cáfolják, hol erősítik ezt az állítást.
Ha mysql_real_escape_string-et (mres) használok, kell a trim is, egyébként?
Találtam egy osztályt a phpclasses.org-on és ha jól értelmeztem, ott is csak mres van és strip ha szükséges.
Kiváncsi lennék a tapasztalt programozók véleményere (is).
^^
Mahoo, én bár nem vagyok tapasztalt programozó még, és ezt a biztonságot se igen használom, lévén hogy nem hatalmas adatbázisokkal s portálokkal dolgozom, de azért hozzászólok énis, ha nem gond :) Én ezt utoljára a diplomamunkámban használtam, kicsit más formában. Ott minden változókkal való művelethez odarendeltem az én kis kódom, ami be kell valljam, még a tiedénél is rövidebb volt :)
C.
Nem!! Sőt! Látom, hogy
Bár részemről a htmlspecial és a htmlentities még mindig kérdéses!
Sok sikert a magunkfajta, még gyakorló php-seknek! :)
Nem a méret a lényeg