Zadejte hledaný výraz...

Logické chyby v kontrole formuláře

Jakub Hošek
verified
rating uzivatele
(23 hodnocení)
31. 8. 2011 16:07:41
Zdravím, mám pořád problém se svým formulářem, už sjem ukončil závroky a vše ostatní, teď jsou ale jiné chyby...
Jde o to, že když například vůbec nic nezadáte, vypíše to, že nemáte správný e-mail, když tam ale nic neni, mělo by to napsat že jste nevyplnila všechna pole....
Také nevím jestli vůbec funguje odesílání, protože když zadám správný e-mail, nic se nestane... nevíte co s tím ? Díky
Můžete si to vyzkoušet zde : www.ucimsephp.howto.cz
Kód je zde :
ucim se PHP - převod veškerého času na sekundy
function check_email($email) {
$atom = ''; // znaky tvořící uživatelské jméno
$domain = '({0,61})'; // jedna komponenta domény
return eregi("^$atom+(\.$atom+)*@($domain?\.)+$domain$", $email);
}
if( $_POST ) {
//poleschybama
$pocet_chyb ="0" ;
//deklarace proměnných
$jmeno = $_POST ;
$bydliste = $_POST ;
$telefon = $_POST ;
$email = $_POST ;
$narozeni = $_POST ;
$vyska = $_POST ;
$vaha = $_POST ;
$miravpase = $_POST ;
$duvod = $_POST ;
$jinyduvod = $_POST ;
$komu = ' jakub.hosek@klikni.cz' ;
$chyba1 = "Nevyplnily jste všechna pole" ;
$chyba2 = "Zadali jste neplatný e-mail" ;
$chyba3 = "Máte číslo v kolonce jméno" ;
$chyba4 = "Máte číslo v kolonce jiný důvod" ;
$spravne ="Email byl úspěšně odeslán" ;
$doplnujici = "Přišel vám vyplňený jídelníček od : " ;
if ( $jmeno == " " || $bydliste == " " || $telefon == " " || $email == " " || $narozeni == " " || $vyska == " " || $vaha == " " || $miravpase == " " ) {
die( $chyba1 ) ;
$pocet_chyb ++ ;
}else {
if ( check_email($email) == false ) {
die ( $chyba2 ) ;
$pocet_chyb ++ ;
} else {
if ( is_numeric ($jmeno) )
{
die ( $chyba3 ) ;
$pocet_chyb ++ ;
}
elseif ( is_numeric ($jinyduvod) )
{
$pocet_chyb ++ ;
die ( $chyba4 ) ;
}
}}
if ( $pocet_chyb == "0" )
{
Mail ($komu, $jmeno, $bydliste, $telefon, $narozeni, $vyska, $vaha , $miravpase, $duvod, $jinyduvod, "From: " . $email ) ;
}
}?>

Formulář

Osobní informace
1. Jméno a příjmení:
2. Bydliště:
3. Telefon:
4. E-mail:
Datum Narození:
Výška:
Současná váha:
5. Míra v pase:
6. Důvod objednání jídelníčku :
Chci redukovat váhu
Nabrat svalovou hmotu
Poradit jak se mám zdravě stravovat
Udržovat váhu
Jiný Důvod:

31. 8. 2011 16:07:41
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672667
Martin
verified
rating uzivatele
(62 hodnocení)
31. 8. 2011 16:19:08
A proč když ověřuješ, jestli je nějaké pole prázdné máš $jmeno == " " ? Dej tam $jmeno="", bez tý mezery. Taky tam máš operátor || ( nebo). Aby to plnilo funkci, mělo by tam být AND nebo &&. Takhle pokud nevyplniš jednu kolonku, tak ti to napíše, že jsi nevyplnil žádnou.
Doplněno : Podívej se jak se píše funkce mail(). Ten textový řetežec musíš spojit. Ty tak posíláš spoustu řetězců, a ono je to bere jako parametry funkce mail().
Má to byý třeba takhle
$to = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "rn" .
'Reply-To: webmaster@example.com' . "rn" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
Když začínáš, tak by bylo určitě lepší postupně. Udělat si formulář s jedním prvkem a pak, když to všechno funguje jak má, tak pomalu přídávat prvky a podmínky. A né nacpat do jedno scriptu 10 inputů, nesmyslný podmínky např. na ověření jestli není ve jménu číslo a ještě rovnou posílání na email.
31. 8. 2011 16:19:08
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672666
Jan Matoušek
verified
rating uzivatele
(12 hodnocení)
31. 8. 2011 16:24:15
první podmínka se ti nesplní, protože tam máš mezeru, pokud do celého formuláře vyplníš po mezeře, tak ti to napíše co žádáš... Elegantnější způsob je kontrolovat nastavení pomocí isset if ( !isset($jmeno) || !isset($bydliste ) atd..... vykřičník převrátí true na false a naopak, takže pokud proměnná nebude nastavena vrátí isset false a vykřičník to převrátí na true a splní se podmínka a vypíše se error
k odesílání mailu si nejsem teď 100% jist, ale podle mne nemůžeš dávat do funkce mail více parametrů, takže bych to udělal spíše takto:
$body = $jmeno;
$body .= $bydliste;
$body .= $telefon;
$body .= $narozeni;
$body .= $vyska ;
$body .= $vaha ;
$body .= $miravpase ;
$body .= $duvod ;
$body .= $jinyduvod;
$subject = 'form';
Mail ($komu, $subject, $body , "From: " . $email ) ;
31. 8. 2011 16:24:15
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672665
Petr
verified
rating uzivatele
(9 hodnocení)
31. 8. 2011 16:27:33
napis mi prosim Te PM a ja Ti to cely rozchodim.. tohle je na hovno :-D
31. 8. 2011 16:27:33
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672664
Jakub Hošek
verified
rating uzivatele
(23 hodnocení)
31. 8. 2011 16:57:44
KejliCZ
Mezeru jsem zrušil :) || je správně, má to ověřit jestli náhodou něco neni prázdný...
Paradiso
Díky za rady, zkusím :)
NSBM Dělám to proto abych se to naučil, ne abych to "měl" :) Ale jinak díky :)
---------- Příspěvek doplněn 31.08.2011 v 17:03 ----------
Tak už vše funguje, dokonce se to i odesílá, ale když se to odešle vypadá to v mejlu hrozně... Je to za sebou bez mezer, a všechny informace mám v předmětu, nikoliv ve zprávě... nevíte jak se vypořádat s tímto ? :)
31. 8. 2011 16:57:44
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672663
Bacon
verified
rating uzivatele
(2 hodnocení)
31. 8. 2011 17:34:18
Máš to totiž špatně, mail se v php pomocí funkce mail() odesílá takto:
mail( $prijemce, $predmet, $telo_zpravy)
První, po čem sáhni, když ti něco nejde, je php.net, tam na 90% najdeš vysvětlení, pokud se jedná o takovou triviální chybku :)
31. 8. 2011 17:34:18
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672662
Martin
verified
rating uzivatele
(62 hodnocení)
31. 8. 2011 19:02:37
Napsal Z3NTIVA;696159
KejliCZ
Mezeru jsem zrušil :) || je správně, má to ověřit jestli náhodou něco neni prázdný...
Máš recht. Já to špatně pochopil. Myslel jsem, že ta hláška "Nevyplnily jste všechna pole" znamená, že jsi nevyplnil ani jedno ( něco jako Nevyplnil jste žádné pole ).
31. 8. 2011 19:02:37
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672661
Kamil Hurajt
verified
rating uzivatele
(8 hodnocení)
31. 8. 2011 19:47:52
A co takto to vyriesit jednoducho a efektivne ? :)
---------- Příspěvek doplněn 31.08.2011 v 19:54 ----------
Upravene :)
31. 8. 2011 19:47:52
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672660
nevztahuje se to k tematu, ale mohl bych se zeptat proc tak moc rozepisujes script?
jednodusi a prehlednejsi mi prijde
prehlednejsi ve vysledku protoze pak script nezabere tolik mista a porad se v tom da krasne vyznat. Pokud si nekdo mysli neco jineho, cekam na nazor ;)
1. 9. 2011 11:23:40
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672659
Martin
verified
rating uzivatele
(62 hodnocení)
1. 9. 2011 11:33:18
Mě teda přijde přehlednější zápis
1. 9. 2011 11:33:18
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672658
prehlednejsi ve vysledku protoze pak script nezabere tolik mista a porad se v tom da krasne vyznat. Pokud si nekdo mysli neco jineho, cekam na nazor ;)
Existuji urcite standardy a doporuceni, jak se zapisuje kod. A uzavirat jednotlive bloky kodu, mezi ne rozhodne patri :)
1. 9. 2011 11:38:09
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672657
Co udělá tento kód? :)
1. 9. 2011 11:51:34
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672656
800XE
verified
rating uzivatele
(8 hodnocení)
1. 9. 2011 11:55:02
Co udělá tento kód? :)
Vypíše "Xchosi, mas chybu v matrixu" pokaždé, protože to už není součástí podmínky.
Je to jenom o zvyku. Když třeba za if následuje jenom jeden příkaz, tak ho taky neuzavírám do složených závorek. Ale tam kde je používám, je zapisuju hned za příkaz a ne na nový řádek.
Jinak mě třeba místo
přijde přehlednější
a ideálně
1. 9. 2011 11:55:02
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672655
Argument pro to, abychom uzavírali blok vždy, je v tom, že kód může upravovat někdo jiný ( = také já o 6 měsíců později), kdo absenci závorek přehlédne, a tím vznikne "podmínka", která proběhne vždycky.
1. 9. 2011 11:57:16
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672654
800XE
verified
rating uzivatele
(8 hodnocení)
1. 9. 2011 12:01:20
Od toho je tady zase odsazování kódu. Ale jak jsem psal, je to o zvyku, já považuju za správné obě varianty a když se to vyloženě vyžaduje, tak nemám problém uzavírat všechno.
1. 9. 2011 12:01:20
https://webtrh.cz/diskuse/logicke-chyby-v-kontrole-formulare/#reply672653
Pro odpověď se přihlašte.
Přihlásit