Autor | Zpráva | ||
---|---|---|---|
juhano Profil |
#1 · Zasláno: 21. 6. 2009, 15:17:30
Ahojte,
Pomocou JPW sa mi podarilo urobiť "funkcny" formular. Pomocou JPW sa mi podarilo "zdokonalit" formular aby polia Telefon a Email neboli prazdne inak formular neodošle. Ale chcem to este zdokonalit a sice: 1. Kontrolovat pole Telefon ci obsahuje len numericke znaky 2. Kontrolovat pole E-mail ci obsahuje znaky @ a . Ak nebudu splnene tieto podmienky meil neodosle. Prehrabal som cele forum skusam metodou pokus - omyl. PHP cast <? $emailadr = "***@***.sk"; //e-mailová adresa na ktoru sa posle formular $predmet = "Cenova kalkulacia"; //predmet zprávy $odkoho = $_POST['mail_odosielatela']; //E-mail z ktoreho prisla zprava $telefon = $_POST['telefon']; $sprava = "Odkial: ".$_POST['odkial']." "; $sprava .= "Kam: ".$_POST['kam']." "; $sprava .= "Telefon: ".$_POST['telefon']." "; $sprava .= "e-mail: ".$_POST['mail_odosielatela']." "; $sprava .= "Predmet: ".$_POST['predmet']." "; $sprava .= "Odkaz: ".$_POST['odkaz']; if ($odkoho!="" and $telefon!="") //Ošetrujem vyplnenosť poli, ak nie sú vyplnené neodošle mejl { echo "<p><strong>Nevyplnili ste pozadovane polia.</p>"; // od tejto časti je to len take laborovanie } elseif(isset($_POST['mail_odosielatela'] && ereg('.+@.+\..+', $_POST['mail_odosielatela'])) { echo "<p><strong>Nevyplnili ste pozadovane polia.</p>"; } else { Mail("$emailadr",$predmet,$sprava,"From:" .$odkoho); echo "<p><strong>Váš e-mail bol úspešne odeslaný.</p>"; } else { echo "<p><strong>Správu sa nepodarilo odoslať. Nevyplnili ste povinné údaje.</p>"; } ?> Dakujem sa pomoc nahlad ako to vypada je tu |
||
Str4wberry Profil |
#2 · Zasláno: 21. 6. 2009, 16:58:09
Řádek 39:
elseif(isset($_POST['mail_odosielatela']) && ereg('.+@.+\..+', $_POST['mail_odosielatela'])) |
||
fajzen Profil |
#3 · Zasláno: 21. 6. 2009, 17:12:38 · Upravil/a: fajzen
tie podmienky máš napísané úplne opačne :)
správne (jedno zo správnych) riešenie: <?php if(empty($_POST['odkial']) || empty($_POST['kam']) || empty($_POST['telefon']) || empty($_POST['mail_odosielatela'])) { // predpokladám, že aj odkiaľ a kam sú povinné informácie, ak nie, stačí ich z podmienky odmazať echo "<p><strong>Nevyplnili ste pozadovane polia.</p>"; } else if(!ereg('.+@.+\..+', $_POST['mail_odosielatela'])) { // e-mailová adresa nemá správny formát } else if(!preg_match('/^\d+$/', $_POST['mail_odosielatela'])) { // telefón sa neskladá len z číslic } else { $sprava = "Odkial: ".$_POST['odkial']."\r\nKam: ".$_POST['kam']."\r\nTelefon: ".$_POST['telefon']."\r\ne-mail: ".$_POST['mail_odosielatela']."\r\nPredmet: ".@$_POST['predmet']."\r\nOdkaz: ".$_POST['odkaz']; $emailadr = "***@***.sk"; //e-mailová adresa na ktoru sa posle formular $predmet = "Cenova kalkulacia"; //predmet zprávy if(mail($emailadr, $predmet, $sprava, "From:" .$odkoho) { echo "<p><strong>Váš e-mail bol úspešne odeslaný.</p>"; } else { // nepodarilo sa odoslať e-mail kvôli nejakým interným problémom } } ?> |
||
juhano Profil |
#4 · Zasláno: 21. 6. 2009, 17:34:01
@Fajzen,
dik skopiroval a nahradil som tvojim riesenim ale hadze mi to internal server error vdaka za pomoc |
||
juhano Profil |
#5 · Zasláno: 21. 6. 2009, 19:11:33
<? if(empty($_POST['telefon']) || empty($_POST['mail_odosielatela'])) { // predpokladám, že aj odkiaľ a kam sú povinné informácie, ak nie, stačí ich z podmienky odmazať echo "<p><strong>Nevyplnili ste pozadovane polia.</p>"; } else if(!ereg('.+@.+\..+', $_POST['mail_odosielatela'])) { // e-mailová adresa nemá správny formát echo "<p><strong>Bol zadaný nesprávny E-Mail.</p>"; } else if(!preg_match('/^\d+$/', $_POST['telefon'])) //tu bola chybicka miesto Telefon bolo mail odosielatela { // telefón sa neskladá len z číslic echo "<p><strong>Telefon musi obsahovat ciselne pole.</p>"; } else { Mail("$emailadr",$predmet,$sprava,"From:" .$odkoho); echo "<p><strong>Váš e-mail bol úspešne odeslaný.</p>"; } ?> V tejto podobe sa zda ze to funguje Vdaka za pomoc. Este ma otazku aoky je rozdiel v podmienkach kodu Mojho { Mail("$emailadr",$predmet,$sprava,"From:" .$odkoho); echo "<p><strong>Váš e-mail bol úspešne odeslaný.</p>"; } A navrhovaneho Fajzenom if(mail($emailadr, $predmet, $sprava, "From:" .$odkoho) { echo "<p><strong>Váš e-mail bol úspešne odeslaný.</p>"; } |
||
Alphard Profil |
#6 · Zasláno: 21. 6. 2009, 19:30:24
juhano:
„Este ma otazku aoky je rozdiel v podmienkach kodu“ Ve druhém případě se zpráva vypíše pouze když se email podaří odeslat (fce mail() musí vrátit true), vaše verze tu hlášku vypíše vždy. |
||
juhano Profil |
#7 · Zasláno: 21. 6. 2009, 20:26:24
@Alphard som evidentne mimo misu z PHP ale:
Pises ze moju hlasku vypise vzdy. AKo vzdy? vypise ju len ked bude vyplneny telefon a email. Inak napise chybovu hlasku. resp. co znamena ked sa podari spravu odoslat? Ved ak je splnena podmienka vyplnenia telefon a mejl sprava sa odosle. Chcem tomu trosku pochopit no :-) ak tam uz nieco mam preco to tam mam. |
||
fajzen Profil |
#8 · Zasláno: 21. 6. 2009, 20:51:02 · Upravil/a: fajzen
juhano
e-mail sa nemusí podariť odoslať ak nastane chyba SMTP servera (preťažený, odpojený, nenastavený atď), vtedy funkcia mail vráti false |
||
AM Profil * |
#9 · Zasláno: 21. 6. 2009, 21:10:20
mimochodem, funkce ereg() (a všechny ereg začínající) jsou zavržené a do PHP6 se s nimi nepočítá (protože bývají problémové), používej výhradně preg_* (tedy zde preg_match místo ereg). Hlavně je hrozné míchat v jednom skriptu obojí.
|
||
juhano Profil |
#10 · Zasláno: 21. 6. 2009, 21:29:23
Pani dakujem za vysvetlenie.
ereg nahradim preg-om. AKurat teda mi to hadze daku chybu: Warning: preg_match() [function.preg-match]: Unknown modifier '+' in /domains1/do1176800/public/www_root/formular.php on line 92 |
||
AM_ Profil |
#11 · Zasláno: 21. 6. 2009, 21:33:29
výrazy pro preg_ funkce se musejí dávat mezi delimitery - zapisují se ve tvaru delimiter-výraz-delimiter-modifikátory, takže např. ten
'.+@.+\..+' '/.+@.+\..+/' |
||
juhano Profil |
#12 · Zasláno: 21. 6. 2009, 21:44:31
Dakujem za pomoc ide to tak ako som si predstavoval.
|
||
juhano Profil |
#13 · Zasláno: 21. 6. 2009, 22:01:59
Este predsa len jedn otazocka na fajzen-a:
ako si myslel ze telofon sa nesklada len z cislic? else if(!preg_match('/^\d+$/', $_POST['mail_odosielatela'])) { // telefón sa neskladá len z číslic |
||
fajzen Profil |
#14 · Zasláno: 22. 6. 2009, 07:41:13
juhano
pomýlil som sa, skopíroval som si zlú premennú, samozrejme tam má byť $_POST['telefon'] |
||
Časová prodleva: 15 let
|
0