Goedenavond,

Ik ben al een tijdje bezig met een offerte formulier. Ik krijg het maar niet werkend.
Verder heb ik ook nog niet zoveel ervaring met PHP. Het formulier reageert nergens op bij het klikken op de submit button.
Alle variabelen zijn benoemd.
Alvast hartelijk dankt voor de hulp/uitleg.

Groeten Gabriela




<?php
if(!isset($_POST['submit']))
 {


$company =  $_POST['companyname'];
$name = $_POST['name'];
$visitor_email = $_POST['email'];
$travelers =  $_POST['persons'];
$bagage =  $_POST['luggage'];
$departaddress =  $_POST['depart'];
$datedepart =  $_POST['departdate'];
$dephour =  $_POST['departhour'];
$depminute =  $_POST['departminute'];
$destinationaddress =  $_POST['destination'];
$datereturn =  $_POST['returndate'];
$rethour =  $_POST['returnhour'];
$retminute =  $_POST['returnminute'];
$extrastops =  $_POST['stops'];
$type =  $_POST['bustype'];
$message =  $_POST['comments'];
}

//Validate first
if(empty($name)||empty($visitor_email)) 
{
    echo "Naam en emailadres zijn verplicht!";
    exit;
}

if(IsInjected($visitor_email))
{
    echo "Ongeldige invoer";
    exit;
}

$email_from = '[email protected]';
$email_subject = "Offerte aanvraag";
$email_body = "Bedrijfsnaam:" .$companyname."\n". "Naam:" .$name."\n". "Email:" .$visitor_email."\n". "Aantal personen:" .$travelers. "\n"."Bagage:" .$bagage. "\n"."Vertrekadres:" .$departaddress. "\n"."Vertrekdatum:" .$datedepart. "\n". "Vertrek tijdstip:" .$dephour. "\n". "" .$depminute. "\n". "Bestemming:" .$destinationaddress. "\n". "Retourdatum:" .$datereturn. "\n". "Retour tijdstip:" .$rethour. "" .$retminute. "\n"."Extra stops:" .$extrastops. "\n". "Type bus:" .$type. "\n"."Bericht:" .$message"\n";
    
    
$to = "[email protected]";
$headers = "From: $email_from \r\n";
$headers = "Reply-To: $visitor_email \r\n";


mail($to,$email_subject,$email_body, $headers);

header('Location: bedankt.html');

function IsInjected($str)
{
  $injections = array('(\n+)',
              '(\r+)',
              '(\t+)',
              '(%0A+)',
              '(%0D+)',
              '(%08+)',
              '(%09+)'
              );
  $inject = join('|', $injections);
  $inject = "/$inject/i";
  if(preg_match($inject,$str))
    {
    return true;
  }
  else
    {
    return false;
  }
}
   
?> 




HTML form:


<form method="post" action="send_quotation.php" name="contactform" >
						<div id="message"></div>
						<div class="f-row">
							<div class="one-half">
								<label for="companyname">Bedrijfsnaam</label>
								<input type="text" name="companyname" id="companyname"  />
							</div>
							
							
							<div class="one-half">
								<label for="name">Voor- en achternaam</label>
								<input type="text" name="name" id="name" />
							</div>
			
								
						
							<div class="one-half">
								<label for="email">Emailadres</label>
								<input type="email" name="email" id="email" />
							</div>
					
		
							<div class="one-half">
								<label for="persons">Aantal reizigers</label>
								<input type="number" name="persons" id="persons" />
							</div>
							
							<div class="one-half">
								<label for="luggage">Aantal bagagestukken</label>
								<input type="number" name="luggage" id="luggage" />
							</div>
						</div>
									<hr>
									
						<div class="f-row">			
							<div class="full-width">
								<label for="depart">Vertrekadres</label>
								<input type="text" name="depart" id="depart" />
							</div>
							
							<div class="one-half">
								<label for="departdate">Datum vertrek</label>
								<input type="text" name="departdate" id="departdate" value=" dd-mm-jjjj" />
							</div>
							
							<div class="one-fourth" >
								<label for="departhour">Tijdstip vertrek</label>
								<select name="departhour" >
									<option> 00 </option>
									<option> 01 </option>
									<option> 02 </option>
									<option> 03 </option>
									<option> 04 </option>
									<option> 05 </option>
									<option> 06 </option>
									<option> 07 </option>
									<option> 08 </option>
									<option> 09 </option>
									<option> 10 </option>
									<option> 11 </option>
									<option> 12 </option>
									<option> 13 </option>
									<option> 14 </option>
									<option> 15 </option>
									<option> 16 </option>
									<option> 17 </option>
									<option> 18 </option>
									<option> 19 </option>
									<option> 20 </option>
									<option> 21 </option>
									<option> 22 </option>
									<option> 23 </option>
									
								</select>
							</div>
							<div class="one-fourth" >
							<label for="departminute"><br/></label>
								<select name="departminute" >
									<option> 00 </option>
									<option> 15 </option>
									<option> 30 </option>
									<option> 45 </option>
								</select>
							</div>
						</div>
						
						<hr>
						
						<div class="f-row">	
							<div class="full-width">
								<label for="destination">Bestemming</label>
								<input type="text" name="destination" id="destination" />
							</div>
							
							<div class="one-half">
								<label for="returndate">Datum terugreis</label>
								<input type="text" name="returndate" id="returndate" value=" dd-mm-jjjj" />
							</div>
							
							<div class="one-fourth" >
								<label for="returnhour">Tijdstip terugreis</label>
								<select name="returnhour" >
									<option> 00 </option>
									<option> 01 </option>
									<option> 02 </option>
									<option> 03 </option>
									<option> 04 </option>
									<option> 05 </option>
									<option> 06 </option>
									<option> 07 </option>
									<option> 08 </option>
									<option> 09 </option>
									<option> 10 </option>
									<option> 11 </option>
									<option> 12 </option>
									<option> 13 </option>
									<option> 14 </option>
									<option> 15 </option>
									<option> 16 </option>
									<option> 17 </option>
									<option> 18 </option>
									<option> 19 </option>
									<option> 20 </option>
									<option> 21 </option>
									<option> 22 </option>
									<option> 23 </option>
									
								</select>
							</div>
							<div class="one-fourth" >
							<label for="returnminute"><br/></label>
								<select name="returnminute">
									<option> 00 </option>
									<option> 15 </option>
									<option> 30 </option>
									<option> 45 </option>
								</select>
							</div>
						</div>
						
						<div class="f-row">	
							<div class="one-half">
								<label for="stops">Aantal tussenstops</label>
								<input type="text" name="stops" id="stops" />
							</div>
							
							<div class="one-half">
								<label for="bustype">Gewenste bustype</label>
								<select name"bustype">
									<option value="" selected> Maak uw keuze </option>
									<option value="max50" >Bus max 50 pers</option>
									<option value="vip29" > Vip bus max 30 pers</option>
								</select>
							</div>
						</div>
<hr>							
						
						<div class="f-row">
							<div class="full-width">
								<label for="comments">Extra informatie</i></label>
								<textarea placeholder="Benoem hier eventueel de extra tussenstops" name="comments" id="comments" >
								
								</textarea>
							</div>
						</div>
						<div class="f-row">
							<input type="submit" value="Verstuur" name="submit" class="btn color medium right" />
						</div>
					</form>
				</div>
Met die ! op regel twee kijk je of $_POST['submit'] niet bestaat, en dan pas maak je die variabelen aan.
Los van het feit dat deze werkwijze niet klopt, is het controleren van het versturen van het formulier en het aanmaken van variabelen ook erg onnodig. Die variabelen zouden immers al moeten bestaan, dus hoef je ze niet nogmaals aan te maken.

In je validatie gebruik je ook een exit; dit laat je script direct stoppen, en ik vraag me af of dat echt is wat je wilt? Als jij winkelt en je maakt een foutje door het verkeerde product uit het schap te halen, dan verlaat je ook niet de winkel, en handel je het juist af.

In korte lijnen zou ik het script als volgt oplossen:

[code]
<?php
if($_SERVER['REQUEST_METHOD']=="POST") {
// op dit moment is je formulier verstuurd via de POST-methode.
$errors = array(); // maak een array aan voor alle fouten in de validatie.
if(empty($_POST['name'])|| empty($_POST['email'])) {
$errors[] = "Naam en e-mailadres zijn verplicht!";
}

if(IsInjected($_POST['email'])) {
$errors[] = "Ongeldige invoer!";
}

if(count($errors)>0) {
// we hebben één of meer validatiefouten gevonden, loont ze allemaal in deze foreachlus.
foreach($errors as $error {
echo "Fout: ".$error."<br />";

}
} else {
// er zijn geen validatiefouten. Alles is goed.
// Hier kan je mailen, en kan je de $_POST-waardes gebruiken, zoals ik ze al eerder in dit script gebruik.
}
}
?>


Reageren