E-mail bericht ontleden en in MySQL zetten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Roland Janzzen

Roland Janzzen

12/02/2011 13:26:22
Quote Anchor link
Hallo,

Ik heb een nogal complexe vraag wat betreft PHP en MySQL waar ik niet helemaal uit kom. Voor een project heb ik een website gemaakt met een aanmeldingsformulier. Als een gebruiker dit invult, dan worden uiteindelijk de gegevens per E-mail verzonden. Ik zou die gegevens handmatig moeten overnemen om in de database te zetten.

Hier gaat natuurlijk veel tijd in zitten en bovendien is de kans op fouten groter.

Ik wil dit proces als volgt gaan doen. Als er een aanmelding binnen komt, wordt deze handmatig gecontroleerd. Dus, gekeken of alles wel juist is ingevuld. Vervolgens stuur ik de mail door naar een afgeschermde mailbox.

Met een PHP-script wordt de mail dan ontleed en worden de gegevens in de database gezet.

De mail bestaat uit een plain-tekst mail en ziet er zo uit:

Wat wil je doen? : Gegevens toevoegen
Voornaam : Jan
Achternaam : Janssen
E-mailadres : [email protected]
Website : www.janssen.com
Plaats : Leeuwarden
Provincie : Friesland
Leeftijd : 43
Opmerkingen :


Nu heb ik al wel een script dat een connectie maakt naar de mailbox en met IMAP-opties de boel kan uitlezen. Echter, het script doet (nog) niet wat ik graag wil. Ik wil graag dat als er "Gegevens toevoegen" staat, dat het script het commando INSERT gebruikt in MySQL. "Gegevens verwijderen" zou da dus het commando DELETE betekenen.

Verder wil ik graag dat de velden 'voornaam', 'achternaam' etc. apart in een veld worden geplaatst in de database. Anders dan in het script staat, zoek ik dus een manier om de gegevens in het bericht te filteren en NIET om het gehele bericht in de database te zetten. Het gaat alleen om de ingevoerde gegevens.

Dit is het script:

Quote:
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
43
44
45
46
47
<?
include "../dbconnection.inc.php";
/** Instellingen van je server **/
$server = '..nl';
$port = 143; // Standaard imap poort
/** Mail-acount gegevens **/

$username = '@.nl'; // [email protected]
$password  = ''; // wachtwoord
/** Verbinden met mailbox **/

$mbox = imap_open('{' . $server . ':' . $port . '}INBOX', $username, $password);
$headers = imap_headers($mbox);
$info = imap_mailboxmsginfo($mbox);
$aantalberichten = $info->Nmsgs;
if ($headers == false)// als er geen verbinding was of geen email dan error weergeven.
{
   echo "Geen berichten!<br>";
}

else
{

   while (list ($key, $val) = each ($headers))  // gewoon de email whilen die in de op de server staan
   {
       $val;
       $id = substr($val, 9, 1);
       // de gegevens ophalen:
       // $bericht =  imap_body($mbox, $id);

        $data = imap_headerinfo($mbox, $id); // hiermee haal je allerlei aanvullende gegevens over het bericht op. naar wel adres het is gestuurd maar ook de datum en het onderwerp. Tevens kan je zo alls 'flags' opvragen.
        $onderwerp = $data->subject;
        $datum = $data->date;
        $bericht = imap_body ($mbox, $id);
        
        echo '<b>Afzender:</b> '.$data->fromaddress.'<br>';
        echo '<b>Onderwerp:</b> '.$data->subject.'<br>';
        echo '<b>Bericht:</b><br>'.$bericht.'<br>';
        echo '<b>Ontvangen:</b> '.$data->date;
        echo"<hr>";
        $sql = mysql_query(" INSERT INTO `mail`(`onderwerp`,`bericht`,`datum`)VALUES('$onderwerp','$bericht','$datum')");
        imap_delete($mbox, $id);
        imap_expunge($mbox);

    }

}



imap_close($mbox);
?>


Bovenstaand script heb ik van internet afgeplukt in de hoop hierop verder te kunnen bouwen. Ik hoop dat iemand me een beetje op weg kan helpen, zoveel kennis heb ik er (nog) niet van en ja, alle begin is moeilijk, maar dit complexe verhaal (wat het invoer-proces flink vergemakkelijkt), krijg ik momenteel niet geschreven in een script.

Alvast hartelijk dank,

Roland.
 
PHP hulp

PHP hulp

27/12/2024 08:26:30
 
Jordi Kroon

Jordi Kroon

12/02/2011 13:30:40
Quote Anchor link
pas op voor mysqlinjectie
backticks horen niet in een query
niet onnodig variabelen aanmaken
 
Roland Janzzen

Roland Janzzen

12/02/2011 13:42:33
Quote Anchor link
Ik heb het script nog niet getest in de huidige vorm, ik kwam dit alleen tegen en vroeg me af of ik hiermee verder kan bouwen naar de gevraagde opties. Als iemand fouten ziet of dingen ziet die anders kunnen/moeten, dan zou ik het graag horen. Ik heb alleen geen flauw idee of hier iets fout in staat ja of nee, zoveel kennis heb ik nog niet.

Roland.
 
Michael -

Michael -

12/02/2011 15:44:15
Quote Anchor link
Als ik 't goed begrijp:
-Gebruiker vult aanmeldformulier in
-Jij ontvangt een mail met de gevevens
-Voor goedkeuring wil jij deze ergens heen sturen zo dat ie d.m.v. een script in de database komt?

Of dit kan weet ik niet, maar ik zou 't sowieso anders doen.

-Gebruiker vult aanmeldformulier in
-Gegevens worden in database geschreven met een extra veld 'actief' o.i.d.
Dat actief veld zet je standaard op 0 (dat kan je instellen in je phpmyadmin, of je stuurt 't mee met t script)
-Er wordt een email naar jou verstuurt dat er een nieuwe aanmelding is met een linkje naar die gebruiker.
-Op die pagina maak je een knopje 'Goedkeuren' of 'Activeren' o.i.d. waardoor actief 0 in 1 veranderd.

Nou kun je bijv alleen gebruikers met actief 1 weergeven of toegang geven o.i.d.
Gewijzigd op 12/02/2011 15:46:20 door Michael -
 



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.