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
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.
Dag Thomas, als een lid bepaalde gegevens wijzigt (wat dus mag) wil ik dat weten welke data er is gewijzigd.
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.
Sja dit zou je dan bijvoorbeeld kunnen doen door voordat je de nieuwe informatie opslaat de huidige informatie op te halen, en dan na bijwerken veld voor veld controleert of er iets is "veranderd". Vraag is dan natuurlijk, wanneer is iets veranderd? Hoofd- en kleine letters? Spaties?

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.
@Ariën, dit ga ik moeten uitzoeken, ik heb nog nooit met array_diff() gewerkt.
@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.
Een mooi voorbeeldje over de werking ervan:

<?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
?>

Het werkt niet bij multidimensionale array's. Dan moet je een aparte functie bouwen die het recursief uitleest.
Ik ga dit bekijken maar zie het nog niet dadelijk zitten hoe ik dit moet doen. Toch bedankt, ik ga experimenteren.
@Ariën, maar er verandert niets qua structuur in deze data lijkt mij, het gaat om wijzigingen in bestaande kolommen, je zult dit dus veld per veld moeten vergelijken, waarbij de oude waarde waarschijnlijk ook relevant is?

Dit kan met een simpel if-statement?
<?php
$old = array(
    'phone' => '123456',
    'address' => 'Abc 12',
    // etc.
);

$new = array(
    'phone' => '234567',
    'address' => 'Abc 12',
    // etc.
);

foreach ($old as $k => $v) {
    if ($old[$k] != $new[$k]) {
        echo '<p>field '.$k.' changed from "'.$old[$k].'" to "'.$new[$k].'"</p>';
    }
}
?>
Bedankt Thomas, dit zal ik ook bekijken.
Dat kan ook, maar doe je dan niet dunnetjes over wat array_diff() precies doet?

Reageren