Autor Zpráva
MrKolouch
Profil
Ahoj,
nechával jsem si dělat script na hromadný e-mail pro členy mých stránek.Script byl zkotrolování i odborníkem,ale stále nefunguje.Nalezne někdo chybu?

<HTML>
<HEAD>
<TITLE>Poslat emaily</TITLE>
</HEAD>
<BODY>
<CENTER>
<form action="odeslat.php" method="POST">
<BR>
<TABLE>
<TR> <TD COLSPAN=2 ALIGN=CENTER><h1>Poslat hromadnou zprávu:</h1>
<TR><TD>Předmět:<TD><textarea cols="50" rows="1"></textarea>
<TR><TD>Text:<TD><textarea cols="50" rows="20" name="text"></textarea>
<TR><TD COLSPAN=2 ALIGN=CENTER> <BUTTON> Poslat </BUTTON>
</table>
</form>
</CENTER>
</BODY>
</HTML>


a ten script
<?
$bd_host = "localhost";
$bd_usuario = "login";
$bd_password = "heslo";
$bd_base = "název databaze";
$url = "http://www.cometbux.com";
$con = mysql_connect($bd_host, $bd_usuario, $bd_password); mysql_select_db($bd_base, $con);

 $vysledek=mysql_query("select email from tb_users");
 while ($zaznam=MySQL_Fetch_Array($vysledek)):
 
$i = 0;
$vysledek=mysql_query("select email from tb_users");
while ($zaznam=MySQL_Fetch_Array($vysledek)):
 
$prijemce = $zaznam["email"];
Mail($prijemce, $predmet, $text);
$i = $i+1;
endwhile;
 
echo "<CENTER><BR><BR><BR>";
echo "Emaily byly odeslány.";
echo "Bylo odeslano ".$i." mailu";
echo "</CENTER>";
 
?>


k databázi jsme se připojili,ověřeno.php funguje a mysql je také v pořádku.
http://podpora.domenu.cz/?sid=25 připojení je zapsano zpravně.

předem děkuji
yFang
Profil
MrKolouch
Nikde tam nevidím definované proměnné $predmet a $text.
ninja
Profil
MrKolouch: Nactou se z databaze nejaka data? Promene $predmet a $text mate vyplnene?
Alphard
Profil
kromě výše zmíněného, co tohle? není to jen špatně zkopírované? (měnil jste příspěvek)

$vysledek=mysql_query("select email from tb_users");
while ($zaznam=MySQL_Fetch_Array($vysledek)):

$i = 0;
$vysledek=mysql_query("select email from tb_users");
while ($zaznam=MySQL_Fetch_Array($vysledek)):
Warden
Profil
Solidně si cyklíte dvě query za sebou...přitom žádný přínos v tom nevidím. Navíc jeden while není ukončen. Další problém je v proměnných. Proměnné predmet a text nejsou definované. Tak, jak to máte napsané, je navíc nutné mít zapnuté register_globals On, což není nejlepší řešení. Ale ani tak to nemůže fungovat správně, protože u textarey subjectu nemáte atribut name.

Doporučuji zapnutí vypisování php chyb a to E_ALL.
MrKolouch
Profil
díky za rady,chyby jsme opravili
Už to jde i odeslat a vypíše to toto:
Emaily byly odeslány.Bylo odeslano 1845 mailu

jenže žádný maily zatim nedošly.

opraveny kod:
<HTML>
<HEAD>
<TITLE>Poslat emaily</TITLE>
</HEAD>
<BODY>
<CENTER>
<form action="odeslat.php" method="POST">
<BR>
<TABLE>
<TR> <TD COLSPAN=2 ALIGN=CENTER><h1>Poslat hromadnou zprávu:</h1>
<TR><TD>Předmět:<TD><textarea cols="50" rows="1" name="predmet"></textarea>
<TR><TD>Text:<TD><textarea cols="50" rows="20" name="text"></textarea>
<TR><TD COLSPAN=2 ALIGN=CENTER> <BUTTON> Poslat </BUTTON>
</table>
</form>
</CENTER>
</BODY>
</HTML>

a script:
<?
$bd_host = "localhost";
$bd_usuario = "login";
$bd_password = "heslo";
$bd_base = "název databaze";
$url = "http://www.cometbux.com";
$con = mysql_connect($bd_host, $bd_usuario, $bd_password); mysql_select_db($bd_base, $con);

$i = 0;
$vysledek=mysql_query("select email from tb_users");
while ($zaznam=MySQL_Fetch_Array($vysledek)):

$prijemce = $zaznam["email"];
Mail($prijemce, $predmet, $text);
$i = $i+1;
endwhile;

echo "<CENTER><BR><BR><BR>";
echo "Emaily byly odeslány.";
echo "Bylo odeslano ".$i." mailu";
echo "</CENTER>";

?>


je v kodu další chyba?
diky moc
Anonymní
Profil *
To je aká verzia PHP?
while ($zaznam=MySQL_Fetch_Array($vysledek)):


nie náhodou?
while ($zaznam=MySQL_Fetch_Array($vysledek)){ blabla }
Mastodont
Profil
Anonymní
Ehm. To jsou IMHO všechny verze PHP od zavedení while :-)
Ssob
Profil
MrKolouch
Funkce mail() vrací true v případě úspěchu a false v případě neúspěchu.

Zkusil bych:

...
$ret = Mail($prijemce, $predmet, $text);
$i = $i + intval($ret);
...


Pak teprve můžete s klidem vypsat "Bylo odeslano ".$i." mailu";

A btw: pořád tam nikde nevidím definování proměnných $predmet a $text.
Takže před cyklus:
$predmet = $_POST['predmet'];
$text = $_POST['text'];
MrKolouch
Profil
Ssob

když to upravim podle tvé rady:
...
$con = mysql_connect($bd_host, $bd_usuario, $bd_password); mysql_select_db($bd_base, $con);

$i = 0;
$vysledek=mysql_query("select email from tb_users");
while ($zaznam=MySQL_Fetch_Array($vysledek)):

$predmet = $_POST['predmet'];
$text = $_POST['text'];
$prijemce = $zaznam["email"];
$ret = Mail($prijemce, $predmet, $text);
$i = $i + intval($ret);
endwhile;


echo "<CENTER><BR><BR><BR>";
...


tj.připsal jsem
$predmet = $_POST['predmet'];
$text = $_POST['text'];


a zaměnil toto:

Mail($prijemce, $predmet, $text);
$i = $i+1; 


za toto:
$ret = Mail($prijemce, $predmet, $text);
$i = $i + intval($ret); 


tak to napíše,že se odeslalo 0 emailů
Tin
Profil
Aby šly odesílat maily, musí samozřejmě být správně nastavený server SMTP
Ssob
Profil
MrKolouch
tak to napíše,že se odeslalo 0 emailů

Z toho vyplývá, že funkce mail() ani jednou neproběhla správně, čili se nepodařilo poslat ani jeden mail.

Řekl bych, že bude chyba někde v nastavení mailového serveru jak píše Tim.

A ještě poznámka na konec:
<pre>
$predmet = $_POST['predmet'];
$text = $_POST['text'];
</pre>
I když to na funkcionalitu nebude mít žádny vliv, tak by bylo vhodnější posunout tyto dva řádky před while.

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