Hallo iedereen,

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
Met jouw aanpak heb je wel de verschillen, maar zie je niet direct welk veld dit betreft, noch wat de oude waarde was? Die zou je dan terug moeten zoeken.

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.
@Thomas, in de foreach schrijf je over $k en $v. Kan je dit misschien verder verduidelijken?
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?


$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>';
        }
    }

in mijn mailscript staat het volgende:

$body .= "veld" .$k. "is gewijzigd van" .$old[$k]. "naar" .$new[$k]. "\n\n";


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
$k en $v staat voor key en value. De onderdelen waar een item van een array uit bestaat.
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:

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>";


Dit moet het makkelijker maken met debuggen.

Dit is de output na die extra code te hebben toegevoegd:

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
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?
Kan, maar gezien de staat van je site niet verandert is dat zwaar overkill.
Met het verhuizen van wat regels in je code kan je dit ook al bereiken.

Reageren