Beste mensen,

Ik krijg iets niet helemaal voor elkaar met een multidimensional array uit de database.

Het script loopt in grote lijnen zo:

1.) Haal in multi-dimensionale array elke klant op die een maand geleden een aankopen heeft gedaan (deze controle wordt dagelijks gedaan doormiddel van wget crontab)
2.) Nu krijg ik bijv dit terug:
$gegevens[0] (naam => pietje, email => [email protected], product => product_naam)
$gegevens[1] (naam => jantje, email => [email protected], product => product_naam2)
3.) Deze mensen moeten allemaal stuk voor stuk gemaild worden voor een enquĂȘte aanvraag. Naar 1 persoon lukt wel, door gewoon $gegevens[0][email] etc. aan te roepen, echter lukt het me niet deze script in een loop uit te voeren, dus:

VOOR ELKE $gegevens[] ARRAY
> HAAL naam, email, product UIT ARRAY
> VOER MAIL SRIPT (include) UIT MET "DEZE" ARRAY's WAARDEN
> VOLGENDE ARRAY... LOOP

Heb alles al klaar, moet alleen voor mekaar zien te krijgen dat de mail meerdere malen kan worden uitgevoerd. Alleen maar de 'email' waarde met 1 mail script is geen optie lijkt me, het moeten gepersonaliseerde mails worden waar mensen worden aangeroepen met naam en het gekochte product.

Ik ben heel erg while loops gewend en los het vaak ook daar me op, maar wil ook wat meer gaan testen met for() en foreach().

Kan iemand me helpen? :(

Bvd

Gr. Erwin

edit:

Ik had het al geprobeerd met zo'n sort methode op te lossen:


$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach ($a as $v1) {
    foreach ($v1 as $v2) {
        echo "$v2\n";
        // INCLUDE MAIL SCRIPT
    }
}


Echter komt er dan een grote lus met spul uit. Ik neem aan dat dit wel de insteek is?
Heb je dit al geprobeerd?


<?php
foreach( $gegevens as $v )
{
print_r($v);
}
?>

De nieuwste PHPmailer heeft volgens mij iets (nieuws) om email aan meerdere personen te sturen. Dus 1 mailtje meerdere e-mail adressen.
@Martijn: Kun met die meerdere personen mail ook verschillende data invoeren dan? Dat kan wel, dat snap ik, maar is dat handiger dan voorafgaand alles opsplitsen en mensen apart te mailen? Sowieso mogen ze elkaar's adres natuurlijk niet zien.

Dit is de print_r output bij een test multi-dim-array:

Array ( [one] => 1 [two] => 2 [three] => 3 [seventeen] => 17 )
Array ( [one1] => 1 [two1] => 2 [three1] => 3 [seventeen1] => 18 )

Maar hoe ga ik die arrays per stuk vastpakken en met een mail versturen? De mailscript is al wel klaar, weet alleen niet hoe ik die arrays afzonderlijk kan krijgen en dan bij elke afzonderlijke array een mail sturen.
Uit jouw voorbeeld.
<?php
foreach($gegevens as $array)
{
echo $array['naam'];
echo $array['email'];
echo $array['product'];
}
?>
Die snap ik :-), maar nu krijg ik een waslijst met waarden. Hoe kan ik per klant die 3 waarden vastpakken en elke keer aan mijn mailscript geven?
SanThe geeft een voorbeeldje waarbij die waarden toevallig op het scherm gezet worden. Maar wat houd jou tegen om die variabelen in jouw mail script te gebruiken?
Dat kan ik wel als ik weet hoeveel keer die $gegevens array uit mijn database komt. Dan kan ik die 3 waarden weer in een nieuwe array zetten die zichzelf groter telt, maar....

Nu kan ik dat doen door mijn database output met num_rows te tellen, maar ik vind dat wat slordig.

Ik zoek een manier om elke keer die 3 waarden in een nieuwe array te krijgen (dat kan ik zelf wel :-) ) en daarna bij elke keer dat er een nieuwe is de mailscript uitvoeren.

Sorry als ik niet helemaal duidelijk ben..
Hoezo zou je die 3 variabelen weer opnieuw in een array willen zetten? Je kunt ze toch direct in je mailscript gebruiken?
<?php
foreach($gegevens as $array)
{
mail($array['email'], ..., ...);
}
?>
Ag ja, sorry, zondag...

Ik dacht weer te moeilijk :/. De code:


<?php
if (mysql_num_rows($cron_query) >= 1) {
	$gegevens = result_to_array($cron_query);
	
	foreach ($gegevens as $array) {
		$naam = $array['naam'];
		$email = $array['email'];
		$gekocht_product = $array['gekocht_product'];
		$klant_id = $array['id'];
		
		require('library/contact_script.php');
	}
}
elseif (!$cron_query) {
	//echo 'Er ging iets fout bij het verwerken van de voorbereiding van de mailing op de server.';
}
else {
	//echo 'Er zijn geen klanten die een maand geleden op deze dag een product hebben aangeschaft.';
}
?>


De test mails stromen binnen :-P

Reageren