Autor | Zpráva | ||
---|---|---|---|
Mat Profil * |
#1 · Zasláno: 10. 3. 2011, 21:23:09
Dobrý den,
s php jsem naprostý začátečník, takže si nevím hned rady. Snažím se zprovoznit odesílání e-mailů z mého webu, ale po vyplnění formuláře se e-mail občas pošle a občas ne, což je velký problém. Netušíte někdo čím by to mohlo být? Děkuji Formulář <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <title>Odesílání emailu</title> </head> <body> <link rel="StyleSheet" href="style2.css" type="text/css" > <form action="http://mskarka.ic.cz/email/posli.php" method="post"> <input name="email" size="25" value="Váš@mail"><br> <input name="predmet" size="25" value="Předmět"><br> <input name="spam" size="25"> <strong><- napište číslicí "dva"</strong><br> <textarea name="zprava" rows="6" cols="55">Zpráva...</textarea><br> <input type="submit" value="Odeslat"> </form> </body> </html> posli.php <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <title>Odesílání emailu</title> </head> <body> <link rel="StyleSheet" href="style2.css" type="text/css" > <? $predmet = $_POST['predmet']; $email = $_POST['email']; $spam = $_POST['spam']; $zprava = $_POST['zprava']; print ("<p>$predmet</p>"); print ("<p>$email</p>"); if ($predmet!="" and $email!="" and $zprava!="" and $spam=="2") { Mail("mskarka@gmail.com", $predmet, $zprava, "From: " . $email); echo "<p><strong>Váš e-mail byl úspěšně odeslán</strong>.</p>"; } else { echo "<p>Váš e-mail se <strong>nepodařilo odeslat</strong> pravděpodobně jste nevyplnili všechny údaje, nebo nevíte jak se číslicí píše dva.</p>"; } ?> </body> </html> |
||
Lupa Profil |
#2 · Zasláno: 10. 3. 2011, 21:49:36
Tento kód nie je ošetrený.
Ja by som tam vložil: if(isset($_POST['email']){ //skript na odoslanie emailu. }else{ echo "chyba"; } Pozrel som to nevypíše žiadnu chybu. Ale v riadku #19 AND nahraď slovom OR |
||
puzzle Profil |
#3 · Zasláno: 10. 3. 2011, 21:56:21 · Upravil/a: puzzle
Určitě tam nedávej do posli.php tuto hlavicku
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <title>Odesílání emailu</title> </head> <body> <link rel="StyleSheet" href="style2.css" type="text/css" > |
||
petr 6 Profil |
#4 · Zasláno: 10. 3. 2011, 22:01:23
Lupa:
„Ale v riadku #19 AND nahraď slovom OR“ Jsi si jistý? Proč by to měl dělat? Mat: Co znamená, že „se e-mail občas pošle a občas ne“? Podle kódu se e-mail nepošle, pokud je nevyplněno jedno z polí predmet, email nebo zprava nebo není v poli spam zadáno číslo 2. To je to, co myslíte tím, že se občas mail nepošle, nebo se stane, že se mail nepošle i v případech, že jsou všechna pole vyplněna správně? Navíc by samozřejmě bylo záhodno doplnit skript na posílání mailů o pár dalších věcí... ale na to se teď neptáte. |
||
Lupa Profil |
#5 · Zasláno: 10. 3. 2011, 22:08:27
petr 6:
> „Ale v riadku #19 AND nahraď slovom OR“ > Jsi si jistý? Proč by to měl dělat? Nie som si istý, ale mal by nie? Mne sa zdá tak... |
||
Lupa Profil |
#6 · Zasláno: 10. 3. 2011, 22:11:40
v style2.css zmeň
color:white; |
||
puzzle Profil |
#7 · Zasláno: 10. 3. 2011, 22:12:08 · Upravil/a: puzzle
Nevím jak je to s AND a OR, ale když tam dá || bude to fungovat správně - oveřené
Edit: Omlouvám se tak v tomto případě je opravdu potřeba dát AND, pokud jsou všechny pravdivé vypíše se odeslání emailu, pokud by dal vypsání chyby před to úspěšné odeslání mailu bylo by tam OR, pokud je jedna pravdivá vypíše chybu.. Dalo by se to zaměnit, ale musel by přehodt negace.. Edit2: Nedalo by se to změnit musí tam být AND - sem se do toho zamotal :D |
||
Mat Profil * |
#8 · Zasláno: 10. 3. 2011, 22:23:15
No email se občas neodešle právě i když jsou všechna pole vyplněna.
Jestli je skript nutno doplnit o pár dalších věcí netuším, jelikož mi i tohle trvalo napsat celé věky. Udělám výše zmíněné rady a dám vědět. |
||
Mat Profil * |
#9 · Zasláno: 10. 3. 2011, 22:53:53
Posli.php vypadá nyní takto a stejně mi mail nepřišel.
<? $predmet = $_POST['predmet']; $email = $_POST['email']; $spam = $_POST['spam']; $zprava = $_POST['zprava']; print ("<p>$predmet</p>"); print ("<p>$email</p>"); if ($predmet!="" AND $email!="" AND $zprava!="" AND $spam=="2") { Mail("mskarka@gmail.com", $predmet, $zprava, "From: " . $email); echo "<p><strong>Váš e-mail byl úspěšně odeslán</strong>.</p>"; } else { echo "<p>Váš e-mail se <strong>nepodařilo odeslat</strong> pravděpodobně jste nevyplnili všechny údaje, nebo nevíte jak se číslicí píše dva.</p>"; } ?> |
||
TomasJ Profil |
#10 · Zasláno: 10. 3. 2011, 23:07:41 · Upravil/a: TomasJ
Mat:
Tak zkus zavolat v souboru posli.php, hned na začátku funkci mail(); na svůj mail jen s prostým textem (bez proměnných). Když to půjde, je někde chyba v proměnné. Když ne, nelze z tvého webu odesílat maily. Podmínku bych maličko zjednodušil (ta ale na chod nemá vliv, protože nyní je dobře): if($predmet && $email && $zprava && $spam=="2") EDIT? Teď mě napadlo, zkus dát "From: test@test.cz" do funkce, jestli to půjde. A i toto se dá u tebe zjednodušit na "From: $email" |
||
Davex Profil |
#11 · Zasláno: 10. 3. 2011, 23:32:36
Mat:
„po vyplnění formuláře se e-mail občas pošle a občas ne, což je velký problém“ Nemůže to být třeba tím, že je skript na IC.cz, kde je omezen počet odeslaných e-mailů na maximálně 10 za hodinu? |
||
Mat Profil * |
#12 · Zasláno: 11. 3. 2011, 09:34:51
Tak asi to teda bude tím ic.cz, jelikož dneska ráno jsem mel 5 přijatých emailu. Sice v nich nebylo to co jsem tam včera psal, ale něco tam bylo. Ted jsem to taky zkusil a email mi přišel hned. Vypadá to teda že bud budu muset najit nejaky jiny server kam skript budu moct dat, nebo se budu muset spokojit s tímhle. Škoda. Děkuji za pomoc
|
||
puzzle Profil |
#13 · Zasláno: 11. 3. 2011, 17:08:50 · Upravil/a: puzzle
Davex:
„Nemůže to být třeba tím, že je skript na IC.cz, kde je omezen počet odeslaných e-mailů na maximálně 10 za hodinu?“ Ne jede to tam zprávně Spíš bych to určitě upravil přidáním ještě jedné věci a to: <?php// neni to chyba, ale je to bezpečnější if(isset($_POST['zprava']{ //je jedno co tam dáš, ale netestuj určitě tlačítko to blbne $predmet = $_POST['predmet']; $email = $_POST['email']; $spam = $_POST['spam']; $zprava = $_POST['zprava']; print ("<p>$predmet</p>"); print ("<p>$email</p>"); if ($predmet!="" AND $email!="" AND $zprava!="" AND $spam=="2") { Mail("mskarka@gmail.com", $predmet, $zprava, "From: " . $email); echo "<p><strong>Váš e-mail byl úspěšně odeslán</strong>.</p>"; } else { echo "<p>Váš e-mail se <strong>nepodařilo odeslat</strong> pravděpodobně jste nevyplnili všechny údaje, nebo nevíte jak se číslicí píše dva.</p>"; }} ?> |
||
TomasJ Profil |
#14 · Zasláno: 11. 3. 2011, 17:35:12 · Upravil/a: TomasJ
puzzle:
„Ne jede to tam zprávně“ 1. Kdyžtak se píše správně. 2. Jestli sis nevšiml, ve [#12] Mat píše: „Ted jsem to taky zkusil a email mi přišel hned.“ „neni to chyba, ale je to bezpečnější“ Není to chyba a není to povinné. Podle mě to na bezpečnost nemá vliv. Problém může být tak akorát, že existuje ještě <?xml ... Ke kódu: Proč by měl 2x kontrolovat obsah proměnné $zprava? Poprvé if(isset($_POST['zprava']) a podruhé if(...!="" AND $zprava!="" ...). Mimochodem, když už chceš kontrolovat napřed jestli má $zprava nějaký obsah, stačí jen if($_POST['zprava']) bez použití isset(). - Pouze v tomto případě. (opraveno) „je jedno co tam dáš, ale netestuj určitě tlačítko to blbne“ Jak jsi to myslel? Já používám toto: <form method="post"> <!-- ... --> <input type="submit" name="action" value="Odeslat"> </form> <?php if($_POST['action']=="Odeslat") { /* ... */ } ?> A nic neblbne. |
||
puzzle Profil |
#15 · Zasláno: 11. 3. 2011, 18:27:39 · Upravil/a: puzzle
if(isset.... Když jsem testoval tlačítko tak mě to blblo a bylo my zde porazeno, že nemám testovat tlačítko, ale text-input (ono to fungovalo i s tlačítkem, ale bez funkcí htmlspecialchars strip_tags |
||
TomasJ Profil |
#16 · Zasláno: 11. 3. 2011, 18:44:00 · Upravil/a: TomasJ
puzzle:
„netestuješ obsah, ale jestli existuje a je úplně jedno co tam je“ Ovšem, že testuješ zdali existuje. if(isset($promenna)) Řeknu ti to asi takto: U emailových formulářů (a ne jen těch) a u všeho, kde jsem používal podmínky zdali něco existuje, jsem nikdy nepotřeboval isset() a vždy mi to fungovalo jak jsem potřeboval. |
||
petr 6 Profil |
#17 · Zasláno: 11. 3. 2011, 18:52:28
TomasJ:
„if(isset($promenna)) je stejné jako if($promenna)“ Na to jsi prosímtě přišel kde? Schválně si zkus následující kód $promenna=0; if(isset($promenna)){echo "true";}else{echo "false";} if($promenna){echo "true";}else{echo "false";} |
||
puzzle Profil |
#18 · Zasláno: 11. 3. 2011, 19:12:24
TomasJ:
No to teda ne.. Když je isset tak je úplně jedno jestli je prázdná nebo ne, testuješ jestli je. |
||
TomasJ Profil |
#19 · Zasláno: 11. 3. 2011, 19:19:12 · Upravil/a: TomasJ
petr 6, puzzle:
Dobrá, isset(); je něco jiného než jsem myslel. Máte pravdu. Ale na co vám bude prázdná proměnná, když ji potřebujete odeslat? 0 je sice taky hodnota, ale v tomto vlákně s odesíláním emailů, je takováhle kontrola k ničemu. |
||
puzzle Profil |
#20 · Zasláno: 11. 3. 2011, 19:40:20
TomasJ:
Pokud v tom scriptu nebudeš mí to isset, nebo taky je možné to udělat tím tvojím způsobem if($_POST['action']=="Odeslat") Tak by ti to mělo okamžitě, i bez zmáčknutí tlačítka odeslat, vyhodit chybovou hlášku, kterou zadáš jako chybu při odesílání emailu. |
||
TomasJ Profil |
#21 · Zasláno: 11. 3. 2011, 23:16:17 · Upravil/a: TomasJ
puzzle:
„Tak by ti to mělo okamžitě, i bez zmáčknutí tlačítka odeslat, vyhodit chybovou hlášku, kterou zadáš jako chybu při odesílání emailu.“ Nevyhodí, protože bez zmáčknutí tlačítka se $_POST['action'] nerovná hodnotě "Odeslat". |
||
petr 6 Profil |
#22 · Zasláno: 11. 3. 2011, 23:50:22
puzzle:
TomasJ má zřejmě vypnuté vypisování notice, proto mu to nic nevyhodí. Jinak by mu to vyhodilo hlášku o tom, že proměnná $_POST['action'] není definována. „Ale na co vám bude prázdná proměnná, když ji potřebujete odeslat?“ Podle této otázky jsi zjevně nepochopil podstatu problému. Prázdnou proměnnou nebude odesílat díky if($promenna), ale toto má smysl testovat jen u definovaných proměnných, které splní podnmínku if(isset($promenna)). |
||
Tori Profil |
#23 · Zasláno: 12. 3. 2011, 00:03:33
Mat:
Co vám vrací funkce mail()? Když zkusíte třeba 20x po sobě odeslat e-mail, bude u všech vracet true? A dojdou všechny? (=jestli se e-mail sice odešle, ale nedojde, anebo jestli se vůbec neodešle). |
||
TomasJ Profil |
#24 · Zasláno: 12. 3. 2011, 01:16:54 · Upravil/a: TomasJ
petr 6:
puzzle psal „Tak by ti to mělo okamžitě, i bez zmáčknutí tlačítka odeslat, vyhodit chybovou hlášku, kterou zadáš jako chybu při odesílání emailu.“ a pak se koukni na co jsem odpovídal já. Prostě jsem nikdy isset() nevyužil a vždy vše fungovalo jak mělo. Tori: Spíš si myslím, že to bude tím hostingem (10 mailů za hodinu), protože jsem nedávno od nich četl, že si někteří hrají s funkcí mail() a spamují některým uživatelům schránky. |
||
puzzle Profil |
#25 · Zasláno: 12. 3. 2011, 10:03:49
TomasJ:
Tak jsem si to vyzkoušel, během 5 minut mě došlo 17 mailů bez problému... |
||
Časová prodleva: 2 měsíce
|
|||
vojtos Profil * |
#26 · Zasláno: 2. 5. 2011, 14:10:25
Očividně nemáš zadané hlavičky nemáš náhodou ty emaily ve spamu ??? Protože tohle gmail dělá....
|
||
Časová prodleva: 13 let
|
0