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>
@Erwin: deze functies benoem ik onderaan het script:
@John: excuses voor de hoeveelheid, ik probeer zo duidelijk mogelijk mijn probleem over te brengen. Zal ik een nieuwe post starten anders?


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;
												}
@sebastian dat is leuk dat je ze benoemd, maar je gebruikt ze niet. Oorspronkelijk gebruikte de class de methode 'setError' om een nieuwe error aan te maken, dat heb je nu veranderd in het direct invoegen in de array. Die setError methode gebruik je dus niet, waardoor dat hele tellen ook niet meer werkt.

Dit is nu de kracht van OOP: een class die uit zichzelf kan doen wat het moet doen en je hoeft het alleen maar op de goede manier aan te roepen in een ander script om het te kunnen gebruiken.

Echter, ga je er in zitten klooien dan krijg je het nooit meer goed.

Mijn advies: begin opnieuw en laat de oorspronkelijke class onveranderd, of gebruik het in het geheel niet.
De werking snap ik, dat is het probleem niet, je krijgt echter errors die aangeven dat er iets niet klopt. Dit zijn dingen die wij niet gewijzigd hebben in dit topic. Vandaar dat het wat moeilijker zoeken is naar de oorzaken


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


Het lijkt erop dat hij de T_PULBIC niet herkend, aangezien deze unexpected is.


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


Welke foutmelding hoort hierbij?


Regel 225:
public function error_value($field){


Welke foutmelding hoort hierbij?


Regel 232:
public function countErrors(){


Welke foutmelding hoort hierbij?
@Sebastiaan: Als je nou eens zou beginnen met de inspringing weg te laten, zodat e.e.a. gewoon leesbaar is, dat zou al helpen. Ik snap dat knippen en plakken voor jouw het gemakkelijkste is, daar wordt het niet beter van.

Verder ben ik het met Erwin eens. De kracht van OOP zijn de op zichzelf staande classes. Elke class in een aparte file, de class afzonderlijk testen en daarna voor de rest van je leven gebruiken.

Als je goed en modulair programmeert krijg je geen lappen code van 140 regels onder elkaar. Als ik een class functie schrijf is dat zelden meer dan 10 regels.
En voor de HTML geldt eigenlijk hetzelfde: de deelstukken in een div zetten. Bij het ontwerp eventueel een border om de div, zodat je goed kunt zien waar iets speelt.
Is er ergens een probleem, dan alleen het stuk binnen de div bekijken.

@Chris: Foutmeldingen zijn opgelost door Erwin H:


<?php
if(!isset($vraag1_antwoorden)) {
  $this->errors['vraag1_antwoorden'] = 'Selecteer een antwoord a.u.b.';
  } /* WAS DEZE VERGETEN */                                              
if(!isset($vraag2_antwoorden)) {              
  $this->errors['vraag2_antwoorden'] = 'Selecteer een antwoord a.u.b.';
  } /* WAS DEZE VERGETEN */                                              
?>


@John: ik ga op me gemak vnvnd het wat duidelijk proberen te schrijven. Ik ben echter bang dat als ik opnieuw begin dat ik geen raad weet waar te beginnen.

Ik snap jullie punt en ik wil me daar graag aan houden, ook voor toekomstige projecten heb je daar alleen maar profijt van.
@Sebastian,

Sorry ik was te laat met reageren.
@sebestiaan: Als je het nu eens structureerd:

Je schrijft 150 regels op die niets anders doen dan een tabel vullen met invoervelden.
Dat kan veel simpeler:


<?php
$invoervelden = array( 'email', 'telefoonnummer', 'matresse1', 'maitresse2'); 
foreach( $invoervelden as $$invoerveld) {
?>
<tr>
  <td class="left_td"><?= $invoerveld ?></td>
  <td><input id="email" name="<?= $invoerveld ?>" class="inplaceError" maxlength="120 type="text" autocomplete="off" onFocus="window.scrollTo(0, 0);"/>
   <span class="error">
      <?php echo $email->error_value[$invoerveld]; ?>
   </span>
   </td>
</tr>
<?php
}
?>


Dat zou al denk ik meer dan 100 regels schelen, is gemakkelijker te onderhouden,
leesbaarder en wellicht ook eenvoudiger.

Zomaar een idee ..

Reageren