Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

validacija forme, u FF-u da, u IE ne!?

[es] :: PHP :: validacija forme, u FF-u da, u IE ne!?

[ Pregleda: 3095 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

asyk

Član broj: 46486
Poruke: 55
*.dsl.iskon.hr.



Profil

icon validacija forme, u FF-u da, u IE ne!?04.05.2005. u 13:49 - pre 187 meseci
Dakle, imam nekakvu formu za kontakt, i napisao sam nekakvu vrstu validacije
da se provjerava ukoliko se ne upiše ime, prezime ili poruka da se korisnika
to i obavijesti. Medjutim, u Firefoxu mi validacija uredno radi, a u IE-u
ne!? IE je 6.0.2600.x build, a FireFox 1.0.3... Radi se u php-u. Da li itko
zna u cemu bi mogao biti problem?

skripta koja mi procesira upisane podatke iz forme (kontakt.php) ide ovako:

Code:
<?php
$name=$_POST['name'];
$email=$_POST['email'];
$comments=$_POST['comments'];
if (isset($_POST['submit'])) {
// Provjeri ime
 if (strlen($_POST['name']) > 0) {
        $name = $_POST['name']; } else { $name=FALSE; echo 'Molimo upišite
svoje ime.<br><br><meta http-equiv="Refresh" content="5; URL=kontakt.php">';
exit();
         }
 if (strlen($_POST['email']) > 0) {
        $email = $_POST['email']; } else { $email=FALSE; echo 'Molimo
upišete svoju email adresu.<br><br><meta http-equiv="Refresh" content="5;
URL=kontakt.php">'; exit();
         }
 if (strlen($_POST['comments']) > 0) {
        $comments = $_POST['comments']; } else { $comments=FALSE; echo
'Molimo upišite sadržaj poruke.<br><br><meta http-equiv="Refresh"
content="5; URL=kontakt.php">'; exit();
          }
 } else  { ;}


if ($name && $email && comments) {
// kreiraj kratka imena za varijable
   $name=$_POST['name'];
   $email=$_POST['email'];
   $comments=$_POST['comments'];
   $toaddress='[email protected]';
   $datum=strftime("%d.%m.%Y");
   $vrijeme = strftime("%T");

$subject='Nova poruka s Vasih web stranica';
$mailcontent='Posiljatelj: '.$name."\n"
   .'Email: '.$email."\n"
   ."Poruka: \n".$comments."\n"
   .'         '."\n"
   .'---------'."\n"
   .'         '."\n"
   .'(Poruka je poslana na datum: '.$datum."\n".'tocno u
'.$vrijeme.')'."\n";
$fromaddress='Od: [email protected]';
mail($toaddress, $subject, $mailcontent, $fromaddress);
echo "<b>$name</b>, zahvaljujemo na Vašem komentaru:
<p><i>$comments</i></p></tt><p>Potruditi ćemo se odgovoriti Vam na adresu
<i>$email</i>.</p>";
}

else { ; }
?>


Najvjerojatnije je problem u tome sto neki standard nije zadovolje ili
nesto, pa ako ima ovdje gurua...cijenio bih pomoc.
 
Odgovor na temu

dr ZiDoo
Banja Luka

Član broj: 189
Poruke: 1728
195.252.64.*

Jabber: ZiDoo@elitesecurity.org
ICQ: 299539598
Sajt: zidoo.geek.rs.ba


Profil

icon Re: validacija forme, u FF-u da, u IE ne!?04.05.2005. u 13:59 - pre 187 meseci
Postuj code forme, tamo je sigurno greska, posto ocito forma ne prosledjuje neko polje u php... drugo ne mere biti...
tu nema kašike....
 
Odgovor na temu

asyk

Član broj: 46486
Poruke: 55
*.dsl.iskon.hr.



Profil

icon Re: validacija forme, u FF-u da, u IE ne!?04.05.2005. u 14:04 - pre 187 meseci
Evo koda forme:

Code:
<tr>
<td><form action="zahvala.php" method="post">
<table width="100%"  border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="100%"><div align="center"></div>
<div align="center">
<table width="90%"  border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="29%" class="txtmain">Ime i prezime: </td>
<td height="22" colspan="2"><div align="left"><span class="txt1crni">
<input name="name" type="text" class="box1" />
</span></div></td>
</tr>
<tr>
<td class="txtmain">e-mail:</td>
<td height="22" colspan="2"><div align="left"><span class="txt1crni">
<input name="email" type="text" class="box1" />
</span></div></td>
</tr>
<tr>
<td colspan="3" valign="top" class="txt1crniDesni"></td>
</tr>
<tr>
<td valign="top" class="txtmain">Poruka:</td>
<td colspan="2"><div align="left"><span class="txt1crni">
<textarea name="comments" class="box2"></textarea>
</span></div></td>
</tr>
<tr>
<td colspan="3" class="txt1crniDesni"></td>
</tr>
<tr>
<td><div align="right"></div></td>
<td width="3%"><div align="left">
<input name="submit" type="image" value="submit" src="gif/01posalji.gif" width="45" height="17" border="0">
</div></td>
<td width="68%"><div align="left"></div></td>
</tr>
</table>
</div></td>
</tr>
</table>
</form></td>
</tr> 


Ja mislim da nije problem u kodu forme, jer onda uopce nebi uzimalo vrijednosti iz forme niti ista. Problem je u tome sto ne znam zasto u Firefoxu normalno da upozorenje da se neko polje nije ispunilo (odnosno prikaze poruku sa zahvalom i maila content iz forme) a u IE-u nista od toga!
 
Odgovor na temu

dr ZiDoo
Banja Luka

Član broj: 189
Poruke: 1728
*.teleklik.net.

Jabber: ZiDoo@elitesecurity.org
ICQ: 299539598
Sajt: zidoo.geek.rs.ba


Profil

icon Re: validacija forme, u FF-u da, u IE ne!?04.05.2005. u 16:27 - pre 187 meseci
Pretpostavljam da ovo znas, mozda si zanemario u afektu :), ali eto neka i za druge.

Imate ovakav slucaj i sada naravno nesto ne radi. Evo kako se radi dibagovanje:

Kako to inace radi:

Code:
                                 
HTML forma -> PHP ---> daje neki output (echo, print)
                      |
                      |
                     \/
                 redirekcija (header)



1) Podatke iz HTML forme (input, textarea) klikom na submit saljete na stanicu iz action polja u formi.
Ako dobijate ERROR 404 onda je greska u HTMLu: lose definisan action

2) Otvara vam *.php stranicu ali nesto ne stima. PHP ne radi kako treba, ubjedjeni ste da nema gresaka u samom kodu nego da je do varijabli koje je trebo primiti. Postoje dva potencijalna problema:

a) HTML forma nije dobra. Mozilla, Opera i IE u svom engine imaju ugradjene funkcije da ukoliko naidju na gresku u kodu to pokusaju ublaziti tako sto njihov engine dodaje zaboravljene tagove, navodnike ili slicno. Ovakve greske se cesto manifestuju tako sto u nekim browserima rade a u nekim ne.

b) Imate gresku u PHP codu prilikom prijema varijabli iz forme.

Pokusavate to da uradite preko global_register koji je mozda iskljcen u php.ini?
Stavili ste pogresno ima variajble tipa:
Code:

/* primjer I: varijabla prezime */
$prezime = $_POST['przme'];

...

/* primjer II: varijabla prezime */
$przme = $_POST['prezime'];

Jednostavno vam se negdje na drugom mjestu u kodu prebrise ta varijabla.

E sada kada vidite moguce problema da vidimo kako se to dibaguje...

Koriscenjem varijabli $HTTP_POST_VARS i HTTP_GET_VARS (http://www.php.net/manual/en/reserved.variables.php) mozete da vidite koje sve informacije je PHP skripta primila i pod kojim imenom. Znaci na pocetak skripte, pre svega dodajte:

Code:

<?php

print_r($HTTP_POST_VARS);
print "<br><br>";
print_r($HTTP_GET_VARS);

?>


Tu cete uociti gdje je greska. Uvrstite je u gore navedeno, malo razmislite i nacete problem.
tu nema kašike....
 
Odgovor na temu

asyk

Član broj: 46486
Poruke: 55
*.dsl.iskon.hr.



Profil

icon Re: validacija forme, u FF-u da, u IE ne!?05.05.2005. u 09:36 - pre 187 meseci
Nisam zaboravio na debugiranje, ali svejedno ne znam do cega je jos uvijek, iako sada vec pretpostavljam.

Samo bih se nadovezao na tvoje testiranje, to se moze i jednostavnijim kodom vidjeti:

Code:
echo "<pre>";
print_r($_POST);
echo "</pre>";


Kod takvog debugiranja, varijable su meni tocno onakve kakve i trebaju biti, odnosno, zaprime vrijednost onu koja se upise u formi, a ako se nista ne upise onda ni nemaju vrijednost, tj. prazne su.

Za ovaj moj slucaj, pretpostavljam da je php kod s nekom zagradom i tocka-zarezom vjerojatno negdje krivo ubacen u sam html i da mi to jebe koncepciju. Slijedece sto cu pokusati je da exportam samo html kod koji mi ima veze s ovim php-om i traziti lošu sintaktu ili što već. Ako to nije, onda sam screwed, zbilja.

Inace, jako koristan post, tnx.
 
Odgovor na temu

[email protected]
http://localhost

Član broj: 2597
Poruke: 1603

Sajt: localhost


+23 Profil

icon Re: validacija forme, u FF-u da, u IE ne!?05.05.2005. u 10:37 - pre 187 meseci
xe xe

Čest problem kada se za submit dugme koristi slika.
Umesto:
Code:
isset($_POST['submit'])


Stavi:
Code:
isset($_POST['submit_x'])


ili
Code:
isset($_POST['submit_y'])


Ovo si mogao da zaključiš kada si uradio:
Code:

echo "<pre>";
print_r($_POST);
echo "</pre>";


da ne šalje $_POST['submit'] već izmenjene.
Banned - Not available
 
Odgovor na temu

asyk

Član broj: 46486
Poruke: 55
*.dsl.iskon.hr.



Profil

icon Re: validacija forme, u FF-u da, u IE ne!?05.05.2005. u 12:40 - pre 187 meseci
Mislim da nije u tome stvar, jer kada i promijenim pozivanje isset()-a sa submit_x ili submit_y, svejedno se dogadja ista stvar.
 
Odgovor na temu

stsung
NS

Član broj: 12899
Poruke: 432
*.neobee.net.



+2 Profil

icon Re: validacija forme, u FF-u da, u IE ne!?06.05.2005. u 05:17 - pre 187 meseci
Pozd.

Prva stvar: IE ce to submit dugme proslediti kao 2 varijable "submit_x" i "submit_y". Firefox osim te dve prosledjuje i varijablu "submit". Znachi umesto
Code:
if (isset($_POST['submit'])) {
mora da se stavi
Code:
if (isset($_POST['submit_x'])) {

U sushtini, preporuka je da se provera prisutnosti forme vrshi nekom HIDDEN varijablom a ne "submit" elementom.

Druga stvar: Dodeljivanje poput
Code:
$name=$_POST['name'];
nije lepo - nishta ne garantuje da neko tu nije chachkao pa da te varijable uopshte postoje. Najbolje je imati funkciju dodele koja dalje mozhe da vrshi neko dodatno procesovanje, no u ovom sluchaju zadrzhacemo se na jednostavnom
Code:
$name = isset($_POST['name'])?$_POST['name']:'';
Ovo vazhi i za ostale dve naredbe dodele. Eventualno mozhesh da upotrebish i funkciju trim() koja uklanja prazne karaktere sa pochetka i kraja stringa, kako ne bi na primer imao nazive sastavljene od samo SPACE karaktera.

Treca stvar: Ako si vec obavio ove naredbe dodele, ne vidim potrebu za proverama poput
Code:
if (strlen($_POST['name']) > 0) {
Znachi, trebalo bi
Code:
if (strlen($name]) > 0) {
Ovo vazhi i za ostale dve provera. Samim time, nakon provere da li je vrednost strlen() veca od 0, ne vidim svrhu ponovnom dodeljivanju vrednosti $_POST istoj varijabli - to je vec uradjeno. Potrebno je reagovati samo u sluchaju da je vrednost strlen() jednaka 0.

Chetvrta stvar: Nakon provera validnosti te 3 varijable, ne vidim razlog zashto se tu ne bi nashao drugi deo koda u kome se formira i shalje e-mail poruka, poshto jedino tu i ima smisla da se nalazi. U tom trenutku provera da li su sluchajno $name, $email i $comments validni nema smisla jer u sluchaju da nisu skripta ce ti izvrshiti exit() i taj se deo koda nikada nece izvrshiti. U sushtini nije lepo koristiti exit() za takve stvari ali da sad ne komplikujemo. Usput, taj drugi IF blok ti nije validan - pogreshno imenovana $comments varijabla (zaboravio si znak $). Isto tako, umesto && po preporuci autora treba koristiti AND.

Peta stvar: Operacije dodele u drugom IF bloku (koji smo u prethodnoj jelda stvari prebacili) su OPET suvishne... u celoj skripti 3 puta radish jednu istu stvar. Imaju smisla samo nove stvari poput $subject, $datum i sl. Sadrzhaj varijable $fromaddress ti pochinje sa 'Od: bob.rock... a treba 'From: bob.rock...

Shesta stvar: Dodatno procesiranje onoga shto korisnik shalje je u ovim sluchajevima praktichno neophodno. Ako bi na primer u COMMENT tekstu korisnik ukucao <ENTER>.<ENTER> u tom trenutku bi sendmail ili vec koji servis smatrao da je DATA sekcija e-mail poruka zavrshena. No da ne komplikujemo previshe, ovo sam samo hteo da napomenem.

I na kraju, preporuchujem ti da probash da se malko disciplinujesh kada je rech o pisanju koda. Isti standard koji koristi i PEAR repository za pisanje koda je preporuka, i naravno malko bolja logistika i organizacija poput koriscenja design patterna. Korisna adresa: http://pear.php.net/manual/en/standards.php

Svako dobro.
 
Odgovor na temu

asyk

Član broj: 46486
Poruke: 55
*.dsl.iskon.hr.



Profil

icon Re: validacija forme, u FF-u da, u IE ne!?06.05.2005. u 08:21 - pre 187 meseci
Wow! E, ovo je iscrpan i koristan odgovor. Hvala što si mi skrenuo pažnju na bitne stvari. Maloprije sam pročitao tvoj odgovor i još nisam popio jutarnju kavu, pa ću se iza tog rituala pozabaviti tvojim preporukama. Nadam se da ću ovaj put napraviti stvar propisno i po standardima. Još jednom tnx. Javim rezultate.
 
Odgovor na temu

asyk

Član broj: 46486
Poruke: 55
*.dsl.iskon.hr.



Profil

icon Re: validacija forme, u FF-u da, u IE ne!?06.05.2005. u 14:15 - pre 187 meseci
Dakle, problem sam napokon riješio. Ključna stvar za ispravnu validaciju u IE-u je bila upravo funkcija isset koja sada u mom kodu glasi:

Code:
if (isset($_POST['submit_x'])) {


Očito je FireFox malo napredniji i u tim stvarima od svog razvikanijeg konkurenta.

Druga bitna stvar koju sam uporno (iako ne znam kako) previđao je bio nedostatak u comments varijabli, kojoj je falio "$" ispred.

Hvala svima korisnim odgovorima.
 
Odgovor na temu

[es] :: PHP :: validacija forme, u FF-u da, u IE ne!?

[ Pregleda: 3095 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.