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>
Sebastian V op 28/08/2012 13:27:22

Hierzo lag de fout: 'Te lang! 120 karakters max.'); }


Klopt ik heb het veranderd, stond vanuit jou code nog een ) achter die weg moet :D, nu is hij eruit gehaald.
@Chris: Haha oke. Ik krijg geen foutmeldingen meer, maar mijn validatie werkt niet meer. Hoe komt dat?
Als je nu contactpersoon leeglaat, krijg je dan geen melding te zien?

Je had Display:none; er toch uitgehaald he?
Dit hanteer ik nu:

Ik krijg nu foutmeldingen op:

Regel 183 "Parse error: syntax error, unexpected T_PUBLIC":
public function sendEmail($aanhef,$contactpersoon,$bedrijfsnaam,$email,$telefoon,$vraag1_antwoorden,$vraag2_antwoorden){

Regel 220:
public function setError($field, $errmsg){

Regel 225:
public function error_value($field){

Regel 232:
public function countErrors(){


Display none is er overal uitgehaald.

QUIZ.PHP

<div id="formulierruimte">
                                        <?php
											require_once("php/db.php");                 /* Database Class */
											require_once('php/utils/is_email.php');     /* Email Validation Script */
											
											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(!isset($aanhef)) {
													   $this->errors['aanhef'] = 'Vul uw aanhef in';
													   }
													   								   
												   if(!isset($contactpersoon)) {
													   $this->errors['contactpersoon'] = 'Vul uw contactpersoon in';
													   } else if (isset($contactpersoon) || mb_strlen(trim($contactpersoon)) > 120) {
														   $this->errors['contactpersoon'] = 'Te lang! 120 karakters max.'; }
														   
													if(!isset($bedrijfsnaam)) {
													   $this->errors['bedrijfsnaam'] = 'Vul uw bedrijfsnaam in';
													   } else if (isset($bedrijfsnaam) || mb_strlen(trim($bedrijfsnaam)) > 120) {
														   $this->errors['bedrijfsnaam'] = 'Te lang! 120 karakters max.'; }
														   
													if(!isset($telefoon)) {
													   $this->errors['telefoon'] = 'Vul uw telefoon in';
													   } else if (isset($telefoon) || mb_strlen(trim($telefoon)) > 120) {
														   $this->errors['telefoon'] = 'Te lang! 120 karakters max.'; }
												
													if(!isset($vraag1_antwoorden)) {
													   $this->errors['vraag1_antwoorden'] = 'Selecteer een antwoord a.u.b.';
												
													if(!isset($vraag2_antwoorden)) {
													   $this->errors['vraag2_antwoorden'] = 'Selecteer een antwoord a.u.b.';
													
													if(!isset($email)) {
													   $this->errors['email'] = 'Vul uw e-mail in';
													   } else if (isset($email) || mb_strlen(trim($email)) > 120) {
														   $this->errors['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>
Je maakt de functie sendEmail pas aan nadat je hem probeerd aan te roepen, dit lijkt me niet te werken.

Ik zie een hoop in je script, waar ik niet weer waar het vandaan komt. Dat is dus heel moeilijk uitzoeken.

Dingen zoals SEND_EMAIL, MESSAGE_SUBJECT en nog wat andere dingen. Is dit door jezelf geschreven, of komt dit script van het net met wat aanpassingen?
Ik heb een script van het net gebruikt en deze aangepast. Hoe kan ik het makkelijker voor je maken om het te begrijpen?

De werking van het formulier is in principe simpel: Men vult het formulier in, zodra er op submit geklikt is, wordt er data verzonden naar een database en een e-mail gestuurd met de gegevens.

Uiteindelijke belandt de user op RESULT.PHP waar de ingevulde gegevens getoond worden.

[size=xsmall]Toevoeging op 28/08/2012 14:09:36:[/size]

SEND_EMAIL en MESSAGE_SUBJECT komen uit deze bestanden


<?php
require_once("php/db.php");                 /* Database Class */
require_once('php/utils/is_email.php');
?>


[size=xsmall]Toevoeging op 28/08/2012 14:16:42:[/size]

db.php is gelinkt aan config.php waarin dit staat:


<?php
define('DB_SERVER'			, 'localhost');
define('DB_USER'			, 'USER');
define('DB_PASS'			, 'PASS');
define('DB_NAME'			, 'NAME');

/*
 * Email Settings
 */
define('EMAIL_TO'			, 'EMAIL');
define('MESSAGE_SUBJECT'	, 'Gegevens nieuwe deelnemer');
define('SEND_EMAIL'			, true); /* if set to true, an email is sent to admin after a message is inserted */
?>
Misschien eens gaan letten op wat je doet. Ik zie bijvoorbeeld dit staan:
<?php
if(!isset($vraag1_antwoorden)) {
$this->errors['vraag1_antwoorden'] = 'Selecteer een antwoord a.u.b.';

if(!isset($vraag2_antwoorden)) {
$this->errors['vraag2_antwoorden'] = 'Selecteer een antwoord a.u.b.';
?>
Daar missen dus al bijvoorbeeld twee } om de if statements af te sluiten. Dit zijn gewoon fouten die je zelf ook kunt zien.
Idd dom dat ik dat over het hoofd zag.. Foutmeldingen zijn weg, ik was te gefocust op de rode foutregels in Dreamweaver..

De validatie werkt echter nog niet. Als ik op submit klikt gaat het formulier gelijk naar RESULT.PHP

Ik heb geprobeerd:
if($this->countErrors() == 0) { te veranderen in if($this->countErrors() == '')

maar dat heeft geen effect.

Volgens mij gaat er iets fout in de class contact?


/* 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' => ''
														);
Volgens mij heb je je class zo vakkundig overhoop gehaald dat je het nooit meer werkend gaat krijgen. Dit stond er namelijk in je eerdere posts:
<?php
public function setError($field, $errmsg){
$this->errors[$field] = $errmsg;
$this->num_errors = count($this->errors);
}

public function countErrors(){
return $this->num_errors;
}
?>
Waarbij ik ervanuit ga dat $this->errors in eerste instantie als lege array werd gedefinieerd. Wat hier dan gebeurt is dat er elke keer dat er een error message bij komt ook num_errors wordt opgehoogd. Dat ben je nu allemaal kwijt. Volgens mij houd je nergens meer bij hoeveel errors je hebt en dus klopt er helemaal niets meer van die controles.
@Sebastiaan: Door hier steeds van die lange lappen code te posten wordt het heel lastig om het topic te volgen en nagenoeg onmogelijk om er iets aan bij te dragen.


Reageren