send mail bij update
ik zit nog eens met een vraag waarvan ik niet weet of dit wel mogelijk is.
Ik zou graag een mail versturen als iemand zijn gegevens update in de database maar dan wel enkel met de geüpdate velden zodat ik kan zien welke data er is veranderd.
Een mail versturen met alle velden is geen probleem, dus het moet iets aangepast zijn.
Groeten,
Wim
Dit kan prima, maar warom zou je dat willen doen? Als het niet de bedoeling is dat mensen bepaalde gegevens kunnen wijzigen kun je dat beter gewoon niet toestaan.
Waarom? Omdat de data wordt geëxporteerd naar xlsx welke dan in een access database wordt geïmporteerd om verdere bewerkingen uit te voeren. Maar de data wordt nooit meer overschreven in die access database, dus als we weten welke data er voor dat lid is aangepast kunnen we dit ook manueel in de database aanpassen.
Het gebeurd niet vaak dat er een lid data aanpast maar het zou makkelijker zijn om niet alle data van dat lid te moeten vergelijken met de oude data ;-)
Hopelijk is dit een beetje duidelijk, voor mij is het logisch maar daarom niet voor andere.
Je kan met array_diff() een vergelijking doen tussen de $_POST en de bestaande data.
Je zou dan een lijstje in je mail kunnen zetten met oude waarde --> nieuwe waarde ofzo, en dat je op grond daarvan bepaalt of het een wijziging is die de moeite is om daadwerkelijk door te voeren.
Maar idealiter wil je van deze handmatige bijwerkingen af, dit klinkt niet echt als automatisering maar meer als het handmatig synchroon houden van verschillende systemen.
Gewijzigd op 03/05/2020 22:48:22 door Thomas van den Heuvel
@Thomas, het zou inderdaad idealiter zijn als alles automatisch gaat maar dat is in dit geval niet dadelijk mogelijk. Wat er allemaal achter die access database zit is nog enorm veel en ingewikkeld.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result); // geeft het element 'blue' omdat die mist
?>
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result); // geeft het element 'blue' omdat die mist
?>
Het werkt niet bij multidimensionale array's. Dan moet je een aparte functie bouwen die het recursief uitleest.
Gewijzigd op 03/05/2020 22:56:32 door - Ariën -
Ik ga dit bekijken maar zie het nog niet dadelijk zitten hoe ik dit moet doen. Toch bedankt, ik ga experimenteren.
Dit kan met een simpel if-statement?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Bedankt Thomas, dit zal ik ook bekijken.
Dat kan ook, maar doe je dan niet dunnetjes over wat array_diff() precies doet?
Omdat het hier handmatige wijzigingen betreft lijkt het mij handiger dat alle informatie die je nodig hebt in de mail bij elkaar zit? Plus dus een identificatie welke velden het precies betrof.
Maar de oude waarde kan je zo ophalen uit $old.
Ik ben al iets verder met uw code maar ik krijg nog niet de gewenste uitkomst.
De $v wordt enkel daar vermeld dus wat is daar het doel van?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$old = array(
'firstname' => $account['firstname'],
'lastname' => $account['lastname'],
);
$new = array(
'firstname' => $_POST['firstname'],
'lastname' => $_POST['lastname'],
);
foreach ($old as $k => $v) {
if ($old[$k] != $new[$k]) {
//echo '<p>field '.$k.' changed from "'.$old[$k].'" to "'.$new[$k].'"</p>';
}
}
'firstname' => $account['firstname'],
'lastname' => $account['lastname'],
);
$new = array(
'firstname' => $_POST['firstname'],
'lastname' => $_POST['lastname'],
);
foreach ($old as $k => $v) {
if ($old[$k] != $new[$k]) {
//echo '<p>field '.$k.' changed from "'.$old[$k].'" to "'.$new[$k].'"</p>';
}
}
in mijn mailscript staat het volgende:
Ik had enkel de firstname aangepast maar krijg in de mail als uitkomst hetvolgende:
veld lastname is gewijzigd van Neefs naar Neefs
Waarom geeft hij de gegevens van lastname weer (wat niet is veranderd) en niet de gegevens van firstname (wat wel is veranderd).
Als ik ook lastname aanpas dan merkt hij niet de oude gegevens op maar geeft hij zowel bij de oude als nieuwe data de nieuwe waarde weer.
output in mail:
veld lastname is gewijzigd van Neefssss naar Neefssss
Gewijzigd op 04/05/2020 12:21:06 door Wim Neefs
Je kan ze ook $a en $b, of $jut en $juul noemen, maar dat zorgt juist voor verwarring en onduidelijkheid.
Bij een $_POST request is de naam van het formulier-element (bijv. adres) de key, en de waarde (bijv. Dorpsstraat 1) de value.
Om op je vraag terug te komen:
Zet dit eens op lijn 12 neer:
Code (php)
1
2
3
4
2
3
4
echo "<h1>Oude waarde:</h2>";
echo "<pre>".print_r($old,true)."<pre>";
echo "<h1>Nieuwe waarde (uit POST):</h2>";
echo "<pre>".print_r($new,true)."<pre>";
echo "<pre>".print_r($old,true)."<pre>";
echo "<h1>Nieuwe waarde (uit POST):</h2>";
echo "<pre>".print_r($new,true)."<pre>";
Dit moet het makkelijker maken met debuggen.
Gewijzigd op 04/05/2020 12:45:08 door - Ariën -
Oude waarde:
Array
(
[firstname] => Wimaaa
[lastname] => Neefsbbb
)
Nieuwe waarde (uit POST):
Array
(
[firstname] => Wimaaa
[lastname] => Neefsbbb
)
hij haalt de oude waarde niet en geeft dit blijkbaar dadelijk de nieuwe waarde
Gewijzigd op 04/05/2020 13:44:01 door Wim Neefs
Dan sla je de waardes vermoedelijk al eerder op in de database?
Inderdaad, het lid schrijft in met bepaalde gegevens maar kan die nadien nog wijzigen. Dus ik zou die oude gegevens moeten kunnen onthouden en dan de oude en nieuwe gegevens willen weergeven.
Dan moet je dat doen vóór je UPDATE/INSERT actie, en dat opslaan in $old_data bijvoorbeeld.
Ik zal het bekijken en testen. Kan ik iets doen met $_session?
Met het verhuizen van wat regels in je code kan je dit ook al bereiken.
Gewijzigd op 04/05/2020 14:12:48 door - Ariën -