PHP + MySQL mail loop

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Didel
  • Registratie: Mei 2010
  • Laatst online: 17-09 21:45
Hallo,

Ik heb een op het eerste gezicht vrij simpele vraag... Ik heb een kleine database met ongeveer 100 rows er in. Elke row bevat een id, voornaam, achternaam, adres, email en bedrag kolom. De meeste spreken voor zich lijkt mij. Het laatste veld, bedrag, geeft aan hoeveel elk lid moet betalen (gaat om factuur). Hier zijn 2 mogelijkheden, 100 of 150 euro.

Het mailtje dat moet worden doorgestuurd, de factuur dus, moet voor iedereen op naam zijn, met voor hem/haar het juiste bedrag vermeld. Maar dit is allemaal niet het probleem, het genereren van een e-mail levert geen problemen op. De laatste stap, het versturen van de html-email in php is ook geen enkel probleem en gaat goed. Maar het doorlopen van de database en zorgen dat elke user maar 1 keer zijn/haar eigen mail krijgt lukt niet. Huidige situatie: de eerste user (ik) krijg dezelfde factuur (op dezelfde naam voor iedereen), maar dan x het aantal gebruikers in de tabel: m.a.w.: Bij 5 users in de db krijg ik 5 keer mijn eigen factuur, en de rest niets.

De server is een eigen servertje met windows server 2008, draait WAMPServer en php/mysql werkt verder prima.

Acties:
  • 0 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Zo te lezen vergeet je ergens in de loop een nieuwe waarde op te halen, waardoor je constant de values van de eerste row mailt.

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • 8088
  • Registratie: December 2000
  • Niet online

8088

NaN

We zouden kunnen gaan raden, maar als je wat (relevante) code plaatst hoeft dat wellicht niet.

Do you seek to engage in or have you ever engaged in terrorist activities, espionage, sabotage, or genocide?


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Post eens wat relevante (niet alle!) code, want mijn glazen bol staat helaas bij de stomerij. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Didel
  • Registratie: Mei 2010
  • Laatst online: 17-09 21:45
Oeps, inderdaad het allerbelangrijkste vergeten :P

Hierbij de code die wordt gebruikt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
include 'config.php'; // bestand met inloggegevens voor de db
include 'opendb.php'; // maakt connectie met en opent de db

$result = mysql_query("SELECT * FROM leden") or die(mysql_error());  
$row = mysql_fetch_array( $result );

foreach ($row as $lid) {
// recipients
$to  = $lid['mail'] ;

// subject
$subject = 'Factuur';

// message
$messagehead = '
<HTML> //en natuurlijk de rest van de html code voor de header
';

if ($lid['bedrag'] == 100) {
$messagebody = '
// hier de rest van de HTML voor factuur van 100 euro
';
} elseif ($lid['bedrag'] == 150) {
$messagenody = '
// hier de rest van de HTML voor factuur van 150 euro
';
}

$message = $messagehead . $messagebody; //samenvoegen van de 2 delen van het bericht

// Headers meegeven voor HTML-mail en de afzender
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: afzender@adres.nl' . "\r\n";

// Mailfunctie zelf
mail($to, $subject, $message, $headers);

}

?>

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 14:14

Matis

Rubber Rocket

Code lijkt niets mis mee te zijn.
Doe eens een var_dump van $lid in de loop.

Daarnaast hebben ze ook code tags;
Liever je code in
[code=php]
[/code]
ipv
[cmd]
[/cmd]
Plaatsen voor de leesbaarheid ;)

Al gefixt :P

[ Voor 4% gewijzigd door Matis op 05-05-2011 18:59 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • X_lawl_X
  • Registratie: September 2009
  • Laatst online: 14:50
Moet je hier geen while-loop gebruiken?

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 14:14

Matis

Rubber Rocket

X_lawl_X schreef op donderdag 05 mei 2011 @ 19:01:
Moet je hier geen while-loop gebruiken?
Volgens mij hoeft dat niet; Wel lees ik in een comment op php.net
Remember that using a while() loop for traversing your result array is significantly slower than using a foreach() loop. Read the comments in the control structures section of this site for further details.
Niet zelf ondervonden.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • X_lawl_X
  • Registratie: September 2009
  • Laatst online: 14:50
Volgens mij wordt er nu over 1 enkele row geloopt i.p.v. dat er steeds een nieuwe row wordt uitgelezen.

Acties:
  • 0 Henk 'm!

  • Didel
  • Registratie: Mei 2010
  • Laatst online: 17-09 21:45
@Matis, bedankt voor de opmerking, ik zag m zelf ook net voor je reactie ;)

de var dump geeft de volgende output:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(1) "0" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(1) "0" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(7) "Dimiter" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(7) "Dimiter" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(6) "Geelen" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(6) "Geelen" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(23) "adres + huisnummer" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(23) "adres + huisnummer" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(7) "postcode" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(7) "postcode" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(5) "woonplaats" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(5) "woonplaats" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(17) "email" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(17) "email" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(3) "100" 
Notice: Undefined variable: messagebody in C:\wamp\www\tvtc\mail.php on line 245
string(3) "100"


Kleine notitie: heb al mijn gegevens eventjes vervangen voor adres, postcode, email, etc. De 0 is de ID van lid Dimiter (dat klopt), en de 100 is het bedrag dat ik moet betalen. Ik heb de mail functie gecomment, en ipv. hiervan wordt de vardump uitgevoerd.

Acties:
  • 0 Henk 'm!

  • X_lawl_X
  • Registratie: September 2009
  • Laatst online: 14:50
Vervang

PHP:
1
2
3
$row = mysql_fetch_array( $result );

foreach ($row as $lid) {


eens door

PHP:
1
while ($lid = mysql_fetch_array($result)) {


Als je dit doet gaat er geloopt worden over iedere row in de database in plaats van je array.

[ Voor 22% gewijzigd door X_lawl_X op 05-05-2011 23:10 ]


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 18:31
mysql_fetch_array() moet voor elke rij in de result-set worden gebruikt. Wat je hier doet is een loopje zetten over elke kolom in de rij van een resultset, vandaar die vele 'undefined variables'. :)

Oftewel: wat X_lawl_X hierboven zegt in code. :)

[ Voor 11% gewijzigd door Jaap-Jan op 05-05-2011 19:11 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • lordsnow
  • Registratie: Maart 2000
  • Laatst online: 14:35

lordsnow

I know nothing

lijn 25 - $messagenody = ' ....

Acties:
  • 0 Henk 'm!

  • Didel
  • Registratie: Mei 2010
  • Laatst online: 17-09 21:45
X_lawl_X Bedankt! Moest allen de $row vervangen voor $result, dan dan geeft hij inderdaad een dump van alle inhoud van de tabel. Alleen doet hij alles dubbel? Heb er even een onzin-lid in gemaakt:

code:
1
array(16) { [0]=> string(1) "4" ["ID"]=> string(1) "4" [1]=> string(3) "Kat" ["vnaam"]=> string(3) "Kat" [2]=> string(4) "rijn" ["anaam"]=> string(4) "rijn" [3]=> string(6) "nepweg" ["straat"]=> string(6) "nepweg" [4]=> string(5) "12345" ["pcode"]=> string(5) "12345" [5]=> string(11) "almere-zuid" ["wplaats"]=> string(11) "almere-zuid" [6]=> string(3) "nee" ["mail"]=> string(3) "nee" [7]=> string(3) "150" ["bedrag"]=> string(3) "150" }


Of hoort dat?

En @lordsnow, bedankt, had ik nog niet gezien :)

Acties:
  • 0 Henk 'm!

  • X_lawl_X
  • Registratie: September 2009
  • Laatst online: 14:50
Dat hoort zo. Als je dat niet wilt, moet je mysql_fetch_assoc($result) gebruiken.

Acties:
  • 0 Henk 'm!

  • Cadezo
  • Registratie: Februari 2006
  • Niet online
Als toevoeging op X_lawl_X:
Je kunt ook een parameter meegeven aan mysql_fetch_array, dan wordt het mysql_fetch_array($result, MYSQL_ASSOC). Zie voor een duidelijke uitleg: http://php.net/manual/en/function.mysql-fetch-array.php

Acties:
  • 0 Henk 'm!

  • Didel
  • Registratie: Mei 2010
  • Laatst online: 17-09 21:45
Hartelijk dank allemaal voor jullie snelle reacties :)

Heb zojuist 136 mensen een factuur ge-emailed, en het is allemaal goed gegaan :) Iedereen heeft zijn eigen factuur op naam, met het goede bedrag er op. Ik kan weer met een gerust hart gaan slapen ;) Thnx!
Pagina: 1