Autor | Zpráva | ||
---|---|---|---|
davevo Profil |
#1 · Zasláno: 24. 11. 2013, 12:27:51
Dobrý den,
potřeboval bych poradit s PHP přes který odesílám formulář na emal. 1.největší problém je že po odeslání mě echo nezavolá stránku odeslan.html 2. neumím ošetřit vztupy na email pole kde bych chtěl aby to zkontrolovalo aspon znak @ a u telefonu aby tam byly čísla 0123456789 a popřípadě + Byl bych moc rád kdyby mě někdo opravil skript pokud to teda není nějak více náročné. Názor na stránku www.masaze-terapiedotykem.cz |
||
okolojsoucí Profil * |
#2 · Zasláno: 24. 11. 2013, 12:55:53 · Upravil/a: Moderátor (editace znemožněna) 24. 11. 2013, 15:13:33
Moderátor Davex: Následující příspěvky do #5 a příspěvek #7 přesunuty z Názor na stránku w>ww.masaze-terapiedotykem.cz.
A co má dělat toto? echo "<a href=http://www.masaze-terapiedotykem.cz/odeslan.html</a>"; } else { echo "<a href=http://www.masaze-terapiedotykem.cz/neodeslan.html</a>"; } Když už chcete přesměrovat tak pomocí <?php header('Location: page.html'); ?> |
||
juriad Profil |
#3 · Zasláno: 24. 11. 2013, 13:00:55
Přebývá ti jeden argument (telefon) ve volání funkce na 40. řádku.
cs_mail("info@masaze-terapiedotykem.cz", $predmet,$zprava,$telefon, "From: ".$email."\r\n"); |
||
davevo Profil |
#4 · Zasláno: 24. 11. 2013, 13:28:44
Děkuji už to funguje.
A dokázal by mě někdo poradit jak ověřit vtupy? neumím ošetřit vztupy na email pole kde bych chtěl aby to zkontrolovalo aspon znak @ a u telefonu aby tam byly čísla 0123456789 a popřípadě + |
||
juriad Profil |
#5 · Zasláno: 24. 11. 2013, 13:40:11
$je_email = preg_match('#^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$#', $email); $je_telefon = preg_match('#^(\+420)? ?[0-9]{3} ?[0-9]{3} ?[0-9]{3}$#', $telefon); if($je_email == 1 && $je_telefon == 1) {...} www.regularnivyrazy.info/telefonni-cislo.html |
||
roboti006 Profil * |
#6 · Zasláno: 24. 11. 2013, 14:20:03
1. if(mail($blabla)){
//úspěšně odesláno: přesměrovat header('Location: http://www.example.com/odeslan.html ');
} else {die('nebylo odeslano :)')} 2. if(!preg_match($struktura,$email){ //není email adresa } Snad jsem to nedopletl moc... :D |
||
davevo Profil |
Díky to jsem potřeboav.
ještě jsem tam doprogramoval další podmínky. if($je_email == 0 && $je_telefon == 1) if($je_email == 1 && $je_telefon == 0) if($je_email == 0 && $je_telefon == 0) Možná je to kostrbaté nebo to lze i jednoduše alé já to udělal takto |
||
Amunak Profil |
Moderátor Davex: Přesunuto z Názor na stránku w>ww.masaze-terapiedotykem.cz.
davevo: Chceš mi říct, že všechny tyhle podmínky dělají ve svém bloku to samé? Z jejich popisu hádám, že ano. Když máš víc podmínek, které chceš spojit, tak to ozávorkuješ a dáš mezi to logické nebo: if((A) || (B) || (C) || ...) Nebo můžeš použít jen else { pokud máš před tím to if($je_* == 1 ... nebo použij prostě if($je_email == 0 || $je_telefon == 0)) . Pokud chceš rozličit hlášku "vyplňte telefon" a "vyplňte email", tak bys to měl spíš předat dál jako parametr, než mít samostatnou stránku, a prostě tu chybovou hlášku vypsat tehdy, když je to neplatné.
Pak můžeš mít něco jako: if($je_email == 1 && $je_telefon == 1) { // zpracuj formulář } else { header('Location: formular.php?hlaska=' . !$je_email . '|' . !$je_telefon); } a u toho formuláře: $hlasky = isset($_GET['hlaska']) ? explode('|', $_GET['hlaska']) : array(0,0); if($hlasky[0]) echo 'Email je špatně vyplněný.'; if($hlasky[1]) echo 'Telefon je špatně vyplněný.'; juriad: Co když má někdo email s doménou 3. řádu .museum? Co když má někdo email bez domény, chce použít jen IP adresu? Co když tam chce vyplnit telefon slovák (+420) nebo někdo, kdo má číslo z cizí země obecně? Proč si to tak komplikovat? Když tam někdo bude chtít vyplnit blábol, stejně to udělá. Pro validaci bohatě stačí něco jako tohle: $je_email = preg_match('#^[a-z0-9._-]+@[a-z0-9.:-]+$#i', $email); $je_telefon = preg_match('#^+?[0-9]{14}$#', preg_replace('#\s#', '', $telefon)); m>mm, prosím o přesunutí |
||
juriad Profil |
#9 · Zasláno: 24. 11. 2013, 18:24:59
Amunak:
Když bude chtít místo domény ip adresu, musí uvést adresu ve tvaru: jmeno@[255.255.255.255] , což tvůj regulár stejně neumožňuje.
A co potom IPv6. A co, když bude ve jménu použít znak +, také ho neuvažuješ. Nová TLD obsahují neascii znaky, vůbec je tvůj regex neuvažuje. BTW, 3. řád domény mi nevadí, museum lze řešit změnou jednoho znaku v regexu (horního omezení rozsahu TLD). Co telefon ve formátu: 00420 123456789 ? Ten neumožňuješ.
Nejde mi o útok, ale ukázku, že téměř každé řešení má mouchy. A vymyslet takovou kontrolu, která by nebyla příliš restriktivní a zároveň byla dostatečně robustní a jednoduchá, dá docela práci. ;-) |
||
Amunak Profil |
juriad:
„Když bude chtít místo domény ip adresu, musí uvést adresu ve tvaru: jmeno@[255.255.255.255] , což tvůj regulár stejně neumožňuje.“
To jsem nevěděl. Buď by to tam chtělo dopsat, nebo prostě nechat jen username (hádám, že to máš z nějaké specifikace), a ten zavináč. „A co potom IPv6.“ Pokud to taky nemá nějakou zvláštní notaci, ta dvojtečka by na to měla stačit, ne? „A co, když bude ve jménu použít znak +, také ho neuvažuješ.“ Ani ty :-) domníval jsem se, že to máš právě z nějaké specifikace. Po přečtení wikipedie bych se přikláněl k tomu testovat pouze zavináč. I když ztovna to plus by tam snad nikdy být nemělo, i když mám pocit, že jsem někde adresu se znakem plus viděl. „Co telefon ve formátu: 00420 123456789 ? Ten neumožňuješ.“
„A vymyslet takovou kontrolu, která by nebyla příliš restriktivní a zároveň byla dostatečně robustní a jednoduchá, dá docela práci. ;-)“ Souhlasím - proto bych se taky spíš přikláněl k tomu dělat kontrolu pokud možno "stoprocentně nerestriktivní", protože nějaký blábol tam může uživatel/zákazník napsat vždycky, a regexem to projde, ale když ho něco omezí tak, že tam tu adresu nemůže napsat, je to dost možná taky ztracený zákazník. Na druhou stranu pokud má někdo adresu ve stylu "a.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual!"@[IPv6:feed:bad:dead::beef:cafe], tak asi nemůže úplně očekávat, že mu bude všude fungovat. :-) Tak jsem si hrál s gmailem a zjistil jsem, že snad ani jedna z těch kurióznějších adres tam nefunguje - buď to server odmítne odeslat, nebo se to ztratí po cestě, nebo dostanu oznámení o nedoručitelnosti. Navíc Thunderbird odmítá odesílat maily na adresy, kde je lokální část s diakritikou. |
||
Časová prodleva: 10 let
|
0