voor een script waar ik mee bezig ben, zoek ik een oplossing om de resultaten uit een select te updaten, indien deze zijn opgepakt door een functie. in een eerder topic kreeg ik een suggestie om de resultaten in een array te zetten, maar daar kom ik niet uit.

Even een schets van relevante items:
- een select
- een include van een functions bestand
- een if/else om te checken of de select uberhaubt rijen opleverd
- een while
- $row[] omgezet naar variabelen
- functie sendMailToMe aanroepen
- if (!sendMailToMe($naam, $omschrijving, $ingangdatum, $einddatum, $productID) == TRUE) hiermee hoop ik te checken of de functie niet antwoord met TRUE, in dat geval gaat hij naar de else, waar ik de volgende functie aanroep:
- UpdateProductRegel($naam, $omschrijving, $ingangdatum, $einddatum, $productID);
echo 'update is uitgevoerd';

de functie UpdateProductRegel heb ik zo gemaakt en die werkt wel, maar update alle records, ipv alleen de reoords die uit de select komen:
function UpdateProductRegel($naam, $omschrijving, $ingangdatum, $einddatum, $productID) {
//insert script voor records waarbij een mail is verstuurd.
mysql_query("UPDATE producten
SET klant_geinformeerd_op = NOW()");
}

ik zit echt met mijn handen in het haar, want ik heb geen idee hoe ik de UpdateProductRegel functie moet inrichten om ervoor te zorgen dat alleen de records uit de select ge-update worden. Kan iemand me hiermee op weg helpen?
Wouter W op 20/09/2012 14:46:35

... als ik dit script elke dag draai in een cronjob, ...


Okay.

Ger van Steenderen op 20/09/2012 14:50:56

Je verstuurt trouwens 2 maal de email (regel 68 en 72)

Ja, dat is inderdaad niet de bedoeling.

Wat je in zo'n geval hoort te doen*:

<?php
//doe iets met de variabelen
$email_is_verzonden = sendMailToMe($naam, $omschrijving, $ingangdatum, $einddatum, $productID);
//checken of de email functie tot zijn einde is gekomen, dan updaten
if ($email_is_verzonden === TRUE) {
...
?>

Dan voer je de functie niet dubbel uit.
Controleer trouwens nog eens goed of sendMailToMe() wel een TRUE en/of FALSE terug geeft. Anders heeft dit alles helemaal geen zin.


(* er zijn alternatieven die ook goed zijn)
ja, ik kreeg inderdaad de mail 2x binnen :) nu weet ik waarom.

Ik heb geprobeerd om met return de TRUE of FALSE terug te geven in een if/else. Heb ik dat zo goed gedaan? want ik krijg namelijk geen echo te zien van mijn true of false.
<?PHP
if (mail($to, $subject, $message, $headers))
{
return TRUE;
echo 'TRUE';
}
else
{
return FALSE;
echo 'FALSE';
}
?>
Bedoel je functie sendMailToMe ?

(Een functie heeft een return. zomaar een return zetten die niet in een functie-definitie staat ... dat is niet de bedoeling.)

Wel ja ... die twee lijnen met echo worden niet uitgevoerd (lijn 5 en lijn 10). Na een return wordt sowieso de functie verlaten.
Voor de rest zou dat wel werken.

Je zou ook - veel korter - dit kunnen doen.
<?php
function sendMailToMe ($to, $subject, $message, $headers) {
return mail($to, $subject, $message, $headers);
}
?>
De functie mail() geeft een TRUE of FALSE terug, dus je kan die rechtstreeks in de return zetten.

Kris Peeters op 20/09/2012 18:03:16

Bedoel je functie sendMailToMe ?

(Een functie heeft een return. zomaar een return zetten die niet in een functie-definitie staat ... dat is niet de bedoeling.)

Wel ja ... die twee lijnen met echo worden niet uitgevoerd (lijn 5 en lijn 10). Na een return wordt sowieso de functie verlaten.
Voor de rest zou dat wel werken.

Je zou ook - veel korter - dit kunnen doen.
<?php
function sendMailToMe ($to, $subject, $message, $headers) {
return mail($to, $subject, $message, $headers);
}
?>
De functie mail() geeft een TRUE of FALSE terug, dus je kan die rechtstreeks in de return zetten.



ja, die functie bedoelde ik.

bedankt, dit werkt als een tierelier! :) ben ik heel erg blij mee!!
ik heb die functie aangepast!

wat ik me dan nog af vraag, als ik aan het einde van mijn script de rijen wil zien die ge-update zijn, kan ik die dan uit de $products2update array aanroepen? of is er een makkelijkere manier om een soort van rapportje te maken?

Reageren