send mail bij update

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Wim Neefs

Wim Neefs

03/05/2020 22:00:27
Quote Anchor link
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
 
PHP hulp

PHP hulp

20/04/2024 14:20:47
 
Thomas van den Heuvel

Thomas van den Heuvel

03/05/2020 22:12:04
Quote Anchor link
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.
 
Wim Neefs

Wim Neefs

03/05/2020 22:31:44
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

03/05/2020 22:46:07
Quote Anchor link
Je kan met array_diff() een vergelijking doen tussen de $_POST en de bestaande data.
 
Thomas van den Heuvel

Thomas van den Heuvel

03/05/2020 22:47:31
Quote Anchor link
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.
Gewijzigd op 03/05/2020 22:48:22 door Thomas van den Heuvel
 
Wim Neefs

Wim Neefs

03/05/2020 22:51:51
Quote Anchor link
@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.
 
- Ariën  -
Beheerder

- Ariën -

03/05/2020 22:54:36
Quote Anchor link
Een mooi voorbeeldje over de werking ervan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>


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 -
 
Wim Neefs

Wim Neefs

03/05/2020 22:58:32
Quote Anchor link
Ik ga dit bekijken maar zie het nog niet dadelijk zitten hoe ik dit moet doen. Toch bedankt, ik ga experimenteren.
 
Thomas van den Heuvel

Thomas van den Heuvel

03/05/2020 23:09:08
Quote Anchor link
@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?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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>';
    }
}

?>
 
Wim Neefs

Wim Neefs

03/05/2020 23:16:02
Quote Anchor link
Bedankt Thomas, dit zal ik ook bekijken.
 
- Ariën  -
Beheerder

- Ariën -

03/05/2020 23:22:48
Quote Anchor link
Dat kan ook, maar doe je dan niet dunnetjes over wat array_diff() precies doet?
 
Thomas van den Heuvel

Thomas van den Heuvel

04/05/2020 00:04:49
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

04/05/2020 00:37:20
Quote Anchor link
Maar de oude waarde kan je zo ophalen uit $old.
 
Wim Neefs

Wim Neefs

04/05/2020 12:17:41
Quote Anchor link
@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?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
        }
    }

in mijn mailscript staat het volgende:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$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
Gewijzigd op 04/05/2020 12:21:06 door Wim Neefs
 
- Ariën  -
Beheerder

- Ariën -

04/05/2020 12:44:40
Quote Anchor link
$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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>";


Dit moet het makkelijker maken met debuggen.
Gewijzigd op 04/05/2020 12:45:08 door - Ariën -
 
Wim Neefs

Wim Neefs

04/05/2020 13:40:26
Quote Anchor link
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
Gewijzigd op 04/05/2020 13:44:01 door Wim Neefs
 
- Ariën  -
Beheerder

- Ariën -

04/05/2020 13:58:04
Quote Anchor link
Dan sla je de waardes vermoedelijk al eerder op in de database?
 
Wim Neefs

Wim Neefs

04/05/2020 14:00:03
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

04/05/2020 14:03:24
Quote Anchor link
Dan moet je dat doen vóór je UPDATE/INSERT actie, en dat opslaan in $old_data bijvoorbeeld.
 
Wim Neefs

Wim Neefs

04/05/2020 14:04:50
Quote Anchor link
Ik zal het bekijken en testen. Kan ik iets doen met $_session?
 
- Ariën  -
Beheerder

- Ariën -

04/05/2020 14:11:10
Quote Anchor link
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.
Gewijzigd op 04/05/2020 14:12:48 door - Ariën -
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.