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