Door
Mohamed nvt
op 21-09-2022 23:21
gewijzigd op 21-09-2022 23:33
3.196 views
Wanneer ik onderstaand pagina oproep, dan krijg ik een wit pagina.
Er is blijkbaar een syntax fout,maar ik kan het niet vinden.
live voorbeeld: jocke-overwater.nl/contact.php
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// define variables and set to empty values
$vnaamErr = $anaamErr = $emailErr = "";
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (empty($_POST["voornaam"])) {
$vnaamErr = "Graag uw voornaam invullen";
} else {
$voornaam = test_input($_POST["voornaam"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z-' ]*$/",$voornaam)) {
$vnaamErr = "Uw voornaam mag alleen letters en spaties bevatten";
}
}
if (empty($_POST["achternaam"])) {
$anaamErr = "Graag uw achternaam invullen";
} else {
$achternaam = test_input($_POST["achternaam"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z-' ]*$/",$achternaam)) {
$anaamErr = "Uw achternaam mag alleen letters en spaties bevatten";
}
}
if (empty($_POST["mailadres"])) {
$emailErr = "Graag uw mailadres invullen";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Het formaat van het ingevoerde mailadres is niet correct";
}
}
$uwvraag = $_POST["mailadres"] ;
if (empty($vnaamErr && $anaamErr && $emailErr)) {
//mail versturen
$to = "Naar het mailadres";
$subject = "Mail afkomstig uit de website";
$body = "";
$body. = "Voornaam: " . $voornaam . "\r\n";
$body. = "Achternaam: " . $achternaam . "\r\n";
$body. = "Het mailadres: " . $voornaam . "\r\n";
$body. = "Uw vraag: " . $uwvraag. "\r\n";
$headers ="From: [email protected] \r\n";
$headers .="MIME-Version: 1.0" . "\r\n";
$headers .="Content-type:text/html;charset=UTF-8" . "\r\n";
if (mail($to,$subject,$body)) {
echo "bedankt voor uw mail. We nemen zsm contact met je op!";
} else {
echo "Mail niet verstuurd!";
}
} else {
echo "Er is iets mis gegaan met het contactformulier.";
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$page = "contact";
include "Inc/header.php";
?>
<div class="main">
<div class="formulier">
<h2>Contact formulier</h2><br/><br/>
<span>* verplichte velden</span><br/><br/>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
<label for="Voornaam">Voornaam</label><br />
<input type="text" id="voornaam" name="voornaam" value="<?php if (isset($_POST['voornaam']))echo htmlspecialchars($_POST['voornaam'], ENT_QUOTES); ?>" required><span>*</span><br /><br />
<label for="achternaam">Achternaam</label><br />
<input type="text" id="achternaam" name="achternaam" value="<?php if (isset($_POST['achternaam']))echo htmlspecialchars($_POST['achternaam'], ENT_QUOTES); ?>" required><span>*</span><br /><br />
<label for="Mailadres">Mailadres</label><br />
<input type="email" id="mailadres" name="mailadres" value="<?php if (isset($_POST['mailadres']))echo htmlspecialchars($_POST['mailadres'], ENT_QUOTES); ?>" required><span>*</span><br /><br />
</br>
<label for="uwvraag">Uw vraag:</label></br>
<textarea id="uwvraag" name="uwvraag" rows="4" cols="50"></textarea></br></br>
<input type="submit" value="Verzenden"> <input type="reset" value="Reset">
</form>
</div>
</div>
<?php
include "Inc/footer.php";
?>
?>
Roep vervolgens de pagina test.php aan in je browser. Ontvang je de mail nu wel? Dan zit de fout in de rest van je code. Ontvang je de mail nog steeds niet, dan gaat er iets fout met het versturen.
?>
Roep vervolgens de pagina test.php aan in je browser. Ontvang je de mail nu wel? Dan zit de fout in de rest van je code. Ontvang je de mail nog steeds niet, dan gaat er iets fout met het versturen.
Dit werkt WEL bij mijn eigen ISP, maar niet bij het hostingbedrijf waar jocke-overwater.nl wordt gehost.
Overigens, de gehele code van contact.php werkt ook niet bij mijn eigen ISP....
[quote="- Ariën - op 24/09/2022 13:22:16"]
Hoe ziet je errors array eruit?
Zoals hierboven regel 4 of wat bedoel je precies?
[/quote]
Ik heb het over hoe je array eruit ziet.
<?php
print_r($errors);
?>
En pas Ozzie's code aan naar dit:
if(mail($to,$subject,$message,$headers)) {
echo "Het is gelukt";
} else {
echo "Het is mislukt.";
}
?>
Dan zie je meteen of de mail() functie aangeroepen wordt.
Hoewel ikzelf toch liever phpMailer adviseer en dan via SMTP.
Dat werkt veel makkelijker, en is beter te debuggen omdat je dan meer controle hebt over de verbinding.
Bij Strato webhosting werkt bovenstaande wel, maar bij Hostnet, waar het domeinnaam Jocke-Overwater.nl wordt gehost, helaas niet.
[size=xsmall]Toevoeging op 25/09/2022 13:44:27:[/size]
- Ariën - op 25/09/2022 00:44:33
[quote="Mohamed nvt op 24/09/2022 23:27:53"]
[quote="- Ariën - op 24/09/2022 13:22:16"]
Hoe ziet je errors array eruit?
Zoals hierboven regel 4 of wat bedoel je precies?
[/quote]
Ik heb het over hoe je array eruit ziet.
<?php
print_r($errors);
?>
En pas Ozzie's code aan naar dit:
if(mail($to,$subject,$message,$headers)) {
echo "Het is gelukt";
} else {
echo "Het is mislukt.";
}
?>
Dan zie je meteen of de mail() functie aangeroepen wordt.
Hoewel ikzelf toch liever phpMailer adviseer en dan via SMTP.
Dat werkt veel makkelijker, en is beter te debuggen omdat je dan meer controle hebt over de verbinding.
[/quote]
Wanneer ik print_r ($errors) aanroep, dan is het leeg!
Ik doe dit nadat ik gecontroleerd heb of de inhoud van de errors array groter is dan een 0
if (count($errors) == 0) {
print_r($errors);
[size=xsmall]Toevoeging op 25/09/2022 13:45:51:[/size]
Ik heb een sterk vermoeden dat het probleem ligt aan Hostnet, waar het domeinnaam Jocke-overwater.nl wordt gehost, maar vreemd genoeg werkt de gehele code ook niet bij Strato..
Waar moet ik het zoeken denken jullie? Of vinden jullie dat ik perse moet overstappen naar PHPMailer?
Het probleem ligt niet bij je error-array.
Zelf raad ik aan om geen gebruik te krijgen van de mail()-functie en dus wel de SMTP-manier met phpMailer te gebruiken.
Het probleem ligt niet bij je error-array.
Zelf raad ik aan om geen gebruik te krijgen van de mail()-functie en dus wel de SMTP-manier met phpMailer te gebruiken.
Oke, dankjewel voor jouw advies en ik ga mij verder verdiepen in PHPMailer.
Vreemd genoeg werkt de mail() wel bij Strato webhosting.
Wat levert dit stukje op:
<?php
if(mail($to,$subject,$message,$headers)) {
echo "Het is gelukt";
} else {
echo "Het is mislukt.";
}
?>
zegt PHP dat het gelukt is of niet?
Dit zegt namelijk of PHP de mail aan een mailserver kon overhandigen. Zeg maar zoals je een brief in de brievenbus op de hoek van de straat gooit.
Daarna kunnen er nog 100 dingen fout gaan: De server kan zelf detecteren dat het mailadres van de afzender niet bestaat en daarom de mail droppen.
De ontvangende servers kunnen concluderen dat de hostnet mailserver niet bij de afzender hoort en daarom de mail niet accepteren. Of dat de Hostnet server een te grote spamrating heeft.
Kortom: je kunt meekijken tot de mailserver hem aanpakt. En met PHPMailer kun je eventueel net iets meer info krijgen. Maar dan nog zit er verschil tussen "de mail wordt niet aangemomen door de mailserver" "de mail wordt niet verstuurd" en "de mail komt niet aan bij de ontvanger".
Effectief zal hij in deze 3 gevallen inderdaad niet aankomen bij de ontvanger, maar het waarom en op welke plek is de zoektocht.