Ik zit met een probleem, ik heb een stukje code gemaakt en het werkt bijna, maar ik loop tegen een vervelend probleem aan, alleen zie ik niet waar het aan ligt, hopelijk kunnen jullie helpen.

Het gaat om de volgende code:

<?php
	if (isset($_POST['submit'])) {
		$errors = array();
	
		// form validation
		$required_fields = array('menu_name', 'position', 'visible', 'content');
		foreach($required_fields as $fieldname) {
			if (!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0)) {
				$errors[] = $fieldname;
			}	
		}		
		$fields_with_lengths = array('menu_name' => 30);
		foreach($fields_with_lengths as $fieldname => $maxlength) {
			if (strlen(trim(mysql_prep($_POST[$fieldname]))) > $maxlength) {
				$errors[] = $fieldname;
			}
		}
		
		if (empty($errors)) {
			// perform update
			$id = mysql_prep($_GET['page']);
			$menu_name = mysql_prep($_POST['menu_name']);
			$position = mysql_prep($_POST['position']);
			$visible = mysql_prep($_POST['visible']);
			$content = mysql_prep($_POST['content']);
			
			$query = "UPDATE pages SET 
						menu_name = '{$menu_name}', 
						position = {$position}, 
						visible = {$visible}, 
						content = '{$content}' 
					WHERE id = {$id}";
			$result = mysql_query($query, $connection);
			if (mysql_affected_rows() == 1) {
				// success
				$message = "De pagina is succesvol geupdate.";
			} else {
				// failed
				$message = "De pagina update was niet succesvol!";
				$message = "<br/>" . mysql_error();
			}
		} else {
			// Errors occurred
			$message = "Er zijn " . count($errors) . " fouten in het formulier!";
		}
				
	}
?>

De code staat op een pagina met een form (de actie van de form is dezelfde pagina, dus een "in-page-code" in feite).
Ik heb een array gemaakt van de diverse velden welke vereist zijn (een textbox, select option, radio en een textarea), er wordt gecontroleerd of deze velden een value bevatten, niet leeg of 0 zijn.
Bij het laden van de pagina, worden de gegevens uit de database gehaald (indien beschikbaar) en de velden ingevuld. Als ik nu bijvoorbeeld de tekst die in het veld menu_name staat verwijder en op submit klik, dan wordt de record gewoon geüpdatet, maar eigenlijk moet er een error terugkomen dat het veld menu_name leeg is.
Ik heb de code diverse keren bekeken, maar kan niks vinden. Waar zit de fout?

Alvast bedankt voor enige hulp.
Waar zit de fout?

Dit slaat nergens op:

empty($_POST[$fieldname]) && $_POST[$fieldname] != 0

Een waarde moet "niet nul" zijn; maar moet wel empty zijn
empty($_POST[$fieldname]) geeft true wanneer $_POST[$fieldname] gelijk is aan 0 ; '' ; array() ; null ; false
$_POST[$fieldname] != 0 geeft true wanneer $_POST[$fieldname] niet gelijk is aan 0 ; '' ; array() ; null ; false

Beide samen kunnen nooit true geven.

Waar je ook goed op moet letten, is het verschil tussen == en ===; ofwel != en !==
waarden als 0; false; array(); ... worden geëvalueerd als het zelfde. Tenzij je specifiek zegt: het moet van het zelfde type zijn.
$_POST[$fieldname] !== 0 geeft enkel true als als beide waarden ook het zelfde type hebben (in dit geval zijnde een integer).

... er wordt gecontroleerd of deze velden een value bevatten, niet leeg of 0 zijn. ...


Dat wordt dus:
if (empty($_POST[$fieldname])) {
$errors[] = $fieldname;
}
Kris Peeters op 25/01/2013 09:48:41

Dat wordt dus:
if (empty($_POST[$fieldname])) {
$errors[] = $fieldname;
}

Ik heb alleen het isset gedeelte weggehaald (omdat isset en empty niet veel verschillen). Omdat ik ook radiobuttons gebruik (dus integer), heb ik toch het stukje met != hergebruikt, anders werkt de controle op de radiobuttons niet (als ik !== gebruik ipv !=).

Dit is zoals ik de code (stukje) nu heb (en dit werkt):

<?php
$required_fields = array('menu_name', 'position', 'visible', 'content');
		foreach($required_fields as $fieldname) {
			if (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0) {
				$errors[] = $fieldname;
			}
}
?>


Reageren