insert na versturen van email, binnen functie?
iets over het doel, in mijn database staan klanten en producten. ik wil klanten informeren over het bijna verlopen van producten d.m.v. een email. nadat de email verstuurd is, wil ik de databaseregel bijwerken met de datum van versturen.
kunnen jullie me aangeven welke denkwijze ik het beste kan toepassen?
verwerk ik de update regels in mijn functie of moet deze er juist buiten?
Mijn code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?PHP
$result = mysql_query ( "SELECT
COALESCE( klant.klant_bedrijf,
klant.klant_achternaam ) AS naam,
product.prod_omschrijving AS omschrijving,
klant.klant_van AS van,
product.prod_ingang_datum AS ingangdatum,
product.prod_eind_datum AS einddatum
FROM producten AS product
JOIN klanten AS klant ON klant.klant_id = product.prod_klant_id");
include 'functions.php';
while ($row = mysql_fetch_assoc($result)) {
$naam = $row["naam"];
$omschrijving = $row["omschrijving"];
$ingangdatum = $row["ingangdatum"];
$verlooptper = $row["einddatum"];
sendMailToMe($naam, $omschrijving, $ingangdatum, $verlooptper);
?>
$result = mysql_query ( "SELECT
COALESCE( klant.klant_bedrijf,
klant.klant_achternaam ) AS naam,
product.prod_omschrijving AS omschrijving,
klant.klant_van AS van,
product.prod_ingang_datum AS ingangdatum,
product.prod_eind_datum AS einddatum
FROM producten AS product
JOIN klanten AS klant ON klant.klant_id = product.prod_klant_id");
include 'functions.php';
while ($row = mysql_fetch_assoc($result)) {
$naam = $row["naam"];
$omschrijving = $row["omschrijving"];
$ingangdatum = $row["ingangdatum"];
$verlooptper = $row["einddatum"];
sendMailToMe($naam, $omschrijving, $ingangdatum, $verlooptper);
?>
functions.php:
Code (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
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
<?PHP
function sendMailToMe($naam, $omschrijving, $ingangdatum, $verlooptper) {
// Waar gaat de mail heen, en wat is het onderwerp
$to = 'emailadres';
$subject = 'Uw product wordt over 60 dagen verlengd';
// Standaard mail headers
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Benodigd voor HTML email
$headers .= 'To: ' . $naam . "\r\n";
$headers .= 'From: emailadres>' . "\r\n";
// Genereerd het bericht
$message = 'Geachte heer of mevrouw,<br/><br/>';
$message .= 'Hierbij delen wij u mee dat binnen 60 dagen uw overeenkomst met ons verlengd
zal worden. Hieronder ziet u om welk product het gaat.<br/><br/>';
$message .= 'Product: ' .$omschrijving . ' periode: ' . $ingangdatum . 't/m ' . $verlooptper .
' <br/><br/>';
// Mail it
mail($to, $subject, $message, $headers);
}
?>
function sendMailToMe($naam, $omschrijving, $ingangdatum, $verlooptper) {
// Waar gaat de mail heen, en wat is het onderwerp
$to = 'emailadres';
$subject = 'Uw product wordt over 60 dagen verlengd';
// Standaard mail headers
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Benodigd voor HTML email
$headers .= 'To: ' . $naam . "\r\n";
$headers .= 'From: emailadres>' . "\r\n";
// Genereerd het bericht
$message = 'Geachte heer of mevrouw,<br/><br/>';
$message .= 'Hierbij delen wij u mee dat binnen 60 dagen uw overeenkomst met ons verlengd
zal worden. Hieronder ziet u om welk product het gaat.<br/><br/>';
$message .= 'Product: ' .$omschrijving . ' periode: ' . $ingangdatum . 't/m ' . $verlooptper .
' <br/><br/>';
// Mail it
mail($to, $subject, $message, $headers);
}
?>
Twee functies dus. Een functie om de mail te versturen en een functie om de update te doen.
hoe zorg ik dat wat er aan mijn functie sendMailToMe gegeven is (en dus verstuurd is), aan mijn update functie wordt gegeven? kan ik dan met dezelfde variable gaan werken?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$naam = 'Karel V';
sendMailToMe($naam); // doet iets met Karel V
updateStatusOnline($naam); // doet ook iets met Karel V
?>
$naam = 'Karel V';
sendMailToMe($naam); // doet iets met Karel V
updateStatusOnline($naam); // doet ook iets met Karel V
?>
Als je GEEN global gebruikt in je functies (en dat raad ik ook af, op $connection oid na voor mysqli), dan verandert die $naam niet.
ok, en moet ik dan nog iets in mijn mail functie inbouwen waarmee ik zeker weet dat de mail verstuurd is? iets met de waarde true doen?
Yepz:
die snap ik niet. ik roep eerst de functie sendMailToMe aan. moet ik die functie in de if vermelden?
Code (php)
Waarbij je in die eigen functie dan met return true of false aangeeft of alles gelukt is.
Gewijzigd op 03/09/2012 11:27:34 door Erwin H
geweldig, ik ga ermee aan de slag, bedankt allen!
ik heb mijn script nu zo ver dat de volgende stappen succesvol worden doorlopen:
- connectie met database
- selectie van gegevens
- verwerk de gegevens en wijs deze toe aan variabelen
- indien resultaten uit de query, verstuur per rij een email dmv een functie
- indien de email verstuurd is (dmv waarde TRUE teruggeven), voer een update uit dmv een update functie
nu wil ik in de update functie alleen de rijen updaten waarvoor een email is verstuurd. Ik vermoed dat ik in de WHERE iets moet plaatsen om deze functie goed te laten werken, maar ik heb geen idee wat.
zoals het er nu staat, worden alle records ge-update. de variabelen zijn dezelfde variabelen die doorgegeven zijn aan de email functie.
kan iemand me uitleggen hoe ik dit aanpak?
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?PHP
function UpdateProductRegel($naam, $omschrijving, $ingangdatum, $einddatum) {
//insert script voor records waarbij een mail is verstuurd.
mysql_query("UPDATE producten
SET klant_geinformeerd_op = NOW()");
}
?>
function UpdateProductRegel($naam, $omschrijving, $ingangdatum, $einddatum) {
//insert script voor records waarbij een mail is verstuurd.
mysql_query("UPDATE producten
SET klant_geinformeerd_op = NOW()");
}
?>
Als je bijvoorbeeld weet wat de id is van de te update row kun je iets pakken als:
Die int() is er voor om te kijken dat de id waarde wel een cijfer is.
Als je bijvoorbeeld naam wilt gebruiken in je WHERE kun je doen.
De mysql_real_escape_string() is een functie om SQL-Injections tegen te gaan.
$_GET pakt dan de waarde van de variabele??
Ik neem aan dat in de klanten tabel ook een id kolom, dus die selecteer je mee in de query.
Op het moment dat een mail verstuurd is voeg je die id toe aan de array
In dit topic kan je zien hoe je zo'n array kunt omtoveren naar een WHERE ... IN (...) clause.
ik heb in mijn select nu het id meegenomen en die in de while in een variabele gezet: $productID
$productID geef ik nu mee aan de functies. De eerste functie, function sendMailToMe($naam, $omschrijving, $ingangdatum, $einddatum, $productID), wordt aangeroepen. als die de waarde TRUE terug geeft, start de functie: UpdateProductRegel($naam, $omschrijving, $ingangdatum, $einddatum, $productID)
nb, de functies staan in een ander bestand.
In deze laatste functie wil ik alleen de rijen updaten die door de sendMailToMe functie zijn verwerkt.
moet ik dan in mijn UpdateProductRegel functie die array aanmaken en die in de where van mijn update plaatsen zoals in dat voorbeeld?
De rij(en) die je moet updaten zal (zullen) een unieke ID hebben, dat id voeg je toe aan de array van up te daten id's en die array geef je mee als parameter in de functie:
Code (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
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
<?php
$result = mysql_query ( "SELECT
COALESCE( klant.klant_bedrijf,
klant.klant_achternaam ) AS naam,
product.prod_omschrijving AS omschrijving,
klant.klant_van AS van,
product.prod_ingang_datum AS ingangdatum,
product.prod_eind_datum AS einddatum,
product.product_id
FROM producten AS product
JOIN klanten AS klant ON klant.klant_id = product.prod_klant_id");
include 'functions.php';
//toevoeging
$products2update = array();
while ($row = mysql_fetch_assoc($result)) {
$naam = $row["naam"];
$omschrijving = $row["omschrijving"];
$ingangdatum = $row["ingangdatum"];
$verlooptper = $row["einddatum"];
if(sendMailToMe($naam, $omschrijving, $ingangdatum, $verlooptper)){
$products2update[] = $row['product_id'];
}
}
//hier roep je dan de update functie aan
[/code]
?>
$result = mysql_query ( "SELECT
COALESCE( klant.klant_bedrijf,
klant.klant_achternaam ) AS naam,
product.prod_omschrijving AS omschrijving,
klant.klant_van AS van,
product.prod_ingang_datum AS ingangdatum,
product.prod_eind_datum AS einddatum,
product.product_id
FROM producten AS product
JOIN klanten AS klant ON klant.klant_id = product.prod_klant_id");
include 'functions.php';
//toevoeging
$products2update = array();
while ($row = mysql_fetch_assoc($result)) {
$naam = $row["naam"];
$omschrijving = $row["omschrijving"];
$ingangdatum = $row["ingangdatum"];
$verlooptper = $row["einddatum"];
if(sendMailToMe($naam, $omschrijving, $ingangdatum, $verlooptper)){
$products2update[] = $row['product_id'];
}
}
//hier roep je dan de update functie aan
[/code]
?>
Code (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
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
if($result === false)
{
}
else
{
//checken of er iets uit de query komt, zo niet.......
if(mysql_num_rows($result))
{
//rijen die ge-update moeten worden aan een array toevoegen
$products2update = array();
//de query heeft een resultaat, verwerk de resultaten uit de query
while ($row = mysql_fetch_assoc($result))
{
//stop de resultaten in variabelen
$naam = $row["naam"];
$omschrijving = $row["omschrijving"];
$ingangdatum = $row["ingangdatum"];
$einddatum = $row["einddatum"];
$productID = $row['productID'];
//doe iets met de variabelen
sendMailToMe($naam, $omschrijving, $ingangdatum, $einddatum, $productID);
//checken of de email functie tot zijn einde is gekomen, dan updaten
if (!sendMailToMe($naam, $omschrijving, $ingangdatum, $einddatum, $productID) == TRUE)
{
}
else
{
UpdateProductRegel($naam, $omschrijving, $ingangdatum, $einddatum, $productID);
echo 'update is uitgevoerd';
}
}
}
else
{
//er komt niets uit de query
echo 'geen resultaten vandaag';
}
}
?>
if($result === false)
{
}
else
{
//checken of er iets uit de query komt, zo niet.......
if(mysql_num_rows($result))
{
//rijen die ge-update moeten worden aan een array toevoegen
$products2update = array();
//de query heeft een resultaat, verwerk de resultaten uit de query
while ($row = mysql_fetch_assoc($result))
{
//stop de resultaten in variabelen
$naam = $row["naam"];
$omschrijving = $row["omschrijving"];
$ingangdatum = $row["ingangdatum"];
$einddatum = $row["einddatum"];
$productID = $row['productID'];
//doe iets met de variabelen
sendMailToMe($naam, $omschrijving, $ingangdatum, $einddatum, $productID);
//checken of de email functie tot zijn einde is gekomen, dan updaten
if (!sendMailToMe($naam, $omschrijving, $ingangdatum, $einddatum, $productID) == TRUE)
{
}
else
{
UpdateProductRegel($naam, $omschrijving, $ingangdatum, $einddatum, $productID);
echo 'update is uitgevoerd';
}
}
}
else
{
//er komt niets uit de query
echo 'geen resultaten vandaag';
}
}
?>
Dus als de sendMailToMe de waarde TRUE terug geeft, wil ik de UpdateProductRegel uitvoeren voor alleen de rijen die door sendMailToMe zijn verwerkt.
de #products2update = array[] heb ik voor mijn while gezet, maar nu moet ik de product id nog in die array zetten. waar doe ik dat in mijn geval?
iemand die me hiermee op weg kan helpen?