Beste leden,


Graag had ik wat advies van jullie over het volgende.
Via een formulier wil ik een email kunnen sturen met een vaste opmaak (template).
In het formulier word gebruik gemaakt van een input email adres (waar de email naar toe moet) en nog een variabele waarde die terug moet komen in de template. Daarnaast wil ik een terug koppeling op de pagina dat het gelukt is.

Het formulier en de ajax call functie heb ik volledig af en wil nu graag weten wat nu de handigste afhandeling is.

Met vriendelijke groet,

Jop
Beste Thomas,

Je gaf boven aan om een terug koppeling via json te maken.
Bedoel je daarmee dit:


<form id="keuze">
<input type="text" name="keuze">
<button type="submit">Zend</button>
</form>

<script>
$(document).ready(function(){
$("#keuze").submit(function(e) {
e.preventDefault();

$.ajax({
	type: 'POST',
        url: "probeer.php",
	data: $("#keuze").serialize(),
	'dataType': 'json',
	'success': function(data) {
                alert ('data.succes')
}

});
});
});
</script>




<?php

//init variables
$to = "[email protected]";
$subject = "Keuze";

$keuze = $_POST["keuze"];

$content = file_get_contents("template.html");

$content = str_replace("%keuze%", $keuze, $content);

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: Van mij <[email protected]>' . "\r\n";

mail($to, $subject, $content, $headers);

$success = mail(Wat moet ik hier neerzetten?);

header('Content-Type: application/json; charset=UTF-8');
echo json_encode($success);


?>



Gr. Yoeri
Uhm, bijna.

mail() retourneert een boolean (true of false) die aangeeft of het versturen van de mail is geslaagd (dit zegt dus niets over het succesvol ontvangen).

Regel 19 is dus een beetje loos? Je mailt daar nog een keer iets? Dit deed je al op regel 17, dus daar zul je, zoals ik al in mijn voorbeeld aangaf, zoiets moeten doen:
<?php
$success = mail(...);
?>

Op dit moment bestaat data.success (regel 17 van je JavaScript snippet) niet. Je hebt enkel de boolean die je teruggeeft - dit is "data", dus je zou zoiets kunnen doen:
'success': function(data) {
    if (data) {
        // het versturen was succesvol, geef een bericht weer
    } else {
        // het versturen was niet succesvol, geef een bericht weer
    }
}

Of je regelt dit al aan de code kant, door meer informatie terug te geven:
<?php
$success = mail(...);
if ($success) {
    $return = array(
        'success': true,
        'message': 'success bericht',
    );
} else {
    $return = array(
        'success': false,
        'message': 'mislukt bericht',
    );
}
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($return);
?>

En vervolgens heb je in je callback function de beschikking over data.success (eerste array index) deze zou je kunnen gebruiken om je terugkoppelingstekst een opvallende opmaak te geven die aangeeft dat er iets mis was, en data.message (tweede array index) die je gebruikt om de terugkoppelingstekst weer te geven.
Yoeri,


Ben zelf ook wat aan het stoeien geweest:


'success': function(data) {
alert (data.choise);
}



<?php

header('Content-Type: application/json; charset=UTF-8');
//init variables
$to = "[email protected]";
$subject = "Keuze";

$keuze = $_POST["keuze"];

$content = file_get_contents("template.html");

$content = str_replace("%keuze%", $keuze, $content);

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: Van mij <[email protected]>' . "\r\n";

$success = mail($to, $subject, $content, $headers);

$return = array(
		'choise'  => '$_POST["keuze"]',
		);
echo json_encode($return);


?>
'choise'  => '$_POST["keuze"]',

Het lijkt mij dat dit nooit goed gaat, dit geeft letterlijk '$_POST["keuze"]' terug, en niet de inhoud van $_POST['keuze']...
Dubble Quots? Php kan natuurlijk de variable meenemen aangezien die al gePOST is?

'choise' => "$keuze",
Nee, gewoon geen quotes. Werkt veel beter.
En los daarvan is het correcte Engelse woord: choice.

Reageren