Hallo allemaal,
Ik ben al enleke dagen bezig met het vinden van een oplossing voor een probleem maar krijg de oplossing niet gevonden. Ik heb een paar schriptjes geschreven om een an ander te verduidelijken.
Ik gebruik meesta het volgende scriptje voor het controleren van ingevoerde waardes in formuliervelden:


<table border="0">
<form action="" method="POST">
  <tr>
    <td align="right">Straat:</td>
    <td>
			<?php
        if($_POST[verwerk] == 'ja' && $_POST[naam] == NULL){
          echo 'u dient hier iets in te vullen</br>';
					$error ='yes';
          }
      ?>
      <input type="text" name="naam" id="naam" value="<?php echo $_POST[naam]; ?>">
    </td>
  </tr>
  <tr>
    <td align="right">Adres:</td>
    <td>
			<?php
        if($_POST[verwerk] == 'ja' && $_POST[adres] == NULL){
          echo 'u dient hier iets in te vullen</br>';
					$error ='yes';
          }
      ?>
      <input type="text" name="adres" id="adres" value="<?php echo $_POST[adres]; ?>">
    </td>
  </tr>
  <tr>
    <td align="right">Huisnummer:</td>
    <td>
			<?php
        if($_POST[verwerk] == 'ja' && !is_numeric($_POST[huisnummer])){
          echo 'u dient hier een numerieke waarde te vullen</br>';
					$error ='yes';
          }
			?>
      	<input type="text" name="huisnummer" id="huisnummer" value="<?php echo $_POST[huisnummer]; ?>">
    </td>
  </tr>
  <tr>
  <td><p>&nbsp;</p>
    <p>&nbsp;</p></td>
  <td><input type="submit" value="Verwerk"><input name="verwerk" type="hidden" value="ja"></td>
  </tr>
</form>
</table>

<?php
if ($_POST[verwerk] == 'ja' && $error != 'yes'){
	echo 'verwerk gegevens';
	}
?>


Bovenstaand script werkt perfect en heeft in het verleden zijn dienste bewezen, het probleem is alleen dat de scripts (bij veel formuliervelden) heel erg lang worden en heel erg veel herhalingen bevatten.
Om dit probleem op te lossen heb ik geprobeerd door middel van 'function()' een en ander te verkorten, dit is gelukt in onderstaande code:


<?php
function textbox($naam,$type){
	?>
  <tr>
    <td align="right"><?php echo ucfirst($naam); ?></td>
    <td>
			<?php
        if($type == 'tekst'){
					if($_POST[verwerk] == 'ja' && $_POST[$naam] == NULL){
						echo 'u dient hier iets in te vullen</br>';
						$error = 'yes';
						}
					echo '<input type="text" name="'.$naam.'" id="'.$naam.'" value="'.$_POST[$naam].'">';
					}
				
				if($type == 'numeriek'){
					if($_POST[verwerk] == 'ja' && !is_numeric($_POST[$naam])){
						echo 'u dient hier een numerieke waarde in te vullen</br>';
						$error = 'yes';
						}
					echo '<input type="text" name="'.$naam.'" id="'.$naam.'" value="'.$_POST[$naam].'">';
					}
				
      ?>
    </td>
  </tr>
  <?php
	}
	?>
<table border="0">
<form action="" method="POST">
  <?php
  textbox(voornaam,tekst);
  textbox(tussenvoegsel,tekst);
  textbox(achternaam,numeriek);
	?>
  <tr>
  <td><p>&nbsp;</p>
    <p>&nbsp;</p></td>
  <td><input type="submit" value="Verwerk"><input name="verwerk" type="hidden" value="ja"></td>
  </tr>
</form>
</table>

<?php
if ($_POST[verwerk] == 'ja' && $error != 'yes'){
	echo 'verwerk gegevens';
	}
?>


Het probleem bij bovenstaande scriptje is dat de gegevens altijd 'verwerkt' worden, ondanks een 'error' in de ingevoerde velden. Ik weet wat het probleem is; de variabele $error 'wordt niet gezien' in het stukje script:


<?php
if ($_POST[verwerk] == 'ja' && $error != 'yes'){
	echo 'verwerk gegevens';
	}
?>


Ik heb al van alles geprobeert met return() maar ik krijg de oplossing niet gevonden, zoude jullie misschien eens willen kijken of jullie een oplossing weten?
zet dit eens bovenin je script en probeer dan nog eens als het goed is laat dit de errors zien;)

<?php error_reporting(E_ALL); 
ini_set("display_errors", 1); ?>
De manier waarop je die functie gebruikt is niet helemaal juist. Je laat een functie nu iets doen met een mengeling van HTML en PHP en probeert er dan nog iets uit te concluderen, dat gaat niet lukken.

Probeer de logica (PHP) en output (HTML) in je scripts zo veel mogelijk gescheiden te houden. Dus eerst de controle of alle velden wel correct ingevuld zijn en dan pas de output van eventuele meldingen en je formulier.

Neem bijvoorbeeld dit script als voorbeeld. Daarin zie je een methode waarop PHP en HTML gescheiden blijven en je toch een goede formulier controle hebt.

Reageren