
Problém s rozesíláním E-mailu na více adres najednou
Dobrý den mám menší problém se scriptem přes který by se měly hromadně odesílat e-maily na adresy které jsou zapsány v databázi...
každý kdo má zájem mlže tam svou adresu zapsat...
$dbhost="***********";
$dbusr="********";
$dbpassw="********";
$dbname="*********";
@$link=mysql_pconnect($dbhost,$dbusr,$dbpassw) or die("<p class='nadpis'>Server nepřipojen !!!</p>");
@$db=mysql_select_db($dbname,$link) or die("<p class='nadpis'>Databáze nebyla nalezena !!!</p>");
$dotaz = "SELECT * FROM novinky";
$result=mysql_query($dotaz,$link);
$pocet=mysql_num_rows($result);
echo "<p class='nadpis'>Databáze obsahuje celkem: $pocet záznamů.</p>";
while($polozka=mysql_fetch_array($result)) echo "<p>$polozka[mail]</p>";
//zadání vstupních hodnot
$predmet=$HTTP_POST_VARS[predmet];
$zprava=$HTTP_POST_VARS[novinka];
$address="$dotaz";
$subject="Novinky z Smycmaweb";
$message = "
<style type='text/css'>
.text {
text-align: left;
Color: #000066;
font-family: verdana, sans-serif;
font-size: 12px;
font-weight: bold;
text-decoration: none;
}
.text_c {
text-align: left;
Color: #BC0000;
font-family: verdana, sans-serif;
font-size: 12px;
font-weight: bold;
text-decoration: none;
}
</style>
<p class='text'>Novinky z Smycmaweb</p>
<table>
<tr>
<td width='120'><p class='text'>Co nového:</p></td>
<td><p class='text_c'>$predmet</p></td>
</tr>
<tr>
<td width='120'><p class='text'>Zpráva:</p></td>
<td><p class='text_c'>$novinka</p></td>
</tr>
</table>";
$headers="MIME-Version: 1.0\n";
$headers.="Content-type: text/html; charset=windows-1250\n";
$headers.="From: Smycmaweb\n";
mail($address,$subject,$message,$headers);
echo "<p class='nadpis'>Novinky rozeslány</p>";
Toto je script na kterém to vázne mezi deklarovanými proměnnými je také položka address do které když napíšu pevnou adresu tak všechno šlape jak má ale potřeboval bych tam nějak dostat nějakou proměnou která by brala všechny záznamy ve sloupci tabulky s adresami v databázi...
prosté
$promenna = SELECT * FROM novinky;........ nestaci a nefunguje
prosím o pomoc
ale i tak tam nějaká chybka možná bude
To jsi ho moc nepotěšil.
ad odpoved
$promena=select * from
rozhodne napsat nelze, musis to projit nejakym zpusobem v cyklu a pro kazdy radek databaze provest nejakou akci, kde provest nejakou akci znamena
a) vytvorit z toho jednu promenou, pr jmeno=jmeno.";".dalsiRadekVyseldkuSelectu
b) poslat email v cyklu ve kterem proczazis radky.
dale select * from = nejspise hodi vice nez jeden sloupec a proto se musis odkazovat na nej, bud poradovym cislem, jmenem ci vyslectovat jen ten sloupec. Pokud je to jednosloupcova tabulka, tak je to ok, i kdyz je lepsi sloupce vyjmenovavat.
---
dale nespis NIKDY dovolit aby nikdo odesilal, dotazoval se do databaze ci jakkoliv pracoval s tvym kodem, a tedy pred pridelenim promne ji musis "escapova" tudis pridat znaky, ktere odstrani specialni znaky, ktere by mohl uzivatel zadat. Kdyz to neudelas program funguje dobre, dokud tam chodi Kubik, Vašek, Marta, Pornohvězda12Mlask... než přijde někdo s nickem "'or 1=1; Drop table user;" - to je jen priklad a nefunkcni a nerelevantni k Tve WWW, kazdopadne musis tam dat nejakou escape sekvenci (tzn odstraneni specialnich znaku) - driv nebo pozdeji ti nekdo rozhazi stranku az nacpe <,>.. < to nejakeho policka a email rozhazi.
ad druha poznamka, viz v tom scritu fce "htmlspecialchars"
Já mu to chtěl vysvětlit, ale než jsem to odeslal, tak jsi byl první. Bylo to skoro stejné jako to tvoje.
Ještě místo htmlspecialchars lze použít při práci s mysql funkci mysql_real_escape_string()
<p>$polozka[mail]</p> by mělo být v uvozovkách i to ostatní == <p>$polozka["mail"]</p>
Ta druha je na dotazy msql, pokud se nepletu a jinak jsou měněny znaky (apostrofy apod) o proti html (porovánávatka), pokud se nepletu. PHP jde mimo mne.
pokud vím, tak jestli zadáš
$neco[ahoj] tak ahoj musí být definováno
(např. define("ahoj","nazdar"); )
bohužel nereaguje
a když dám rozeslat tak mi to napíš že bylo rozesláno ale u to je taky nasáno
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /3w/wz.cz/s/smycmaweb/novinky/odesilani.php on line 30
a
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /3w/wz.cz/s/smycmaweb/novinky/odesilani.php on line 32
už vážně nevím... opravovat chyby ve scriptu ani moc nepotřebuji... je plně funkční akorát nemám potuchy jakým způosbem dostat obash toho sloupce v databázi do adresy pro odeslání nejspíše cyklem ale while nefunguje
za ty dotazy dej
a na začátek souboru
pak sem hoď chyby
Notice: Undefined index: mail in /3w/wz.cz/s/smycmaweb/novinky/odesilani.php on line 35
Notice: Use of undefined constant predmet - assumed 'predmet' in /3w/wz.cz/s/smycmaweb/novinky/odesilani.php on line 37
Notice: Use of undefined constant novinka - assumed 'novinka' in /3w/wz.cz/s/smycmaweb/novinky/odesilani.php on line 38
Notice: Undefined variable: link in /3w/wz.cz/s/smycmaweb/novinky/odesilani.php on line 29
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /3w/wz.cz/s/smycmaweb/novinky/odesilani.php on line 29
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /3w/wz.cz/s/smycmaweb/novinky/odesilani.php on line 31
No database selected
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /3w/wz.cz/s/smycmaweb/novinky/odesilani.php on line 34
a tohle to píše když použju váš script
zkus
mysql_select_db($dbname,$link);
za
mysql_select_db($dbname);
ale to už tam mám
link = $link není definována
))
a ta je jenom tam. Nahrad to. (pokud to tam fakt není, tak nevím
hmm tak teˇuž vážně nevím
novinka? nechybi to tam? promena je pak jak zpava.
<td><p class='text_c'>$novinka</p></td> -> <td><p class='text_c'>$zparava</p></td>
Jo teď jsem si všiml
$zprava=htmlspecialchars($_REQUEST["novinka"]);
zkusit nahradit za
$novinka=htmlspecialchars($_REQUEST["novinka"]);
hmm taky nic když tam mám ten script svůj tak to nefunguje ale nevypisuje to chyby když tam dám to vaše tak to nefunguje a ještě to píše chyby já už nevím nejste první poradna kde se ptám ale tady jsem se dostal nejdál
No nic, jdu spát, pokud nikdo neporadí, tak to vyzkouším na mém webu a odladím
Ad Tvůj script : jak už Ti tady napsali v předchozích odpovědích, proměnnou $address je nutno plnit cyklem. Příkaz
$address="$dotaz";
je opravdu nesmyslný.
Ad oprava dan55 :
nejdřív je nutno vyřešit chybové hlášení o nedefinovaném linku :
polož
$link=mysql_connect($dbhost,$dbusr,$dbpassw);
Ještě radši oprav :
while($polozka=mysql_fetch_array($dotaz))
na
while($polozka=mysql_fetch_array($dotaz,MYSQL_BOTH ))
nejsem si jist, zda se bez tohoto doplnění $polozka["mail"] naplní.
Skript zkus a napiš další případné potíže.
Ranní dodatek :
Řádek while($polozka=mysql_fetch_array($dotaz))
opravovat nemusíš, bylo by to sice dobře (já to píšu všude) , ale MYSQL_BOTH je defaultní hodnota.
dostal jsem se obět do fáze že to nefunguje ale taky to nehází chybu.... teť bych potřeboval pomoct s tím cyklem v address včera mi jeden radil abych použil for aleto se mi nějak nezdá...
for je na toto absolutně zbytečný
zkoušel jsi ten cyklus while ..... ,
který navrhnul dan55 ?
Ten se zdá opticky v pořádku.
I kdyby tam ještě něco nesedělo, návrh je ve správném duchu.
Pokud to nepůjde, tak to vyzkouším u mě na serveru a pak napíšu, jestli to je chyba scriptu
Tak mi to nedalo, a script jsem vyzkoušel
Struktura DB: email (varchar 100 cp1250) a id (int8,autoIncrement,unique)
Tento kód, a vše OK!