mail formulier controleren en verzend met extern php bestand

Status
Niet open voor verdere reacties.

MarcelDJ81

Gebruiker
Lid geworden
9 feb 2010
Berichten
38
Ik heb een formulier. wat ik wil controleren of verplichte velden ingevuld zijn, waarna het verzonden moet worden, naar mij en die gene die het formulier ingevuld heeft. Ik ben al aan het proberen geweest maar ik weet het niet meer.
Dit is het formulier:
HTML:
<form action="Res/mail.php" method="post">
   <fieldset class="alignleft">
				<h3 class="ff2 fs12 fc2">Afspraak gegevens</h3>
				<ul>
					<li>
						<label class="ff2 fs10 fc2" for="ddlSoortOnderhoud">Soort afspraak *</label>
						<select id="ddlSoortOnderhoud" name="ddlSoortOnderhoud">
							<option value="niet ingevuld">-- Selecteer soort afspraak</option>
							<option value="APK">APK</option>
							<option value="kleine beurt">Kleine beurt</option>
							<option value="grote beurt">Grote beurt</option>
							<option value="kleine beurt met APK">Kleine beurt + APK</option>
							<option value="grote beurt met APK">Grote beurt + APK</option>
						</select>
					</li>
					<li>
						<label class="ff2 fs10 fc2" for="ddlAfspraakmaand">Gewenste datum *</label>
						<select id="ddlAfspraakmaand" name="ddlAfspraakmaand" class="datum_maand">
							<option value="niet ingevuld">maand</option>
							<option value="januari">Januari</option>
							<option value="februari">Februari</option>
							<option value="maart">Maart</option>
							<option value="april">April</option>
							<option value="mei">Mei</option>
							<option value="juni">Juni</option>
							<option value="juli">Juli</option>
							<option value="augustus">Augustus</option>
							<option value="september">September</option>
							<option value="oktober">Oktober</option>
							<option value="november">November</option>
							<option value="december">December</option>
						</select>
						<select id="ddlAfspraakdag" name="ddlAfspraakdag" class="datum_dag">
							<option value="niet ingevuld">dag</option>
							<option value="1">1</option>
							<option value="2">2</option>
							<option value="3">3</option>
							<option value="4">4</option>
							<option value="5">5</option>
							<option value="6">6</option>
							<option value="7">7</option>
							<option value="8">8</option>
							<option value="9">9</option>
							<option value="10">10</option>
							<option value="11">11</option>
							<option value="12">12</option>
							<option value="13">13</option>
							<option value="14">14</option>
							<option value="15">15</option>
							<option value="16">16</option>
							<option value="17">17</option>
							<option value="18">18</option>
							<option value="19">19</option>
							<option value="20">20</option>
							<option value="21">21</option>
							<option value="22">22</option>
							<option value="23">23</option>
							<option value="24">24</option>
							<option value="25">25</option>
							<option value="26">26</option>
							<option value="27">27</option>
							<option value="28">28</option>
							<option value="29">29</option>
							<option value="30">30</option>
							<option value="31">31</option>
						</select>
					</li>
					</ul>
					<div class="clear"></div>
					<h3 class="ff2 fs12 fc2">Autogegevens</h3>
					<ul>
					<li><label class="ff2 fs10 fc2" class="ff2 fs10 fc2" for="txtMerk">Merk *</label><input type="text" id="txtMerk" name="txtMerk"/></li>
					<li><label class="ff2 fs10 fc2" for="txtModel">Model/type *</label><input type="text" id="txtModel" name="txtModel" /></li>
					<li><label class="ff2 fs10 fc2" for="txtBouwjaar">Bouwjaar</label><input type="text" id="txtBouwjaar" name="txtBouwjaar" /></li>
					<li><label class="ff2 fs10 fc2" for="txtKmstand">Kilometerstand</label><input type="text" id="txtKmstand" name="txtKmstand" /></li>
					<li>
						<label class="ff2 fs10 fc2" for="ddlApkmaand">APK verloopdatum</label>
						<select id="ddlApkmaand" name="ddlApkmaand" class="datum_maand">
							<option value="niet ingevuld">maand</option>
							<option value="januari">Januari</option>
							<option value="februari">Februari</option>
							<option value="maart">Maart</option>
							<option value="april">April</option>
							<option value="mei">Mei</option>
							<option value="juni">Juni</option>
							<option value="juli">Juli</option>
							<option value="augustus">Augustus</option>
							<option value="september">September</option>
							<option value="oktober">Oktober</option>
							<option value="november">November</option>
							<option value="december">December</option>
						</select>
						<select id="ddlApkJaar" name="ddlApkJaar" class="datum_jaar">
							<option value="niet ingevuld">jaar</option>
							<option value="2013">2013</option>
							<option value="2014">2014</option> 
							<option value="2015">2015</option>
						</select>
					</li>
				</ul>
				<div class="clear"></div>
				<div id="errorbox"></div>
			</fieldset>			
			<fieldset class='alignright'>
				<h3 class="ff2 fs12 fc2">Uw gegevens</h3>
				<ul>
					<li><label class="ff2 fs10 fc2" for="txtNaam">Naam *</label><input type="text" id="txtNaam" name="txtNaam"  /></li>
					<li><label class="ff2 fs10 fc2" for="txtAdres">Adres</label><input type="text" id="txtAdres" name="txtAdres" /></li>
					<li><label class="ff2 fs10 fc2" for="txtPostcode">Postcode</label><input type="text" id="txtPostcode" name="txtPostcode" class="postcode"/></li>
					<li><label class="ff2 fs10 fc2" for="txtWoonplaats">Woonplaats</label><input type="text" id="txtWoonplaats" name="txtWoonplaats" /></li>
					<li><label class="ff2 fs10 fc2" for="txtTelefoon">Telefoon *</label><input type="text" id="txtTelefoon" name="txtTelefoon" class="telefoon"/></li>
					<li><label class="ff2 fs10 fc2" for="txtEmail">E-mail *</label><input type="text" id="txtEmail" name="txtEmail"  /></li>
					<li><label class="ff2 fs10 fc2" for="txtExtra">Extra's en/of bijzonderheden</label><textarea id="txtExtra" name="txtExtra" rows="6"></textarea></li>
					<li><input type="submit" id="submitButton" name="submitButton" value="Verzend formulier" /></li>
					<small>Velden gemarkeerd met * zijn verplicht</small>
				</ul>
			</fieldset>
</form>

Het script wat ik wil gebruiken om te verzenden:

PHP:
 <?
	// field validation
if ( $ddlSoortOnderhoud=="" || $ddlAfspraakdag=="" || $ddlAfspraakmaand=="" || $txtMerk=="" || $txtModel=="" || $txtNaam=="" || $txtTelefoon=="" || $txtEmail=="")

{
	print "<p><a href=\"javascript&amp;#058;history.back()\">Probeer opnieuw</a>.<br /><br /></p>"
}

$message = "
<p class="ff2 fs17 fc2">Onderhouds verzoek:</p>
=============================
<p class="ff2 fs14 fc2">Afspraakgegevens:</p><br />
<p class="ff2 fs12 fc2">
Soort Afspraak: $ddlSoortOnderhoud
Gewenste Datum: $ddlAfspraakdag / $ddlAfspraakmaand
</p>
<br />
<br />
<p class="ff2 fs14 fc2">Contact gegevens:</p><br />
<p class="ff2 fs12 fc2">
Naam: $txtNaam
Adres: $txtAdres
Postcode: $txtPostcode
Plaats: $txtWoonplaats
Telefoon: $txtTelefoon
E-Mail: $txtEmail
<br />
Bijzonderheden:
$txtExtra
</p>
<br />
<br />
<p class="ff2 fs14 fc2">Gegevens voertuig:</p><br />
<p class="ff2 fs12 fc2">
Merk: $txtMerk
Model: $txtModel
Bouwjaar: $txtBouwjaar
Kilometerstand: $txtKmstand
Vervaldatum APK: $ddlApkmaand / $ddlApkJaar
</p>
";

$mailFrom = "$mail";
$mailTo = "mijn email" "$txtEmail";    
$msgSubject = "Verzoek tot onderhoud"; 
$msgBody = "$message"; 
$xHeaders = "From: $mail\nX-Mailer: PHP/" . phpversion();
ini_set(sendmail_from, "$mail");
mail ($mailTo, $msgSubject, $msgBody, $xHeaders);
ini_restore;
?>

Kan iemand mij helpen?
 
Dit is dan mijn verzendmail. Maar ik denk dat je hier een goed voorbeeld aan heb.

PHP:
if ( isset($_GET['submitButton']) )  
								{
									// Alles is ingevuld, de mail kan verstuurd worden
									$to = 'mail@mail.com';
									$onderwerp = 'test';
									$bericht   = "<html><body>";
									$bericht  .= "<table rules='all' style='border-color: red;' cellpadding='10'>";
									$bericht  .= "<tr><td>Status: </td><td>".($_GET['status']). "</td></tr>";
									$bericht  .= "<tr><td>Reason: </td><td>".($_GET['reason']). "</td></tr>";
									$bericht  .= "<tr><td>Explanation: </td><td>".($_GET['data']). "</td></tr>";
									$bericht  .= "<tr><td>Country name: </td><td>".($_GET['country_name']). "</td></tr>";
									$bericht  .= "<tr><td>Site name: </td><td>".($_GET['site_name']). "</td></tr>";
									$bericht  .= "<tr><td>Server name: </td><td>";
									for($i=0; $i < count($checked); $i++)
									{
										if ($i)
										{
											$bericht.=", ";
										}
										else
										{
											$bericht.=" ";
										}
										$bericht.=$checked[$i];
									}   "</td></tr>";
									$bericht  .= "<tr><td>Start down time: </td><td>".($_GET['startDate']). "</td></tr>";
									$bericht  .= "<tr><td>End down time: </td><td>".($_GET['endDate']). "</td></tr>";
									$bericht  .= "<tr><td>Exception: </td><td>".($_GET['exception']). "</td></tr>";
									$bericht  .= "<tr><td>Request ID: </td><td>".($_GET['request_id']). "</td></tr>";
									$bericht  .= "<tr><td>Name: </td><td>".($_GET['hostname']). "</td></tr>";
									$bericht  .= "<tr><td>Phone number: </td><td>".($_GET['phone']). "</td></tr>";
									$bericht  .= "<tr><td>Email: </td><td>".($_GET['email']). "</td></tr>";
									$bericht  .= "<tr><td>Extra information: </td><td>".($_GET['information']). "</td></tr>";
									$bericht  .= "</table>";
									$bericht  .=  getUrl();
									$bericht  .= "</body></html>";
									$headers   = 'MIME-Version: 1.0' . "\r\n";
									$headers  .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
									$headers  .= "From: ".htmlspecialchars($_GET['email'])."\r\n";
									$headers  .= "CC: ".htmlspecialchars($_GET['email'])."\r\n";
										
									mail($to, $onderwerp, $bericht, $headers);
									
									echo "Dank je wel, uw emailbericht is verstuurd.";
								}
 
Bedankt Royzilla,

Zou je misschien ook de code van je formulier erbij willen zetten. Zodat ik kan zien waar de veldnamen vandaan komen. Dan kan ik hem beter lezen stom he
 
Dit is dan mijn verzendmail. Maar ik denk dat je hier een goed voorbeeld aan heb.

Een formulier verzenden via $_GET-variabelen? Lijkt mij niet echt een goed voorbeeld.

Controleren of een formulier is verzonden doe je altijd op deze manier:
PHP:
if($_SERVER['REQUEST_METHOD'] == "POST") {

}
Dan controleer je tenminste de methode en niet alleen of een formulier-veld bestaat. ;)

Verder zul je binnen dat statement je checks gaan doen. Het makkelijkste is om een array bij te gaan houden met fouten
PHP:
if($_SERVER['REQUEST_METHOD'] == "POST") {
    $errors = array();
}
Vervolgens ga je per veld dat je wilt controleren een statement opbouwen. Het is raadzaam om opties welke leeg kunnen zijn ook een lege waarde te geven in je formulier.

Dit:
HTML:
<select id="ddlSoortOnderhoud" name="ddlSoortOnderhoud">
    <option value="niet ingevuld">-- Selecteer soort afspraak</option>
    <option value="APK">APK</option>
    <option value="kleine beurt">Kleine beurt</option>
    <option value="grote beurt">Grote beurt</option>
    <option value="kleine beurt met APK">Kleine beurt + APK</option>
    <option value="grote beurt met APK">Grote beurt + APK</option>
</select>
Wordt dan dus dit:
HTML:
<select id="ddlSoortOnderhoud" name="ddlSoortOnderhoud">
    <option value="">-- Selecteer soort afspraak</option>
    <option value="APK">APK</option>
    <option value="kleine beurt">Kleine beurt</option>
    <option value="grote beurt">Grote beurt</option>
    <option value="kleine beurt met APK">Kleine beurt + APK</option>
    <option value="grote beurt met APK">Grote beurt + APK</option>
</select>

In de afhandeling wordt dit dan de controle:
PHP:
if($_SERVER['REQUEST_METHOD'] == "POST") {
    $errors = array();
    
    if($_POST['ddlSoortOnderhoud'] === '') {
        $errors[] = "Er dient een type afspraak op te worden gegeven.";
    }
}

Probeer deze opzet eens in te gaan vullen:
PHP:
if($_SERVER['REQUEST_METHOD'] == "POST") {
    $errors = array();
    
    if($_POST['ddlSoortOnderhoud'] === '') {
        $errors[] = "Er dient een type afspraak op te worden gegeven.";
    }
    
    // Overige velden controleren
    
    // Controleren of er fouten zijn gevonden
    if(sizeof($errors) > 0 ) {
        // Melding geven dat er fouten zijn gevonden.
    // Geen fouten gevonden
    } else {
        // Mail opstellen
    }
}

Wil je weten welke velden er vanuit een formulier meegestuurd worden kun je de globale variabele $_POST echoën.
PHP:
var_dump($_POST);
// of
print_r($_POST);
 
Laatst bewerkt:
Tha Devil,

Ik ben er mee aan de gang gegaan. Ik krijg wanneer ik hem uitvoer een wit scherm.
PHP:
   <?
	if($_SERVER['REQUEST_METHOD'] == "POST") {
    $errors = array();
    
    if($_POST['ddlSoortOnderhoud'] === '') {
        $errors[] = "Er dient een type afspraak op te worden gegeven."
    }
    if ($_POST['ddlAfspraakmaand'] === '') {
		$errors[] = "U heeft de datum van de afspraak niet of onvolledig ingevuld."
	}
	if ($_POST['ddlAfspraakdag'] === '') {
		$errors[] = "U heeft de datum van de afspraak niet of onvolledig ingevuld."
	}
	
    // Overige velden controleren
    if ($_POST['txtMerk'] === '') {
		$errors[] = "Het merk van uw auto is niet ingevuld."
	}
	if ($_POST['txtModel'] === '') {
		$errors[] = "Het type/model van uw auto is niet ingevuld."
	}
	if ($_POST['txtNaam'] === '') {
		$errors[] = "u bent uw naam vergeten in te vullen."
	}
	if ($_POST['txtTelefoon'] === '') {
		$errors[] = "Uw telefoonnummer is niet ingevuld."
	}
	if ($_POST['txtEmail'] === '') {
		$errors[] = "Uw emailadres is niet ingevuld."
	}
	
	
    // Controleren of er fouten zijn gevonden
    if(sizeof($errors) > 0 ) {
        // Melding geven dat er fouten zijn gevonden.
    // Geen fouten gevonden
    } else {
        // Mail opstellen
				$to  = 'aaaaaaaa@home.nl';
		    	$onderwerp = 'onderhoudsverzoek';
				$bericht   = "<html><body>";
			    $bericht  .= "<table rules='all' class='ff2 fs10 fc2' cellpadding='10'>";
                $bericht  .= "<tr class='ff2 fs14 fc2' ><td>Verzoek tot onderhoud: </td>/tr>";
                $bericht  .= "<tr class='ff2 fs14 fc2' ><td>$nbsp;</td>/tr>";
				$bericht  .= "<tr class='ff2 fs12 fc2' ><td>Afspraakgegevens: </td>/tr>";
                $bericht  .= "<tr><td>Type afspraak: </td><td>".($_POST['ddlSoortOnderhoud']). "</td></tr>";
				$bericht  .= "<tr><td>Type afspraak: </td><td>".($_POST['ddlAfspraakdag'])." / ".($_POST['dllAfspraakmaand']). "</td></tr>";
                $bericht  .= "<tr class='ff2 fs14 fc2' ><td>&nbsp; </td>/tr>";				
                $bericht  .= "<tr class='ff2 fs12 fc2' ><td>Voertuiggegevens: </td>/tr>";				
				$bericht  .= "<tr><td>Merk voertuig: </td><td>".($_POST['txtMerk']). "</td></tr>";
				$bericht  .= "<tr><td>Model/type: </td><td>".($_POST['txtModel'])."</td></tr>";
				$bericht  .= "<tr><td>Vervaldatum APK: </td><td>".($_POST['ddlApkmaand'])." / ".($_POST['dllApkjaar'])."</td></tr>";
				$bericht  .= "<tr class='ff2 fs14 fc2' ><td>&nbsp; </td>/tr>";				
                $bericht  .= "<tr class='ff2 fs12 fc2' ><td>contactgegevens: </td>/tr>";				
				$bericht  .= "<tr><td>Naam: </td><td>".($_POST['txtNaam'])."</td></tr>";
				$bericht  .= "<tr><td>Adres: </td><td>".($_POST['txtAdres'])."</td></tr>";
				$bericht  .= "<tr><td>Postcode: </td><td>".($_POST['txtPostcode'])."</td></tr>";
				$bericht  .= "<tr><td>Woonplaats: </td><td>".($_POST['txtWoonplats'])."</td></tr>";
				$bericht  .= "<tr><td>Telefoonnummer: </td><td>".($_POST['txtTelefoon'])."</td></tr>";
				$bericht  .= "<tr><td>Emailadres: </td><td>".($_POST['txtEmail'])."</td></tr>";
				$bericht  .= "<tr class='ff2 fs14 fc2' ><td>&nbsp; </td>/tr>";				
                $bericht  .= "<tr class='ff2 fs12 fc2' ><td>Opmerkingen: </td>/tr>";				
				$bericht  .= "<tr><td>eventuele opmerkingen: </td><td>".($_POST['txtExtra'])."</td></tr>";				
				$bericht  .= "</table>";			
				$bericht  .= "</body></html>"
				$headers   = 'MIME-Version: 1.0' . "\r\n";
			    $headers  .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    			$headers  .= "From: ".htmlspecialchars($_POST['email'])."\r\n";
    			$headers  .= "CC: ".htmlspecialchars($_POST['email'])."\r\n";
                                    
				 mail($to, $onderwerp, $bericht, $headers);
				 
				 echo "Dank u voor het invullen van het onderhoudsverzoek wij nemen zo spoedig mogelijk met u contact op."
	}
}
	?>

Wat heb ik nu fout gedaan, het script staat netjes in een divje zodat hij binnen de opmaak van de site staat.

Ik hoor het graag

Groeten,

Marcel
 
Laatst bewerkt door een moderator:
Het lijkt erop alsof PHP-meldingen uit staan, voor je ontwikkelomgeving is het handig die aan te zetten: http://stackoverflow.com/questions/6575482/how-do-i-enable-error-reporting-in-php

Mogelijk problemen zijn:

Regel 1: Short-tag notatie gebruikt "<?", vervangen door "<?php"
Regel 6, 9, 12, 17, 20, 23, 26, 29, 73: Slordigheidje van mij waarschijnlijk, je mist de regelafbreking. Oplossen door ";" achter de regels te zetten.
 
het gaat nu al goed ik wordt terug geleid naar de site maar de niet ingevulde verplichte velden gebeurd niets mee dus doe ik nog iets fout?
 
Waarschijnlijk omdat je dit stukje nog niet hebt geïmplementeerd? ;)
PHP:
    // Controleren of er fouten zijn gevonden
    if(sizeof($errors) > 0 ) {
        // Melding geven dat er fouten zijn gevonden.
    // Geen fouten gevonden
    }
 
Dat stukje code staat er wel tussen maar moet ik daar nog iets meer mee dan? Ik dacht eigenlijk dat de meldingen die in een "if" tag stonden dan vanzelf gemeld werden
 
Nee, hij "spaart" ze als het ware op.

Misschien krijg je ze een beter idee wat je er mee aan moet :)
PHP:
    // Controleren of er fouten zijn gevonden
    if(sizeof($errors) > 0 ) {
        // Melding geven dat er fouten zijn gevonden.
        var_dump($errors);
    // Geen fouten gevonden
    }
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan