Goedemorgen,

Alle input velden van mijn formulier verdwijnen die na de eerste ECHO foutmelding staan. Hoe kan ik dit verhelpen zodat alle velden weer zichtbaar worden?


<tr class="rij_aanhef">
<td class="left_td">Aanhef<font size="-2" style="vertical-align:top;">*</font></td>
<td><label class="label_aanhef" for="aanhef_1"><input name="aanhef" id="aanhef_1" value="Dhr." type="radio" /> Dhr.</label><label class="label_aanhef" for="aanhef_2"><input name="aanhef" id="aanhef_2" value="Mevr." type="radio" /> Mevr.</label>
<span class="error" style="display:none; margin-left:40px;">
<?php echo($contact->error_value('aanhef')) ?>
</span>
</td>
</tr>
<tr class="rij_contactpersoon">
<td class="left_td">Contactpersoon</td>
<td>
<input id="contactpersoon" name="contactpersoon" class="inplaceError" maxlength="120" type="text" class="error" autocomplete="off" onFocus="window.scrollTo(0, 0);"/>
<span class="error" style="display:none; margin-left:40px;">
<?php echo($contact->error_value('contactpersoon')) ?>
</span>
</td>
</tr>
<tr class="rij_bedrijf">
<td class="left_td">Bedrijfsnaam</td>
<td>
<input id="bedrijfsnaam" name="bedrijfsnaam" class="inplaceError" maxlength="120" type="text" autocomplete="off" onFocus="window.scrollTo(0, 0);"/>
<span class="error" style="display:none; margin-left:40px;">
<?php echo($contact->error_value('bedrijfsnaam')) ?>
</span>
</td>
</tr>
Niet het antwoord op je vraag: je zou kunnen overwegen om de jquery validate plugin in je form te hangen. De validatie gebeurt dat in de browser, en als er op de verzend knop gedrukt wordt, weet je zeker dat alles velden er zijn, en een geldige waarde hebben.

voorbeeld:

  <head>
    <script language="javascript" type="text/javascript" src="jquery-latest.js"></script>
    
    <script language="javascript" type="text/javascript" src="jquery.validate.min.js"></script>
    <script>
      $(document).ready(function(){
        $( "#myform" ).validate();
      });
    </script>
  </head>

...

<form id="myform" action="/myaction" method="POST">

    <p>
      <input type="text" name="Name" id="name" value="" size="22" class="required" minlength="3">
      <label for="name">Name (required)</label>
    </p>

    <p>
      <input type="text" name="EMail" id="email" value="" size="22" class="required email">
      <label for="email">EMail (will not be published) (required)</label>
    </p>

...



En het ziet er dan zo uit:



zomaar een ideetje ..
@Chris, heb ik gedaan, maar nog resultaat.


<div id="formulierruimte">
                                        <?php
											require_once("php/db.php");                 /* Database Class */
											require_once('php/utils/is_email.php');     /* Email Validation Script */
											
											/* Handle Ajax Request */
											if(isset($_POST['newcontact'])){
												$contact = new Contact();
												//We'll refer to that later on, to display errors.
												//unset($contact);
											}
											else{
												//header('Location: result.php');
											}
											
											/* Class Contact */
											class Contact{
											
												private $db;                        /* the database obj */
											
												//private $errors         = array();  /* holds error messages */
												//we have to init $errors array, as otherwise form will produce errors on missing array entry
												private $errors = array(            /* holds error messages */
															'aanhef' => '',
															'bedrijfsnaam' => '',
															'email' => '',
															'telefoon' => '',
															'vraag1_antwoorden' => '',
															'vraag2_antwoorden' => ''
														);
											
											
												private $num_errors;                /* number of errors in submitted form */
											
												public function __construct(){
													$this->db = new DB();
													if(isset($_POST['newcontact']))
														$this->processNewMessage();
													/* We don't need this anymore
													 * 
													else
														header('Location: result.php');*/
												}
											
												public function processNewMessage(){
											
													$aanhef				= $_POST['aanhef'];			
													$contactpersoon		= $_POST['contactpersoon'];		
													$bedrijfsnaam		= $_POST['bedrijfsnaam'];
													$telefoon			= $_POST['telefoon'];
													$email				= $_POST['email'];
													$vraag1_antwoorden	= $_POST['vraag1_antwoorden'];
													$vraag2_antwoorden	= $_POST['vraag2_antwoorden'];
											
											
													/* Server Side Data Validation */
											
													/* Aanhef Validation */
													if(!$aanhef || mb_strlen($aanhef = trim($aanhef)) == '')
														$this->setError('aanhef', 'Selecteer uw aanhef');
											
													/* Contactpersoon Validation */
													if(!$contactpersoon || mb_strlen($contactpersoon = trim($contactpersoon)) == '')
														$this->setError('contactpersoon', 'Vul uw contactpersoon in');
													else if(mb_strlen(trim($contactpersoon)) > 120)
														$this->setError('contactpersoon', 'Te lang! 120 karakters max.');
											
													/* Bedrijfsnaam Validation */
														if(!$bedrijfsnaam || mb_strlen($bedrijfsnaam = trim($bedrijfsnaam)) == '')
														$this->setError('bedrijfsnaam', 'Vul uw bedrijfsnaam in');
													else if(mb_strlen(trim($bedrijfsnaam)) > 120)
														$this->setError('bedrijfsnaam', 'Te lang! 120 karakters max.');
											
														/* Telefoon Validation */
														if(!$telefoon || mb_strlen($telefoon = trim($telefoon)) == '')
														$this->setError('telefoon', 'Vul uw telefoonnummer in');
													else if(mb_strlen(trim($telefoon)) > 120)
														$this->setError('telefoon', 'Te lang! 120 karakters max.');
											
														/* Vraag 1 Validation */
														if(!$vraag1_antwoorden || mb_strlen($vraag1_antwoorden = trim($vraag1_antwoorden)) == '')
														$this->setError('vraag1_antwoorden', 'Selecteer een antwoord a.u.b.');
											
														/* Vraag 2 Validation */
														if(!$vraag2_antwoorden || mb_strlen($vraag2_antwoorden = trim($vraag2_antwoorden)) == '')
														$this->setError('vraag2_antwoorden', 'Selecteer een antwoord a.u.b.');
											
														/* Email Validation */
													if(!$email || mb_strlen($email = trim($email)) == '')
														$this->setError('email','Vul uw e-mail in');
													else{
														if(!is_email($email))
															$this->setError('email', 'Vul een correct email adres in');
														else if(mb_strlen($email) > 120)
															$this->setError('email', 'Te lang! 120 karakters max.');
													}
											
													/* No errors, insert in db
													else*/
													if($this->countErrors() == 0) {
														if(($ret = $this->db->dbNewMessage($aanhef, $contactpersoon, $bedrijfsnaam, $email, $telefoon, $vraag1_antwoorden, $vraag2_antwoorden)) > 0){
															//$json = array('result'         => 1);
															if(SEND_EMAIL)
																$this->sendEmail($aanhef,$contactpersoon,$bedrijfsnaam,$email,$telefoon,$vraag1_antwoorden,$vraag2_antwoorden);
											
															//This is for relocating to successful result page
															header('Location: result.php');
														} else {   
															// else
															//    $json = array('result'      => -2); /* something went wrong in database insertion  */
											
															//This will need special treatment. You have to prepare an errorpage
															//for database-related issues.
															header("Location: database-error.html");
														}
											
														/*$encoded = json_encode($json);
														echo $encoded;
														unset($encoded);*/
													}
												}
											
												public function sendEmail($aanhef,$contactpersoon,$bedrijfsnaam,$email,$telefoon,$vraag1_antwoorden,$vraag2_antwoorden){
												/* Just format the email text the way you want ... */
												$message_body   = "<div style=\"font-size:12px; font-weight:normal;\">Hallo,<br><br>"
																			."Het volgende bedrijf heeft zich zojuist aangemeld:</div><br>"
																			."<table cellpadding=\"1\" cellspacing=\"1\" width=\"550px\"><tr><td style=\"font-size:12px; color:#000000\">Bedrijfsnaam:</td><td style=\"font-size:12px; color:#000000\">".$bedrijfsnaam."</td></tr><tr><td style=\"font-size:12px; color:#000000\">Aanhef:</td><td style=\"font-size:12px; color:#000000\">".$aanhef."</td></tr><tr><td style=\"font-size:12px; color:#000000\">Contactpersoon:</td><td style=\"font-size:12px; color:#000000\">".$contactpersoon."</td></tr><tr><td style=\"font-size:12px; color:#000000\">Telefoonnummer:</td><td style=\"font-size:12px; color:#000000\">".$telefoon."</td></tr><tr><td style=\"font-size:12px; color:#000000\">E-mail:</td><td style=\"font-size:12px; color:#000000\">".$email."</td></tr><tr><td style=\"font-size:12px; color:#000000\">Antwoord vraag 1:</td><td style=\"font-size:12px; color:#000000\">".$vraag1_antwoorden."</td></tr><tr><td style=\"font-size:12px; color:#000000\">Antwoord vraag 2:</td><td style=\"font-size:12px; color:#000000\">".$vraag2_antwoorden."</td></tr></table><br>";
												
													// Geef GELDIGE adressen op
													// Een korte benaming voor jouw website
													$website_naam = 'Aanmelding';
													// Jouw eigen geldige emailadres
													$eigen_emailadres = 'MAIL';
													// Een geldig emailadres voor errors
													$error_emailadres = 'MAIL';
													// De naam van de verzender
													$naam_verzender = ''.$bedrijfsnaam.'';
													// Het geldige emailadres van de afzender
													$email_verzender = ''.$email.'';
													// Een geldig emailadres of helemaal leeg laten
													$bcc_emailadres = '';
													// HTML mail? True/False
													$html = true;
													
													// De headers samenstellen
													$headers	 = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . PHP_EOL;
													$headers	.= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . PHP_EOL;
													$headers	.= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . PHP_EOL;
													$headers	.= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . PHP_EOL : '';
													$headers	.= 'X-Mailer: PHP/' . phpversion() . PHP_EOL;
													$headers	.= 'X-Priority: Normal' . PHP_EOL;
													$headers	.= ($html) ? 'MIME-Version: 1.0' . PHP_EOL : '';
													$headers	.= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . PHP_EOL : '';
										
												
													mail(EMAIL_TO,MESSAGE_SUBJECT,$message_body,$headers);
											
												}
											
												public function setError($field, $errmsg){
													$this->errors[$field]   = $errmsg;
													$this->num_errors       = count($this->errors);
												}
											
												public function error_value($field){
													if(array_key_exists($field,$this->errors))
														return $this->errors[$field];
													else
														return '';
												}
											
												public function countErrors(){
													return $this->num_errors;
												}
											};
											?>
                                            <table width="675px" cellpadding="0" cellspacing="0">
                                                <form id="ContactForm" action="quiz.php" method="post">
                                                <tr>
                                                    <td class="left_td">&nbsp;</td><td><font size="-2">* Gelieve alle velden in te vullen.</font></td>
                                                </tr>
                                                <tr class="rij_aanhef">
                                                    <td class="left_td">Aanhef<font size="-2" style="vertical-align:top;">*</font></td>
                                                    <td>
                                                        <label class="label_aanhef" for="aanhef_1"><input name="aanhef" id="aanhef_1" value="Dhr." type="radio" /> Dhr.</label><label class="label_aanhef" for="aanhef_2"><input name="aanhef" id="aanhef_2" value="Mevr." type="radio" /> Mevr.</label>
                                                        <span class="error">
															<?php echo $aanhef->error_value['aanhef']; ?>
														</span>
                                                    </td>
                                                </tr>
                                                <tr class="rij_contactpersoon">
                                                    <td class="left_td">Contactpersoon</td>
                                                    <td>
                                                        <input id="contactpersoon" name="contactpersoon" class="inplaceError" maxlength="120" type="text" class="error" autocomplete="off" onFocus="window.scrollTo(0, 0);"/>
                                                        <span class="error">
															<?php echo $contactpersoon->error_value['contactpersoon']; ?>
                                                        </span>
                                                    </td>
                                                </tr>
                                                <tr class="rij_bedrijf">
                                                    <td class="left_td">Bedrijfsnaam</td>
                                                    <td>
                                                        <input id="bedrijfsnaam" name="bedrijfsnaam" class="inplaceError" maxlength="120" type="text" autocomplete="off" onFocus="window.scrollTo(0, 0);"/>
                                                        <span class="error">
															<?php echo $bedrijfsnaam->error_value['bedrijfsnaam']; ?>
                                                        </span>
                                                    </td>
                                                </tr>
                                                <tr>
                                                    <td class="left_td">E-mail</td>
                                                    <td>
                                                        <input id="email" name="email" class="inplaceError" maxlength="120" type="text" autocomplete="off" onFocus="window.scrollTo(0, 0);"/>
                                                        <span class="error">
															<?php echo $email->error_value['email']; ?>
                                                        </span>
                                                    </td>
                                                </tr>
                                                <tr>
                                                    <td class="left_td">Telefoonnummer</td>
                                                    <td><input id="telefoon" name="telefoon" class="inplaceError" maxlength="120" type="text" autocomplete="off" onFocus="window.scrollTo(0, 0);"/>
                                                        <span class="error">
															<?php echo $telefoon->error_value['telefoon']; ?>
                                                        </span>
                                                    </td>
                                                </tr>
                                            </table>
                                        </div>
Ik zie nu dat je ook bij elke if en if else statement geen {} hebt. Deze zijn ook vereist, dus plaats dit bij al je statements, hieronder een voorbeeld.


<?php
if(!$contactpersoon || mb_strlen($contactpersoon = trim($contactpersoon)) == '') {
                                                        $this->setError('contactpersoon', 'Vul uw contactpersoon in');
                                                   } else if (mb_strlen(trim($contactpersoon)) > 120) {
                                                        $this->setError('contactpersoon', 'Te lang! 120 karakters max.'); }
?>

John Berg op 28/08/2012 11:48:13

Niet het antwoord op je vraag: je zou kunnen overwegen om de jquery validate plugin in je form te hangen. De validatie gebeurt dat in de browser, en als er op de verzend knop gedrukt wordt, weet je zeker dat alles velden er zijn, en een geldige waarde hebben.

En waarbij je dan de volledige validatie en check server side ook nog moet doen natuurlijk. Vertrouw NOOIT op data die van de browser komt. client side validatie is handig voor de gebruiker, maar vervangt niets server side.



[size=xsmall]Toevoeging op 28/08/2012 12:00:26:[/size]

@Chris, niet verplicht voor 1 regel tekst. Wel beter leesbaar en consequenter.
@Chris: Ik kreeg wat foutmeldingen en heb de } aangepast in {, nu zijn de foutmeldingen weg maar werkt de het vertonen van de foutmelding nog niet.


<?php
											require_once("php/db.php");                 /* Database Class */
											require_once('php/utils/is_email.php');     /* Email Validation Script */
											
											/* Handle Ajax Request */
											if(isset($_POST['newcontact'])){
												$contact = new Contact();
												//We'll refer to that later on, to display errors.
												//unset($contact);
											}
											else{
												//header('Location: result.php');
											}
											
											/* Class Contact */
											class Contact{
											
												private $db;                        /* the database obj */
											
												//private $errors         = array();  /* holds error messages */
												//we have to init $errors array, as otherwise form will produce errors on missing array entry
												private $errors = array(            /* holds error messages */
															'aanhef' => '',
															'bedrijfsnaam' => '',
															'email' => '',
															'telefoon' => '',
															'vraag1_antwoorden' => '',
															'vraag2_antwoorden' => ''
														);
											
											
												private $num_errors;                /* number of errors in submitted form */
											
												public function __construct(){
													$this->db = new DB();
													if(isset($_POST['newcontact']))
														$this->processNewMessage();
													/* We don't need this anymore
													 * 
													else
														header('Location: result.php');*/
												}
											
												public function processNewMessage(){
											
													$aanhef				= $_POST['aanhef'];			
													$contactpersoon		= $_POST['contactpersoon'];		
													$bedrijfsnaam		= $_POST['bedrijfsnaam'];
													$telefoon			= $_POST['telefoon'];
													$email				= $_POST['email'];
													$vraag1_antwoorden	= $_POST['vraag1_antwoorden'];
													$vraag2_antwoorden	= $_POST['vraag2_antwoorden'];
											
											
													/* Server Side Data Validation */
													if(!$aanhef || mb_strlen($aanhef = trim($aanhef)) == ''){
                                                        $this->setError('aanhef', 'Vul uw aanhef in');
														}
												   
													if(!$contactpersoon || mb_strlen($contactpersoon = trim($contactpersoon)) == ''){
                                                        $this->setError('contactpersoon', 'Vul uw contactpersoon in');
														} 
														else if(mb_strlen(trim($contactpersoon)) > 120){
                                                        $this->setError('contactpersoon', 'Te lang! 120 karakters max.');
														}
											
													if(!$bedrijfsnaam || mb_strlen($bedrijfsnaam = trim($bedrijfsnaam)) == '') {
                                                        $this->setError('bedrijfsnaam', 'Vul uw bedrijfsnaam in');
														} 
												   		else if (mb_strlen(trim($bedrijfsnaam)) > 120){
                                                        $this->setError('bedrijfsnaam', 'Te lang! 120 karakters max.');
														}
														
													if(!$telefoon || mb_strlen($telefoon = trim($telefoon)) == '') {
                                                        $this->setError('telefoon', 'Vul uw telefoon in');
														} 
												   		else if (mb_strlen(trim($telefoon)) > 120){
                                                        $this->setError('telefoon', 'Te lang! 120 karakters max.');
														}
											
													if(!$vraag1_antwoorden || mb_strlen($vraag1_antwoorden = trim($vraag1_antwoorden)) == '') {
                                                        $this->setError('vraag1_antwoorden', 'Selecteer een antwoord a.u.b.');
														} 
													
													if(!$vraag2_antwoorden || mb_strlen($vraag2_antwoorden = trim($vraag2_antwoorden)) == '') {
                                                        $this->setError('vraag2_antwoorden', 'Selecteer een antwoord a.u.b.');
														} 
														
													if(!$email || mb_strlen($email = trim($email)) == '') {
                                                        $this->setError('email', 'Vul uw email in');
														} 
												   		else if (mb_strlen(trim($email)) > 120){
                                                        $this->setError('email', 'Te lang! 120 karakters max.');
														}						
											
											
													/* No errors, insert in db
													else*/
													if($this->countErrors() == 0) {
														if(($ret = $this->db->dbNewMessage($aanhef, $contactpersoon, $bedrijfsnaam, $email, $telefoon, $vraag1_antwoorden, $vraag2_antwoorden)) > 0){
															//$json = array('result'         => 1);
															if(SEND_EMAIL)
																$this->sendEmail($aanhef,$contactpersoon,$bedrijfsnaam,$email,$telefoon,$vraag1_antwoorden,$vraag2_antwoorden);
											
															//This is for relocating to successful result page
															header('Location: result.php');
														} else {   
															// else
															//    $json = array('result'      => -2); /* something went wrong in database insertion  */
											
															//This will need special treatment. You have to prepare an errorpage
															//for database-related issues.
															header("Location: database-error.html");
														}
											
														/*$encoded = json_encode($json);
														echo $encoded;
														unset($encoded);*/
													}
												}
Het zijn arrays, dus pas het eens aan na dit, kijk eens wat hij nu doet. Je array setError zal nu leeg blijven.

$this->setError ['aanhef' => 'Vul uw aanhef in'];

Zo even al je set Error's aanpassen naar deze schrijfwijze.
Aan de hand van je voorbeeld heb ik nu dit staan, maar dan krijg ik foutmeldingen. Moeten de { weg of op een andere plek?


if(!$aanhef || mb_strlen($aanhef = trim($aanhef)) == '') {
														$this->setError ['aanhef' => 'Vul uw aanhef in'];
														 }
Sebastian V op 28/08/2012 12:16:32

Aan de hand van je voorbeeld heb ik nu dit staan, maar dan krijg ik foutmeldingen. Moeten de { weg of op een andere plek?


if(!$aanhef || mb_strlen($aanhef = trim($aanhef)) == '') {
														$this->setError ['aanhef' => 'Vul uw aanhef in'];
														 }



Kun je de foutmelding(en) eens posten? Dat is wat makkelijker zoeken :D
Van dat bovenstaande klopt helemaal niets helaas. Zo te zien is setError een functie met twee argumenten:
<?php
$this->setError('aanhef', 'Vul uw aanhef in' );
?>
Ik heb het hieronder alleen bij "aanhef" toegepast, maar er verschijnt een syntax error bij deze regel: $this->setError ['aanhef' => 'Vul uw aanhef in'];


/* Server Side Data Validation */
													if(!$aanhef || mb_strlen($aanhef = trim($aanhef)) == '') {
														$this->setError ['aanhef' => 'Vul uw aanhef in'];
														 }
												   
													if(!$contactpersoon || mb_strlen($contactpersoon = trim($contactpersoon)) == '') {
                                                        $this->setError('contactpersoon', 'Vul uw contactpersoon in');
														} else if (mb_strlen(trim($contactpersoon)) > 120) {
                                                        $this->setError('contactpersoon', 'Te lang! 120 karakters max.'); }
											
													if(!$bedrijfsnaam || mb_strlen($bedrijfsnaam = trim($bedrijfsnaam)) == '') {
                                                        $this->setError('bedrijfsnaam', 'Vul uw bedrijfsnaam in');
														} else if (mb_strlen(trim($bedrijfsnaam)) > 120) {
                                                        $this->setError('bedrijfsnaam', 'Te lang! 120 karakters max.'); }
														
													if(!$telefoon || mb_strlen($telefoon = trim($telefoon)) == '') {
                                                        $this->setError('telefoon', 'Vul uw telefoon in');
														} else if (mb_strlen(trim($telefoon)) > 120) {
                                                        $this->setError('telefoon', 'Te lang! 120 karakters max.'); }
											
													if(!$vraag1_antwoorden || mb_strlen($vraag1_antwoorden = trim($vraag1_antwoorden)) == '') {
                                                        $this->setError('vraag1_antwoorden', 'Selecteer een antwoord a.u.b.'); } 
													
													if(!$vraag2_antwoorden || mb_strlen($vraag2_antwoorden = trim($vraag2_antwoorden)) == '') {
                                                        $this->setError('vraag2_antwoorden', 'Selecteer een antwoord a.u.b.'); } 
														
													if(!$email || mb_strlen($email = trim($email)) == '') {
                                                        $this->setError('email', 'Vul uw email in'); 
														} else if (mb_strlen(trim($email)) > 120) {
                                                        $this->setError('email', 'Te lang! 120 karakters max.'); }	

Reageren