PHP contact formulier, bericht als het is verzonden

Status
Niet open voor verdere reacties.

FlowerDusty

Gebruiker
Lid geworden
4 jan 2009
Berichten
113
Hallo,

ik heb een eigen portfolio website met een contact formulier. Het werkt verder allemaal prima, alleen als je de gegevens hebt ingevuld en op ''verzenden'' klikt, ga je naar een blanco pagina en daar staat dan ''Het bericht is succesvol verzonden!''. Dan ben je dus in principe van mijn website af, of je moet in de browser op de terug knop drukken om weer op mijn website terecht te komen. Ik vind het zelf wat omslachtig, ik zou liever hebben dat er een klein pop upje komt te staan met ''Het bericht is succesvol verzonden!'' waarna je met een kruisje of iets dergelijks het venstertje kan sluiten of iets dat je automatisch terugkeert naar de website (desnoods met een ''klik hier om terug te keren naar de website'' of iets in die trant..). Nou heb ik amper kennis van PHP en ik hoop dat hier iemand een simpele oplossing weet door misschien enkel het script wat aan te passen?

Dit is gewoon mijn formulier (contact.html)
HTML:
<div id="DivContact">
<form method="post" action="formulierverzenden.php">
  <br />
  Voornaam *<br />
  <input name="voornaam" type="text" size="40" />
	  <br />
	  <br />
	  Achternaam *<br />
	  <input name="achternaam" type="text" size="40" />
	  <br />
	  <br />
	  E-mail adres *<br />
	  <input name="email" type="text" size="40" />
	  <br />
	  <br />
      Bericht *
      <br />
      <textarea cols="40" rows="12" name="bericht"></textarea>
      <br />
      <br />
      <input type="submit" name="versturen" value="Verstuur bericht" />
      <input type="reset" value="Begin opnieuw" />
      <h5>Alle velden gemarkeerd met een * zijn verplicht.</h5>  
</form>
</div>

en dit is het PHP script (formulierverzenden.php)
PHP:
<?php
$naar = 'marjolijndevries03@gmail.com'; // Waar moet het naartoe?
$onderwerp = 'Contactformulier (marjolijndevries.nl)'; // Het onderwerp van het bericht
 
// Header instellen, zodat nl2br() werkt
$headers = "MIME-version: 1.0\r\n"; 
$headers .= "content-type: text/html;charset=utf-8\r\n";
 
if(isset($_POST['versturen'])) // Als het formulier verzonden is door op de verzend knop te klikken
{
	$voornaam = trim($_POST['voornaam']); // Alle overbodige spaties uit het voornaam veld verwijderen
	$achternaam = trim($_POST['achternaam']); // Alle overbodige spaties uit het achternaam veld verwijderen
	$email = trim($_POST['email']); // Alle overbodige spaties uit het email veld verwijderen
	$bericht = trim($_POST['bericht']); // Alle overbodige spaties uit het bericht veld verwijderen
	$fout = false; // Om te kijken straks of er wat fout is
 
	if(empty($voornaam)) // Als het voornaam veld niet is ingevuld
	{
		print '<p>Helaas, het voornaam veld is verplicht maar is nu niet ingevuld!</p>';
		$fout = true; // Zorgen dat het script zometeen weet dat er wat fout is
	}
	if(empty($achternaam)) // Als het achternaam veld niet is ingevuld
	{
		print '<p>Helaas, het achternaam veld is verplicht maar is nu niet ingevuld!</p>';
		$fout = true; 
	}
	if(empty($email)) // Als het email veld niet is ingevuld
	{
		print '<p>Helaas, het email veld is verplicht maar is nu niet ingevuld!</p>';
		$fout = true;
	}
	if(!filter_var($email, FILTER_VALIDATE_EMAIL)) // Als het email adres niet correct is
	{
		print '<p>Helaas, het email adres is niet correct!</p>';
		$fout = true;
	}
	if(empty($bericht)) // Als het bericht veld niet is ingevuld
	{
		print '<p>Helaas, het bericht veld is verplicht maar is nu niet ingvuld!</p>';
		$fout = true;
	}
 
	if($fout == false) // Als er niks fout is (alles is dus netjes ingevuld)
	{
		$headers .= 'From: ' . $voornaam . ' ' . $achternaam . '<' . $email . '>'; // Een afzender instellen zodat je kan reageren.
 
		if(mail($naar, $onderwerp, nl2br($bericht), $headers))
		{
			print '<p>Het bericht is succesvol verzonden!</p>';
		}
		else
		{
			print '<p>Helaas, er is wat fout gegaan tijdens het verzenden van het formulier.</p>';
		}
	}
}
?>
 
Je zou d.m.v. jquery ervoor kunnen zorgen dat het formulier verzonden wordt, zonder naar een nieuwe pagina te gaan. Dus dan komt op dezelfde pagina de uitwerking van het script te staan.

Is dat wat je wilt?
 
Ja, in ieder geval dat er geen nieuwe pagina voor het verzenden wordt geopend. Heb alleen geen kennis/ervaring met jQuery hoe gaat dat in zijn werk? En is het eenvoudig om dit voor elkaar te krijgen?
 
Als jij het zou kunnen doen graag. Heb zelf even wat geprobeerd maar dan krijg ik alsnog een nieuwe pagina..
 
Prima hoor,

Plak dit tussen je head tags:
HTML:
	<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
	<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
    <script type="text/javascript">
	$(document).ready(function(){
		$("#myform").validate({
			debug: false,
			submitHandler: function(form) {
				// do other stuff for a valid form
				$.post('formulierverzenden.php', $("#myform").serialize(), function(data) {
					$('#results').html(data);
				});
			}
		});
	});
	</script>
	<style>
	label.error { width: 250px; display: inline; color: red;}
	</style>

En dit tussen je body tags:
HTML:
<div id="DivContact">
<form method="post" action="" id="myform">
  <br />
  Voornaam *<br />
  <input name="voornaam" type="text" size="40" />
      <br />
      <br />
      Achternaam *<br />
      <input name="achternaam" type="text" size="40" />
      <br />
      <br />
      E-mail adres *<br />
      <input name="email" type="text" size="40" />
      <br />
      <br />
      Bericht *
      <br />
      <textarea cols="40" rows="12" name="bericht"></textarea>
      <br />
      <br />
      <input type="submit" name="versturen" value="Verstuur bericht" />
      <input type="reset" value="Begin opnieuw" />
      <h5>Alle velden gemarkeerd met een * zijn verplicht.</h5>  
</form>
</div>
<!-- We will output the results from process.php here -->
<div id="results"><div>

En formulierverzenden.php blijft gewoon gelijk.

Als het nog steeds niet goed gaat, even melden :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan