Ik heb met behulp van een template een website aan het maken, wat goed lukt.
De contact pagina werkt via een link naar een contact.php. Zie hieronder.
Als ik op de link klik krijg ik wel de melding "Uw bericht is correct verzonden!", maar ik ontvang geen mail.
Ik heb al wat rondgekeken hier, maar kan niet ontdekken waar het fout gaat.
(bij [email protected] vul ik mijn e-mail adres in)
Graag hulp.
M.vr.groeten
Adri
Ik heb met behulp van een template een website aan het maken, wat goed lukt.
De contact pagina werkt via een link naar een contact.php. Zie hieronder.
Als ik op de link klik krijg ik wel de melding "Uw bericht is correct verzonden!", maar ik ontvang geen mail.
Ik heb al wat rondgekeken hier, maar kan niet ontdekken waar het fout gaat.
(bij [email protected] vul ik mijn e-mail adres in)
Graag hulp.
M.vr.groeten
Adri
Er gaat een hoop mis met je script.
Zo is $_GET['uw_naam :'] niet correct. En waarom deze als onderwerp?
$_GET['e-mail: '] is dus ook onjuist.
$_GET['[email protected]'] kan ook niet.
Wat GET doet is de waarde uit je URL halen.
Bijvoorbeeld
URL: index.php?naam=Adri
Op index kun je de naam dan ophalen met $_GET['naam'].
Je mist een aantal headers en je controleert niet of het daadwerkelijk goed gaat.
Verdiep je eens even in de basis van PHP. Dan begrijp je wat GET en POST voor functie hebben en waarom je script niet gaat werken op deze manier.
Ik kan je het wel voordoen maar daar leer je ook niks van.
OK, ik begrijp inmiddels dat POST veiliger is omdat je met GET via de url de gegevens kunbt zien.
ik heb nu dit gemaakt, vul alle velden in, maar krijg toch het bericht "U heeft niet alle velden ingevuld" en ook geen mail. De velden komen overeen met die in het formulier.
<?php
if (!isset($_POST['naam']) || !isset($_POST['bedrijf']) ||!isset($_POST['telefoon']) ||!isset($_POST['email']) || !isset($_POST['bericht'])) {
echo 'U heeft niet alle velden ingevuld!';
exit;
}
$tijd = time();
$datum = strftime('%d/%m/%y %H:%M', $tijd);
$ip = getenv('REMOTE_ADDR');
$message = $naam.' met het e-mailadres '.$email.' en het IP '.$ip.' stuurde op '.$datum.' het volgende bericht:
____________________________________
'.$bericht.'
------------------------------------';
mail('[email protected]', 'Bericht van mail.nl', $message, 'From: '.$email);
echo 'Uw bericht is verzonden. U krijgt zo snel mogelijk antwoord.';
?>
!isset betekend niets meer dan 'is niet geset'. Dit betekent niet dat de velden ook daadwerkelijk gevuld zijn. Dit kun je controleren met if(trim($_POST['naam']) == '') of met strlen(). trim verwijdert spaties voor en achter de variabele. Hiermee controleer je dus een leeg veld, maar ook of het veld alleen een spatie bevat. In mijn ogen is strlen() (mogelijk in combinatie met trim) beter. Hiermee controleer je lengte van de variabele en kun je bijvoorbeeld eisen dat de naam minimaal 2 tekens moet zijn en het telefoon 10.
Om te controleren of een formulier wordt gepost doe je met if($_SERVER['REQUEST_METHOD'] == 'POST')
Probeer onderstaande code eens.
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['naam'],$_POST['bedrijf'],$_POST['telefoon'],$_POST['email'],$_POST['bericht'])) {
$naam = htmlspecialchars($_POST['naam']);
$bedrijf = htmlspecialchars($_POST['bedrijf']);
$email = htmlspecialchars($_POST['email']);
$bericht = htmlspecialchars($_POST['bericht']);
$tijd = time();
$datum = strftime('%d/%m/%y %H:%M', $tijd);
$ip = getenv('REMOTE_ADDR');
$message = $naam.' met het e-mailadres '.$email.' en het IP '.$ip.' stuurde op '.$datum.' het volgende bericht:
____________________________________
'.$bericht.'
------------------------------------';
if(mail('[email protected]', 'Bericht van mail.nl', $message, 'From: '.$email)) {
echo 'Uw bericht is verzonden. U krijgt zo snel mogelijk antwoord.';
} else {
echo 'Uw bericht kon niet worden verzonden. Probeer het later eens.';
}
} else {
echo 'Er is iets fout gegaan';
}
}
?>
<form method="POST">
<label>Naam</label>
<input type="text" name="naam" /><br />
<label>Bedrijf</label>
<input type="text" name="bedrijf" /><br />
<label>Telefoonnummer</label>
<input type="tel" name="telefoon" /><br />
<label>E-mailadres</label>
<input type="email" name="email" /><br />
<label>Bericht</label>
<textarea name="bericht"></textarea>
<button>Verzenden</button>
</form>
Het bericht wordt nu keurig verzonden.
Onder de tekst "Uw bericht is verzonden. U krijgt zo snel mogelijk antwoord." verschijnt nu weer het (niet opgemaakte) formulier.
Ik zou willen dat dat niet gebeurt, maar dat er weer teruggegaan wordt naar contact.html
Hoe krijg ik dat nog voor elkaar.
[size=xsmall]Toevoeging op 18/03/2014 18:19:08:[/size]
Toch zou het het mooist zijn als ik de template kan blijven gebruiken:
de HTML code daarvan is en de bedleoing is dat als ik op send klik het ingevulde formulier wordt verstuurd.
Met de code van Michael krijg ik dat niet voor elkaar.
Formulier in een table is nou niet de juiste manier van opmaak te noemen.
Maar goed. Volgens mij is je template 'contact.html' ? Hierin kun je geen PHP gebruiken.
De enige optie is dan, zoals je nou al doet, verwijzen naar contact.php, met het gevolg dat je op een andere pagina komt. De pagina even aanroepen en toch op de html pagina blijven kan alleen met Javascript, maar dat lijkt me nou nog een stap te ver voor je?
Waarom wil je je vasthouden aan het template? Is dit niet om te zetten naar contact.php? (Hernoemen en links verwijzen naar de php pagina).
Ik heb contact.html hernoemd naar contact.php en daar je code in gezet. De tabel is nu dus vervangen door het formulier.
Na invullen en verzenden blijf ik keurig op de pagina, maar er gebeurt niets.
Ik krijg geen mail. De code is nu als volgt:
Wat bedoel je met 'er gebeurt niets'?
Krijg je ook niet de melding of de mail wel of niet verzonden is?
Het is soms ook handig om foutmeldingen weer te geven. Dit doe je door de volgende code op de eerste regels te zetten
<?php
error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
?>