Ik heb voor een vereniging een bestelformulier gemaakt. D.Mv. dit formulier kunnen 1 tot maximaal 10 artikelen worden besteld. De bestelling wordt in een database opgeslagen. Als men bv maar 1 artikel bestelt, worden er 10 records toegevoegd, waarvan 9 lege. Hoe kan ik in het script zorgen dat lege records niet worden opgeslagen. Het formulier staat op: http://www.info-sec.nl/bodyringenbestelling.htm

Dit is een stukje van het script:
<?php

$con = mysql_connect("");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}mysql_select_db("infosec", $con);
$sql="INSERT INTO kweker (naam, adres, postcode,woonplaats,telefoon,seclidnr,email,lidnb,kweeknr)
VALUES
('$_POST[naam]','$_POST[adres]','$_POST[postcode]','$_POST[woonplaats]','$_POST[telefoon]','$_POST[seclidnummer]','$_POST[email]','$_POST[lidnbvvja]','$_POST[kweeknummer]')";

$sql2="INSERT INTO bestelling (soort, ringmaat, volgnr, aantal, gekleurd, geannodiseerd, aluminium, rvs, bedrag)
VALUES
('$_POST[naamvogel1]','$_POST[maat1]','$_POST[volgnummer1]','$_POST[aantal1]','$_POST[gekl1]','$_POST[gekleurdgeanodiseerd1]','$_POST[aluminium1]','$_POST[rvs1]','$_POST[prijsvogel1]')";

$sql3="INSERT INTO bestelling (soort, ringmaat, volgnr, aantal, gekleurd, geannodiseerd, aluminium, rvs, bedrag)
VALUES
('$_POST[naamvogel2]','$_POST[maat2]','$_POST[volgnummer2]','$_POST[aantal2]','$_POST[gekl2]','$_POST[gekleurdgeanodiseerd2]','$_POST[aluminium2]','$_POST[rvs2]','$_POST[prijsvogel2]')";

Tussen elke $SQL moet een controle loop die kijkt of een regel leeg is. Bij een leeg veld bv naamvogel2 in soort moet het stoppen. Ik probeer vanalles, maar kom er niet uit
Eindig je PHP-code eens met ?>
Douwe M schreef op 07.07.2008 20:38
Eindig je PHP-code eens met ?>


Het is een klein stukje van zijn code zegt hij. Het einde van dat script zal er niet bij staan neem ik aan.
klopt de insert gaat nog verder met naamvogel3 naamvogel4 enz. enz.
Dit is een stukje van de rest

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added in kweker";


if (!mysql_query($sql2,$con))
{
die('Error: ' . mysql_error());
}
echo "<br>1e record added in bestelling";
Zo das lekker, pleurt zonder enkele controle zomaar de $_POST waarde de tabel in.

Zorg dat magic_qoutes_gpc op off staat en gebruik dan _real_escape_string()

<?php
if ($_SERVER['REQUEST_METHOD']=='POST') {
// hier controleer je dan het een en ander

}
?>

En waarom z'n onhandig form, gebruik arrays in je form:

<input name="record[1][naamvogel]" ..... />
<input name="record[1][maat]" ..... />
<input name="record[1][volgnummer]" ..... />
<input name="record[1][aantal]" ..... />
<input name="record[1][gekl]" ..... />
<input name="record[1][gekleurdgeanodiseerd]" ..... />
<input name="record[1][aluminium]" ..... />
<input name="record[1][rvs]" ..... />
<input name="record[1][prijsvogel]" ..... />

<input name="record[2][naamvogel]" ..... />
<input name="record[2][maat]" ..... />
<input name="record[2][volgnummer]" ..... />
<input name="record[2][aantal]" ..... />
<input name="record[2][gekl]" ..... />
<input name="record[2][gekleurdgeanodiseerd]" ..... />
<input name="record[2][aluminium]" ..... />
<input name="record[2][rvs]" ..... />
<input name="record[2][prijsvogel]" ..... />

enz..

dan kan je veel makkelijker door de $_POST wandelen en de waarden van 1 bestelregel controleren of alles wel correct is ingevuld.

Ja, maar ik ben ook nog maar drie weken met php bezig en ben je nu al kwijt met wat je me probeert duidelijk te maken. Het niet invullen van een regel is niet perse fout, maar als er niets is ingevuld moet deze regel niet de database in en daar kom ik niet uit
Controleren of er iets is ingevuld kan je als volgt doen:

<?php
if(!empty($_POST['waarde'])){
//iets doen
}else{
//niks doen dus misschien de else weglaten ;)
}
?>
@Crispijn
Controleren of een post value een lege string is doe je niet met empty!!
De beste methode is altijd nog:
<?php
if ($_POST['aantal']!='') {
//post string is niet leeg
// als je weet dat een $_POST numeriek moet zijn dan kan je er nog
// tegen aangooien is_numeric of netter ctype_digit, alleen die laatst is
// niet altijd van toepassing
}
?>

<?php
$x=0;
$y='0';
var_dump(!empty($x)); // geeft false terwijl het true verwacht
var_dump(!empty($y)); // geeft false terwijl het true verwacht
?>

dus gooi empty lekker in de prullenbak, tenzij je voor honderd procent zeker bent dat bovenstaand niet voor kan komen....

Hebt wat inelkaar geflanst met de nadruk op flansen

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);

// connectiet database

// initialisatie
$aFieldsBestelForm = array('naamvogel','maat','volgnummer','aantal','gekl','gekleurdgeanodiseerd','aluminium','rvs','prijsvogel');
$iRecodsBestelForm = 10;
$iFieldsInForm     = count($aFieldsBestelForm);
$aErrorForRecord =array();

function checkPostedRecord($aRecord,$aFieldsBestelForm,$iFieldsInForm) {

	foreach ($aFieldsBestelForm as $key => $value) {		
		
		if (trim($aRecord[$value])=='') {
			return false;
			break;
		}
	}
	
	return true;
}

// post afhandeling
if ($_SERVER['REQUEST_METHOD']=='POST') {
	
	for ($iPostRecord=0;$iPostRecord<$iRecodsBestelForm;$iPostRecord++) {
		
		if (isset($_POST['record'][$iPostRecord])) {
			if (checkPostedRecord($_POST['record'][$iPostRecord],$aFieldsBestelForm,$iFieldsInForm)) {
				// poster record is goedgekeurd om in de database op te slaan
				
				
				$sql = "INSERT INTO bestelling (soort, ringmaat, volgnr, aantal, gekleurd, geannodiseerd, aluminium, rvs, bedrag)
						VALUES {
						'".mysql_real_escape_string($_POST['record'][$iPostRecord]['naamvogel'])."',
						'".mysql_real_escape_string($_POST['record'][$iPostRecord]['maat'])."',
						'".mysql_real_escape_string($_POST['record'][$iPostRecord]['volgnummer'])."',
						'".mysql_real_escape_string($_POST['record'][$iPostRecord]['aantal'])."',
						'".mysql_real_escape_string($_POST['record'][$iPostRecord]['gekl'])."',
						'".mysql_real_escape_string($_POST['record'][$iPostRecord]['gekleurdgeanodiseerd'])."',
						'".mysql_real_escape_string($_POST['record'][$iPostRecord]['aluminium'])."',
						'".mysql_real_escape_string($_POST['record'][$iPostRecord]['rvs'])."',
						'".mysql_real_escape_string($_POST['record'][$iPostRecord]['prijsvogel'])."'						
						)";
						
				if (!$result = mysql_query($sql)) {
					$aErrorForRecord[] = 'Bestelregel '.$iPostRecord.' is niet opgenomen in uw bestelling, wegens fout in verwerking!';
				}
				else {
					echo 'Bestelregel: '.$iPostRecord.' is OK<br>';
				}

				
			}
			else {
				$aErrorForRecord[] = 'Bestelregel '.$iPostRecord.' is niet opgenomen in uw bestelling';
			}
		}
		else {
			$aErrorForRecord[] = 'Bestelregel '.$iPostRecord.' is niet opgenomen in uw bestelling';
		}
	}

}

// output
echo '<html>';
echo '<head>';
echo '<title>Bestel Formulier</title>';
echo '</head>';

echo '<body>';
if (count($aErrorForRecord)>0) {
	echo '<pre>'.PHP_EOL;
	echo implode('<br>'.PHP_EOL,$aErrorForRecord);
	echo '</pre>'.PHP_EOL;
}

echo '<form name="BestelForm" method="post" action="">';

for ($i=0;$i<$iRecodsBestelForm;$i++) {
	for ($f=0;$f<$iFieldsInForm;$f++) {
		echo $aFieldsBestelForm[$f].': <input name="record['.$i.']['.$aFieldsBestelForm[$f].'] type="text" maxlength="20" /><br>'.PHP_EOL;
	}
}
echo '<input name="bf" type="submit" value="Bestel" />';
echo '</form>';
echo '</body>';
echo '</html>';

?>


Dan krijg je een indruk van hoe wat waar en hoe.......
Kijk, dat is helpen ;-)

Tip: die break na de return is niet nodig.

<?php
    if (trim($aRecord[$value])=='') {
      return false;
      break;
   }
?>

Thanks, Probeer het te begrijpen, ga er mee aan de slag
Om de form input velden wat overzichtelijker te verkrijgen:

<?php
for ($i=0;$i<$iRecodsBestelForm;$i++) {
echo '<br />Bestelregel:'.sprintf('%03s',$i).'<br />'.PHP_EOL;
for ($f=0;$f<$iFieldsInForm;$f++) {
echo str_pad($aFieldsBestelForm[$f],20,'_',STR_PAD_RIGHT).': <input name="record['.$i.']['.$aFieldsBestelForm[$f].'] type="text" maxlength="20" /><br>'.PHP_EOL;
}
}
?>

Reageren