Email functie met ajax

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Snelle Jaap

Snelle Jaap

14/01/2014 11:16:43
Quote Anchor link
Hey,

Ik heb nu een werkend formulier met validation die opslaat in de database (met dank aan dit forum).
Nu wil ik een mail functie toevoegen, die gewoon de bestaande insert verstuurd in een mail. Dus geen nieuwe dingen, gewoon de naam, achternaam, mail en telefoonnummer versturen (naar de mail die is ingevoerd.

Hier m'n bestaande ajax 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
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
$(function(){
    
    // initialisatie formulier validatie. (zie http://rickharrison.github.io/validate.js)
    var validator = new FormValidator('form', [{
        name: 'voornaam',
        display: 'Voornaam',    
        rules: 'required'
    }, {
        name: 'achternaam',
        display: 'achternaam',
        rules: 'required'
    },{
        name: 'telefoonnummer',
        display: 'telefoon',
        rules: 'required|numeric'
    },{
        name: 'email',
        display: 'email',
        rules: 'required|valid_email'
    }], function(errors, event) {
        var berichten = document.getElementById('fout');
    
        berichten.innerHTML = '';
    
        // als er fouten zijn:
        if (errors.length > 0) {
            for (var i = 0, l = errors.length; i < l; i++) {
                berichten.innerHTML += errors[i].message + '<br>';
            }
        // als de validatie goed gegaan is:
        } else {
            var voornaam = $('#voornaam').val();
            var achternaam = $('#achternaam').val();
            var telefoonnummer = $('#telefoonnummer').val();
            var email = $('#email').val();
    
            $.post('action.php',{action: "button", voornaam:voornaam, achternaam:achternaam, telefoonnummer:telefoonnummer, email:email},function(res){
                $('#result').html(res);
            });
            document.getElementById('goed').innerHTML = 'Verstuurd!';  
        }
        
        // voorkom ten allertijde dat het formulier daadwerkelijk ge-submit wordt!
        event.preventDefault();
    });
});


Om dit stuk gaat het:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
   var voornaam = $('#voornaam').val();
            var achternaam = $('#achternaam').val();
            var telefoonnummer = $('#telefoonnummer').val();
            var email = $('#email').val();
    
            $.post('action.php',{action: "button", voornaam:voornaam, achternaam:achternaam, telefoonnummer:telefoonnummer, email:email},function(res){
                $('#result').html(res);
            });
            document.getElementById('goed').innerHTML = 'Verstuurd!';  

Hier insert ie, daar wil ik dus graag dat die een mail verstuurd.

Dit is wat ik nu op action.php heb staan:

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
<?php
    //connectie
include ('connection.php');

    //als de knop is ingedrukt insert dan
    if($_POST['action'] == 'button'){

        $voornaam  = mysql_real_escape_string($_POST['voornaam']);
        $achternaam = mysql_real_escape_string($_POST['achternaam']);
        $email  = mysql_real_escape_string($_POST['email']);
        $telefoonnummer = mysql_real_escape_string($_POST['telefoonnummer']);

        $sql = "insert into
           `form` (`id`,`voornaam`, `achternaam`, `email`, `telefoonnummer`)
            values ('','"
.$voornaam."', '".$achternaam."', '".$email."', '".$telefoonnummer."')";
        $query = mysql_query($sql);
        if($query){
            echo "Toegevoegd!";
        }
else {
            echo "Er is iets fout gegaan.";
        }


    
    
    
$voornaam = $_POST['voornaam'];
$achternaam = $_POST['achternaam'];
$telefoonnummer = $_POST['telefoonnummer'];
$email = $_POST['email'];


$subject = 'Email!';
$headers  = 'MIME-Version: 1.0' ."\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";  

$content = '<html><header><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </header><body><img src="../images/Koala.jpg"></img>';
$content .= $voornaam;
$content .= $achternaam;
$content .= $telefoonnummer;
$content .= '</body></html>';

mail($email, $subject, $content, $headers); //This method sends the mail.
echo "Email verzonden"; // success message

 }
?>


Kan iemand me op weg helpen?
Mailadres verwijderd om spamharvesters te voorkomen.[/modedit]
Gewijzigd op 14/01/2014 12:17:18 door Snelle Jaap
 
PHP hulp

PHP hulp

26/11/2024 19:27:08
 
- SanThe -

- SanThe -

14/01/2014 11:19:42
 
Joakim Broden

Joakim Broden

14/01/2014 11:22:37
Quote Anchor link
Wat lukt er niet? Wat gaat er mis?

Standaard heeft een lokale server geen mail functie/server. Stel dus een mailserver in of maak gebruik van STMP -> bv PphMailer heeft daar een class voor.
 
Snelle Jaap

Snelle Jaap

14/01/2014 11:24:22
Quote Anchor link
Metal Hertog Jan op 14/01/2014 11:22:37:
Wat lukt er niet? Wat gaat er mis?

Standaard heeft een lokale server geen mail functie/server. Stel dus een mailserver in of maak gebruik van STMP -> bv PphMailer heeft daar een class voor.

Ik gebruik wamp, maar heb de stmp al ingesteld dus dat zou goed moeten zijn. Ik heb de code nu zoals ik hem heb geplaatst, maar hij verstuurd nog geen mail (het is een outlook adres, geen idee of dat nog dingen met zich meebrengt, want ik las problemen over hotmail)



Toevoeging op 14/01/2014 12:17:54:

Even de phpcode aangepast, nog steeds wil die niks versturen. Volgens mij klopt alles nu.
Gewijzigd op 14/01/2014 11:25:29 door Snelle Jaap
 
Joakim Broden

Joakim Broden

14/01/2014 12:26:27
Quote Anchor link
Wat zegt de error log?
 
Snelle Jaap

Snelle Jaap

14/01/2014 12:36:04
Quote Anchor link
Metal Hertog Jan op 14/01/2014 12:26:27:
Wat zegt de error log?


Hoe kijk je die in?
Heb even zitten zoeken maar kan het niet vinden.
In de php.ini de volgende regel gezet:
error_log = C:/wamp/www/Opdracht/php_error.log

Maar dat maakt geen error log bestand aan.

Nevermind heb het toch werkend gekregen.

De error logs na het runnen van index.php :

[14-Jan-2014 11:39:11 UTC] PHP Warning: mail(): SMTP server response: 550 The address is not valid. in C:\wamp\www\Opdracht\action.php on line 43

[14-Jan-2014 11:39:11 UTC] PHP Stack trace:

[14-Jan-2014 11:39:11 UTC] PHP 1. {main}() C:\wamp\www\Opdracht\action.php:0

[14-Jan-2014 11:39:11 UTC] PHP 2. mail() C:\wamp\www\Opdracht\action.php:43

[14-Jan-2014 11:39:11 UTC] PHP Warning: error_log() expects at least 1 parameter, 0 given in C:\wamp\www\Opdracht\action.php on line 45

[14-Jan-2014 11:39:11 UTC] PHP Stack trace:

[14-Jan-2014 11:39:11 UTC] PHP 1. {main}() C:\wamp\www\Opdracht\action.php:0

[14-Jan-2014 11:39:11 UTC] PHP 2. error_log() C:\wamp\www\Opdracht\action.php:45



Toevoeging op 14/01/2014 12:55:53:

Laat maar ik heb het al werkend gekregen! Zat nog een fout in m'n php.ini. Bedankt voor het vertellen over de log_errors, handig.
Gewijzigd op 14/01/2014 12:39:58 door Snelle Jaap
 
Ivo P

Ivo P

14/01/2014 13:08:13
Quote Anchor link
op zich is het nog wel verstandig om ook $_POST['email'] te controleren (of het een (één) mailadres is).

Je neemt dat nu klakkeloos aan, maar als het "ik heb geen mail" is, dan gaat die mail nergens heen.

Is het "[email protected], [email protected]" dan gaat die mail 2 kanten op,
en als iemand een enter toevoegt + nog wat leuke headers dan staat je server open om spam mee te versturen.

a) controleer http://www.pfz.nl/wiki/invoer-validatie/#regular-expressions-is-het-een-geldig-email-adres
b) gebruik een class als PHPMailer die van zichzelf ook al een paar van dat soort controles uitvoert.
 
Snelle Jaap

Snelle Jaap

14/01/2014 13:25:47
Quote Anchor link
Dat wordt al gedaan. Door middel van jquery valideer ik de velden, ik weet dat het veiliger is om dat via de server te doen, maar dit is even voor een opdracht waarbij de pagina niet kan refreshen. Je kan geen meerdere mails invoeren zoals je aangeeft in je post.
 
Ivo P

Ivo P

14/01/2014 13:35:15
Quote Anchor link
in jouw script kan dat niet, omdat jQuery valideert en je javascript niet kunt uitschakelen omdat je dan de ajax call niet kan doen.

Nu is het zo, dat mensen die misbruik willen maken van jouw server zich meestal niet storen aan jouw "ja maar dat mag niet!".

Je hebt met Firebug in 2 tellen gezien wat de werkelijke ajax call naar jouw script is.

Dus laten we zeggen je post die velden naar emailajax.php.

Dan maakt de hacker in simpele opzet een form:
<form method=post action=jouwsite/emailajax.php>
<input name=email value="heel veel bagger">
<input name=voornaam>
</form>

Dat wordt gesubmit en weg is je controle.
Dan kun je allerlei dingen proberen om weer te controleren dat het echt een ajaxcall is met een ref. naar de goede pagina, maar

if(filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL) && preg_match('#\.[a-z]{2,6}$#i', $_POST['email']))

is natuurlijk geen moeite om in te voeren.
 
Michael -

Michael -

14/01/2014 13:37:18
Quote Anchor link
Snelle Jaap op 14/01/2014 13:25:47:
Dat wordt al gedaan. Door middel van jquery valideer ik de velden, ik weet dat het veiliger is om dat via de server te doen, maar dit is even voor een opdracht waarbij de pagina niet kan refreshen. Je kan geen meerdere mails invoeren zoals je aangeeft in je post.

Javascript is eenvoudig te omzeilen (uit te schakelen) dus kwa veiligheid moet je daar zeker niet op vertrouwen.
Jouw script is nou kwetsbaar voor kwaadwillende code.
Variabelen alleen maar van naam veranderen voor je ze gebruikt is ook verloren tijd en ruimte
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$voornaam = $_POST['voornaam'];
$achternaam = $_POST['achternaam'];
$telefoonnummer = $_POST['telefoonnummer'];
$email = $_POST['email'];

zelfde doe je voor mysql_real_escape_string. je kunt mysql_real_escape_string($_POST['voornaam']); gewoon in je query gebruiken ipv eerst te hernoemen.

Daarbij wordt mysql functies uitgefaseerd en wordt afgeraden voor nieuwe code. Kijk eens naar mysqli of PDO.
 
Snelle Jaap

Snelle Jaap

14/01/2014 14:03:56
Quote Anchor link
Ik weet dat mysqli en PDO veel beter is, maar weet er nog te weinig van. Moet ik wat over lezen.
 



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.