Door
Frederic D
op 12-01-2017 19:59
gewijzigd op 12-01-2017 20:09
4.909 views
Beste,
Bij het correct invullen van het contactformulier zou ik de klant willen doorsturen naar een bedankingspagina. (zo kan ik ook een doel instellen via Google Analytics).
Dit lukt me voorlopig niet. Contactformulier waarmee ik werk stuurt nu een echo berichtje bij het al dan niet correct invullen. Het doorsturen naar een bedankingspagina lukt me niet, heb al geprobeerd met header('Location: http://www.mijnsite.be/bedankt.html';); zonder succes.
contact.php:
<?php
if($_POST) {
$to = "[email protected]"; // Your email here
$subject = 'Bericht verstuurd van mijn site'; // Subject message here
}
//Send mail function
function send_mail($to,$subject,$message,$headers){
if(@mail($to,$subject,$message,$headers)){
header('Location: http://www.mijnsite.be/bedankt.html');
exit();
} else {
echo json_encode(array('info' => 'error', 'msg' => "Uw bericht is niet verzonden. Er is iets verkeerd gegaan. Probeer het nog eens."));
}
}
//Check e-mail validation
function check_email($email){
if(!preg_match("/^[_.\da-z-]+@[a-z\d][a-z\d-]+\.+[a-z]{2,6}$/i", $email)) {
return false;
} else {
return true;
}
}
//Get post data
if(isset($_POST['name']) and isset($_POST['mail']) and isset($_POST['onderwerp']) and isset($_POST['comment'])){
$name = $_POST['name'];
$mail = $_POST['mail'];
$onderwerp = $_POST['onderwerp'];
$website = $_POST['website'];
$comment = $_POST['comment'];
if($name == '') {
echo json_encode(array('info' => 'error', 'msg' => "Gelieve uw naam in te vullen."));
exit();
} else if($mail == '' or check_email($mail) == false){
echo json_encode(array('info' => 'error', 'msg' => "Gelieve een geldig emailadres in te vullen."));
exit();
} else if($onderwerp == ''){
echo json_encode(array('info' => 'error', 'msg' => "Gelieve uw onderwerp in te vullen."));
exit();
} else if($comment == ''){
echo json_encode(array('info' => 'error', 'msg' => "Gelieve uw bericht in te vullen."));
exit();
} else {
//Send Mail
$headers = 'From: ' . $mail .''. "\r\n".
'Reply-To: '.$mail.'' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
send_mail($to, $subject, $comment . "\r\n\n" .'Naam: '.$name. "\r\n" .'Onderwerp: '.$onderwerp. "\r\n" .'Email: '.$mail, $headers);
}
} else {
echo json_encode(array('info' => 'error', 'msg' => "Gelieve alle velden in te vullen."));
}
?>
Met die location-header is niks mis. De vraag is eigenlijk wat er niet aan werkt?
Zet de errors eens aan als die nog niet aan staan, en voet het eens uit?
Het enige wat er fout kan zijn is dat er HTML of witruimte voor je PHP-code zou staan. Maar zonder foutmeldingen is het nu nog gissen.
<?php
if(isset($_POST['name']) and isset($_POST['mail']) and isset($_POST['onderwerp']) and isset($_POST['comment'])){
?>
kan korter:
<?php
if(isset($_POST['name'],$_POST['mail'],$_POST['onderwerp'],$_POST['comment'])){
?>
$_POST['website'] => ik zie geen name="website" in het formulier.
Hoe zet ik die errors aan? Ik vind via phpinfo.php de versie 7.0.13 en waar het ini bestand staat, usr/local/php70/lib/php.ini, maar waar kan ik dit precies terug vinden? Moet ik hiervoor naar controlpanel / hosting kijken? Ini bestand zit niet in mijn mapje waar mijn website staat. Ik heb ook de display errors in mijn php bestand ingevuld, maar geen reactie te zien.
Ik heb de code aangepast en opgefrist, maar nog altijd geen actie bij het invullen van het mailform, zelfs de foutmeldingen bij het niet volledig invullen krijg ik niet te zien...
<?php
ini_set('display_errors', 'On');
ini_set('display_startup_errors', 'On');
error_reporting(E_ALL);
if($_POST) {
$to = "[email protected]"; // Your email here
$subject = 'Bericht verstuurd van mijn site'; // Subject message here
}
//Send mail function
function send_mail($to,$subject,$message,$headers){
if(@mail($to,$subject,$message,$headers)){
header('Location: http://www.mijnsite.be/bedankt.html';);
exit();
} else {
echo json_encode(array('info' => 'error', 'msg' => "Uw bericht is niet verzonden. Er is iets verkeerd gegaan. Probeer het nog eens."));
}
}
//Check e-mail validation
function check_email($email){
if(!preg_match("/^[_.\da-z-]+@[a-z\d][a-z\d-]+\.+[a-z]{2,6}$/i", $email)) {
return false;
} else {
return true;
}
}
//Get post data
if(isset($_POST['name'],$_POST['mail'],$_POST['onderwerp'],$_POST['comment'])){
$name = $_POST['name'];
$mail = $_POST['mail'];
$onderwerp = $_POST['onderwerp'];
$comment = $_POST['comment'];
if($name == '') {
echo json_encode(array('info' => 'error', 'msg' => "Gelieve uw naam in te vullen."));
exit();
} else if($mail == '' or check_email($mail) == false){
echo json_encode(array('info' => 'error', 'msg' => "Gelieve een geldig emailadres in te vullen."));
exit();
} else if($onderwerp == ''){
echo json_encode(array('info' => 'error', 'msg' => "Gelieve uw onderwerp in te vullen."));
exit();
} else if($comment == ''){
echo json_encode(array('info' => 'error', 'msg' => "Gelieve uw bericht in te vullen."));
exit();
} else {
//Send Mail
$headers = 'From: <' . $mail . '>' . "\r\n";
'Reply-To: ' . $name . ' <' .$mail. '>' . "\r\n";
'X-Mailer: PHP/' . phpversion() . "\r\n";
Met jouw ini_set's kan je dit voor jouw script aanzetten.
Ik vind via phpinfo.php de versie 7.0.13 en waar het ini bestand staat, usr/local/php70/lib/php.ini, maar waar kan ik dit precies terug vinden? Moet ik hiervoor naar controlpanel / hosting kijken? Ini bestand zit niet in mijn mapje waar mijn website staat.
Die genoemde locatie is alleen bereikbaar als je beheerder over de server bent, daar staan de globale instellingen van PHP over de hele server voor PHP 7 ingesteld. Als je shared-hosting hebt of geen beheerdersrechten hebt, dan kan je met .htaccess ook je error-reporting aan en uit zetten. Soms moet dit met aparte ini-bestanden, maar dat wordt dan wel duidelijk gemaakt in phpinfo() waarin staat in welke directories van jouw onder de 'additional directories' voor ini-files. In het eerste grote blokje staat dat daar vermeld.
Ik heb ook de display errors in mijn php bestand ingevuld, maar geen reactie te zien.
Roep het bestand wat alles verwerkt eens handmatig aan. Wat gebeurt er dan?
De vraag is eigenlijk of er echt wel een fout in de PHP-code zit die het uitvoeren verhindert. Als de opbouw okee is en er zit een fout in de structuur omdat er een variabele vergeten is, waarbij hij op een 'false' uitkomt, dan is dat iets wat je niet kan aanrekenen tot een fout die PHP zelf zal aangeven.
[size=xsmall]Toevoeging op 13/01/2017 11:38:42:[/size]
{"info":"error","msg":"Gelieve alle velden in te vullen."}
dan post je dus kennelijk niet alle velden?
Als ajax: je wilt niet de aanroeper van het huidige script (een javascript ajax proces) door verwijzen naar bedankt.html, maar de pagina waarin je de ajax call doet.
Ik heb eens alle files in js map doorlopen en vond dit terug. Wordt dus via Ajax aangeroepen. Wat dien ik te wijzigen zodat de foutmeldingen wel tevoorschijn komen na het invullen van het contactformulier, en bij correct invullen men doorverwezen wordt naar bedankingspagina. Het is ook zo dat er meerdere contactforms zijn op de site, en meerdere bedankingspagina's.