insert na versturen van email, binnen functie?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

Bekijk vacature »

Wouter W

Wouter W

03/09/2012 10:26:24
Quote Anchor link
ik heb een functie die wordt uitgevoerd op het moment dat mijn select query rijen opleverd. de functie verstuurd een email over de database regel. nadat de email is verstuurd wil ik de rijen gaan update met een datum waarop de email is verstuurd.
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)
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
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);
?>


functions.php:
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
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);

                
    }

?>
 
PHP hulp

PHP hulp

27/04/2024 02:13:41
 
Erwin H

Erwin H

03/09/2012 10:50:21
Quote Anchor link
Probeer verantwoordelijkheden gescheiden te houden. Wat als je morgen ook wil dat er niet een mail verstuurd wordt, maar iets anders. Dan moet je wellicht dezelfde update doen en moet je dezelfde functionaliteit weer in een andere functie verwerken.

Twee functies dus. Een functie om de mail te versturen en een functie om de update te doen.
 
Wouter W

Wouter W

03/09/2012 10:55:38
Quote Anchor link
ok, die logica begrijp ik. dus ik maak een aparte functie waarin ik een update maak.

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

Eddy E

03/09/2012 10:58:54
Quote Anchor link
Ja, je gebruikt gewoon dezelfde gegevens:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$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.
 
Wouter W

Wouter W

03/09/2012 11:05:17
Quote Anchor link
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?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

03/09/2012 11:15:10
Quote Anchor link
Yepz:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if (mail($to, $subject, $message, $headers)) {
    //update functie aanroepen etc.
}
else {
    //foutmelding tonen
}
?>
 
Wouter W

Wouter W

03/09/2012 11:22:20
Quote Anchor link
die snap ik niet. ik roep eerst de functie sendMailToMe aan. moet ik die functie in de if vermelden?
 
Erwin H

Erwin H

03/09/2012 11:27:19
Quote Anchor link
Optie van Ger, maar dan met jouw functie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if (sendMailToMe($naam)) {
    //update functie aanroepen etc.
}
else {
    //foutmelding tonen
}
?>

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
 
Wouter W

Wouter W

03/09/2012 11:54:16
Quote Anchor link
geweldig, ik ga ermee aan de slag, bedankt allen!
 
Wouter W

Wouter W

11/09/2012 09:15:54
Quote Anchor link
ik hoop dat ik binnen deze tread verder mag gaan met mijn vraag over dit verhaal.

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

?>
 
Remco schrubben

remco schrubben

11/09/2012 09:32:23
Quote Anchor link
Je moet een WHERE gebruiken in je Query deel.

Als je bijvoorbeeld weet wat de id is van de te update row kun je iets pakken als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
..... WHERE id = int() $_GET['id']


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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
..... WHERE naam = mysql_real_escape_string($_GET['naam'])

De mysql_real_escape_string() is een functie om SQL-Injections tegen te gaan.
 
Wouter W

Wouter W

11/09/2012 11:15:39
Quote Anchor link
de variabelen die ik mee stuur zijn namen of datums. de variabele waar ik van denk dat die het kan zijn is $naam. kan het dan zo?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?PHP
...... WHERE kolomnaam = mysql_real_escape_string($_GET[$naam])
?>


$_GET pakt dan de waarde van de variabele??
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

11/09/2012 11:40:35
Quote Anchor link
Je zegt dat je een reeks van klanten moet updaten, als ze een mail gehad hebben.
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.
 
Wouter W

Wouter W

11/09/2012 13:01:05
Quote Anchor link
ik heb je omtover stukje bekeken, maar snap het nog niet helemaal.

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?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

11/09/2012 14:27:19
Quote Anchor link
Het product_id identificeert de rij die ge-update moet worden?
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)
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
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]
?>
 
Wouter W

Wouter W

11/09/2012 15:49:20
Quote Anchor link
ok, misschien verduidelijkt het als ik mijn script er bij zet, waarbij $result mijn query is en ik mijn functies in een include functions.php heb gezet:

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

?>


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

Wouter W

15/09/2012 14:33:28
Quote Anchor link
iemand die me hiermee op weg kan helpen?
 



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.