Autor Zpráva
Mat
Profil *
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
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
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
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
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
v style2.css zmeň
color:white;
na inú farbu, prosím.
puzzle
Profil
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 *
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 *
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
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
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 *
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
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
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
if(isset.... 
netestuješ obsah, ale jestli existuje a je úplně jedno co tam je

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
a
strip_tags
TomasJ
Profil
puzzle:
netestuješ obsah, ale jestli existuje a je úplně jedno co tam je
Ovšem, že testuješ zdali existuje. if(isset($promenna)) je stejné není stejné jako if($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
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
TomasJ:

No to teda ne..
Když je isset tak je úplně jedno jestli je prázdná nebo ne, testuješ jestli je.
TomasJ
Profil
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
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
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
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
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
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
TomasJ:
Tak jsem si to vyzkoušel, během 5 minut mě došlo 17 mailů bez problému...
vojtos
Profil *
Očividně nemáš zadané hlavičky nemáš náhodou ty emaily ve spamu ??? Protože tohle gmail dělá....

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0