Ik ben al geruime tijd op zoek naar een fout in het script, en ik vind het eerlijk gezegd niet. Het probleem is dat de server geen mails verstuurd. Ikzelf vind de fout niet.
Kan toevallig iemand op het forum mij hier helpen ?
Dit is het script, vanaf ik op de OK knop druk om een nieuwsbrief te verzenden :
Code:$id = $_POST['id']; $activationcode = MD5('account_activated'); for ($i = 0; $i < 4; $i++) { $email = ''; $query = mysql_query("SELECT * FROM klanten WHERE nieuwsbrief='Ja' AND lang='" . $talen[$i] . "' AND activationcode='" . $activationcode . "'") or die (mysql_error()); while ($row = mysql_fetch_array($query)) { $email .= $row['email'] . '; '; } $email = substr($email, 0, (strlen($email) - 2)); $query = mysql_query("SELECT * FROM nieuwsbrief WHERE id='" . ($id + $i) . "'") or die (mysql_error()); while ($row = mysql_fetch_array($query)) { $nb_titel = bbcode($row['onderwerp'], '#446893'); $nb_inhoud = bbcode($row['inhoud'], '#446893'); $jaar = $row['jaar']; $maand = $row['maand']; if (strlen($maand) == 1) $maand = '0' . $maand; } $query = mysql_query("SELECT DISTINCT COUNT(*) aantal,muziekgenres.muziekgenre,muziekgenres.id FROM producten,muziekgenres WHERE producten.datum LIKE '" . $jaar . "-" . $maand . "-%' AND producten.muziekgenre=muziekgenres.id GROUP BY producten.muziekgenre ORDER BY muziekgenres.muziekgenre ASC") or die (mysql_error()); while ($row = mysql_fetch_array($query)) { $muziekgenres .= '<a><img> ' . $row['muziekgenre'] . ' (' . $row['aantal'] . ')</a><br>'; $producten .= '<a>' . $row['muziekgenre'] . '</a>'; $producten .= '<table><tr>'; $producten .= '<td>'; $producten .= $lang['artiest_' . $talen[$i]] . ' - ' . $lang['titel_' . $talen[$i]]; $producten .= '</td><td>'; $producten .= $lang['verkoper_' . $talen[$i]]; $producten .= '</td><td>'; $producten .= $lang['prijs_' . $talen[$i]]; $producten .= '</td></tr>'; $query2 = mysql_query("SELECT producten.id,producten.artiest,producten.titel,producten.prijs,klanten.nickname FROM producten,klanten WHERE producten.datum LIKE '" . $jaar . "-" . $maand . "-%' AND producten.muziekgenre='" . $row['id'] . "' AND producten.klantid=klanten.id ORDER BY producten.artiest ASC") or die (mysql_error()); while ($row2 = mysql_fetch_array($query2)) { $producten .= '<tr><td>'; $producten .= '<a>' . $row2['artiest'] . ' - ' . $row2['titel'] . '</a>'; $producten .= '</td><td>'; $producten .= '<a>' . $row2['nickname'] . '</a>'; $producten .= '</td><td>'; $producten .= '€' . money($row2['prijs']); $producten .= '</td></tr>'; } $producten .= '</table>'; $producten .= '<p><a>^ Top ^</a></p><br>'; } $mg_top .= '<table><tr>'; $mg_top .= '<td>'; $mg_top .= ' ' . $nb_titel; $mg_top .= '</td></tr><tr><td>'; $mg_top .= '<table><tr><td>'; $mg_bottom .= '</td></tr></table></td></tr></table>'; $nb_inhoud = str_replace('[_REPLACE_WITH_MG_TOP_]', $mg_top, $nb_inhoud); $nb_inhoud = str_replace('[_REPLACE_WITH_MG_BOTTOM_]', $mg_bottom, $nb_inhoud); $nb_inhoud = str_replace('[_REPLACE_WITH_MUZIEKGENRES_]', $muziekgenres, $nb_inhoud); $nb_inhoud = str_replace('[_REPLACE_WITH_PRODUCTEN_]', $producten, $nb_inhoud); $mail_inhoud = file_get_contents('./nieuwsbrief.html'); $mail_inhoud = str_replace('[_REPLACE_WITH_INHOUD_]', $nb_inhoud, $mail_inhoud); if (!empty($email)) { mail($email,$nb_titel,$mail_inhoud,get_mail_header()); } } echo '<script>alert(\'Newsletter send.\');document.location.href="/admin.php?action=nieuwsbrief";</script>';
- [PHP] Nieuwsbrieven script
-
20-09-2006, 07:10 #1
- Berichten
- 382
- Lid sinds
- 18 Jaar
[PHP] Nieuwsbrieven script
-
In de schijnwerper
webshop in laadkabels/laadpalen (sinds 2019) incl leveranciersWebsite te koopBTW calculator - WP plugin - V1.0PHP scriptsSenior Designster - top kwaliteit - 16 uur per week - per maand - 350 euroFreelance / WerkProduct feed grid V1.7 - Creer een affiliate shop in 2 min - WP plugin - V1.7 NU LIVEPHP scripts -
20-09-2006, 08:47 #2
- Berichten
- 240
- Lid sinds
- 19 Jaar
Kan het zijn dat je geen juiste headers hebt ?
mail($email,$nb_titel,$mail_inhoud,get_mail_header ());mail($email,$nb_titel,$mail_inhoud,$mail_headers);
Moet je die wel eerst maken;
$mail_headers = "From: Je site naam nieuwsbrief\n";
$mail_headers .= "Content-Type: text/html; charset=iso-8859-1\n";
$mail_headers .= "MIME-Version: 1.0\n";Laatst aangepast door Frank Broersen : 20-09-2006 om 08:50
-
20-09-2006, 15:50 #3
- Berichten
- 72
- Lid sinds
- 18 Jaar
for ($i = 0; $i < 4; $i++) {
$email = ''; <--- bij de volgende loop gooit ie deze array weer leeg
beter deze variable voor de loop declareren.
$query = mysql_query("SELECT * FROM klanten WHERE nieuwsbrief='Ja' AND lang='" . $talen[$i] . "' AND activationcode='" . $activationcode . "'") or die (mysql_error());
while ($row = mysql_fetch_array($query)) {
$email .= $row['email'] . '; ';
}
$email = substr($email, 0, (strlen($email) - 2));
$query = mysql_query("SELECT * FROM nieuwsbrief WHERE id='" . ($id + $i) . "'") or die (mysql_error());
while ($row = mysql_fetch_array($query)) {
$nb_titel = bbcode($row['onderwerp'], '#446893');
$nb_inhoud = bbcode($row['inhoud'], '#446893');
$jaar = $row['jaar'];
$maand = $row['maand'];
if (strlen($maand) == 1) $maand = '0' . $maand;
}
waarom niet SELECT email FROM klanten
en heel die loop weghalen(for ($i = 0; $i < 4; $i++) { )
if (!empty($email)) {
mail($email,$nb_titel,$mail_inhoud,get_mail_header());
}
hier is $email een array en niet een variable.Laatst aangepast door Mohammed Aitikne : 20-09-2006 om 15:54
-
21-09-2006, 11:06 #4
- Berichten
- 382
- Lid sinds
- 18 Jaar
@frank
die functie zorgt ervoor dat ik 1x de mail header moet typen & het 1000de x kan gebruiken & als er iets wordt aangepast, dat ik het niet telkens pagina per pagina moet aanpassen.
@Mohamed
die functie zit zo in elkaar:
hij begint te loopen door de 4 talen, per taal zet hij dan alle e-mail adressen in 1 e-mail adres string.
die select email maakt niks uit, * staat voor alle velden ophalen, dit is 1 karakter t.o.v. email dat zijn 5 karakters, dus dat is wel een verschil qua grootte van het bestand, en kan het bestand sneller geladen worden & verbruikt dus minder upload van de server.
-
21-09-2006, 11:12 #5
- Berichten
- 1.669
- Lid sinds
- 19 Jaar
die select email maakt niks uit, * staat voor alle velden ophalen, dit is 1 karakter t.o.v. email dat zijn 5 karakters, dus dat is wel een verschil qua grootte van het bestand, en kan het bestand sneller geladen worden & verbruikt dus minder upload van de server.
-
21-09-2006, 12:54 #6
- Berichten
- 382
- Lid sinds
- 18 Jaar
het is niet omdat je select email from klanten doet, dat de veriabele $email gelijk is aan het e-mail, je maakt inderdaad een grote array vna alle velden (array = $row), dit vraagt enkel geheugen van de server, hij haalt het veld email er uit met $row['email'] en komt dan aan het einde van zijn while loop en dropt de array $row dus het geheugen is dan weer vrij.
of zie ik dit verkeerd ?
-
21-09-2006, 13:03 #7
- Berichten
- 72
- Lid sinds
- 18 Jaar
hij begint te loopen door de 4 talen, per taal zet hij dan alle e-mail adressen in 1 e-mail adres string.
$query = mysql_query("SELECT * FROM klanten WHERE nieuwsbrief='Ja' AND lang='" . $talen[$i] . "' AND activationcode='" . $activationcode . "'") or die (mysql_error());
$query = mysql_query("SELECT * FROM klanten WHERE nieuwsbrief='Ja' AND activationcode='" . $activationcode . "'") or die (mysql_error());(email is hier volgens mij beter als * maargoed)
Is die hele loop gelijk niet meer nodig.
//for ($i = 0; $i < 4; $i++) {
$email = '';
$query = mysql_query("SELECT * FROM klanten WHERE nieuwsbrief='Ja' AND activationcode='" . $activationcode . "'") or die (mysql_error());
while ($row = mysql_fetch_array($query)) {
$email .= $row['email'] . '; ';
}
$email = substr($email, 0, (strlen($email) - 2));
$query = mysql_query("SELECT * FROM nieuwsbrief WHERE id='" . ($id + $i) . "'") or die (mysql_error());
while ($row = mysql_fetch_array($query)) {
$nb_titel = bbcode($row['onderwerp'], '#446893');
$nb_inhoud = bbcode($row['inhoud'], '#446893');
$jaar = $row['jaar'];
$maand = $row['maand'];
if (strlen($maand) == 1) $maand = '0' . $maand;
//}Laatst aangepast door Mohammed Aitikne : 21-09-2006 om 13:39
-
21-09-2006, 17:05 #8
- Berichten
- 382
- Lid sinds
- 18 Jaar
Ik ben daar niet echt mee akkoord
als je de loop weghaalt, en de emails laat rollen en telkens er maar bij propt, krijgt een engels man de NL + EN nieuwsbrief... en de spanjaard krijgt dan NL + EN + FR + ES nieuwsbrief, die loop dient er voor om de spanjaard enkel de spaanse nieuwsbrief versie te laten krijgen, en die engelsmannen enkel zijn engels, de franse enkel franse, en nl'ers en be'ers de nederlanse natuurlijk.
want een .= in de PHP betekent "voeg toe aan de bestaande waarde"
en wat je daar zegt van * beter email, klopt idd, maar in sommige gevallen moet je zoveel velden hebben dat je ze bijna allemaal nodig hebt bv op 1 of 2 velden na... en dan denk ik dat het beter is * te gebruiken dan elk veld appart er zo bij te roepen, denk je ook niet?
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic