Hallo,

Ik heb een form met 20+ checkboxen en op het moment dat ik deze submit en deze zijn niet ingevuld krijg ik errors. Nu kan ik ze allemaal eerst checken met

<?php

if(isset($_POST['checkbox1'])) {
$test = $_POST['checkbox1'];
}

?>

Maar dat is een beetje veel werk, daarom vraag ik me af of er geen makkelijkere oplossing is?

Groetjes
Ik heb geen idee hoe je het nu doet zodat je errors krijgt. Maar een check lijkt mij wel minimaal.
Bij alle chechboxen die niet ingevuld zijn krijg ik deze error:
Notice: Undefined index

Maar wat ik me dus afvroeg, is of het mogelijk is om in 1x alle checkboxen te checken en niet voor allemaal dat isset stuk te hoeven schrijven.

Een andere oplossing is ook ok, en is het mss handig als ik me source post?
Je zal elke checkbox moeten checken met isset().
Hmm, het werkt nog steeds niet zie hier mijn code:

<?php

include("config.php");
include("checksession.php");

$huisnaam = $_SESSION['huisnaam'];
$waardering_accommodatie = $_POST['waardering'];
$waardering_situering = $_POST['waardering_situering'];

if(isset($_POST['kamer'])) {
$kamer = $_POST['kamer'];
}
else {
$kamer = "";
}
if(isset($_POST['kamer2'])) {
$kamer2 = $_POST['kamer2'];
}
else {
$kamer2 = "";
}
if(isset($_POST['kamer_pension '])) {
$kamer_pension = $_POST['kamer_pension '];
}
else {
$kamer_pension = "";
}
if(isset($_POST['kamer_pension_2'])) {
$kamer_pension_2 = $_POST['kamer_pension_2'];
}
else {
$kamer_pension_2 = "";
}
if(isset($_POST['kamer_in_bb'])) {
$kamer_in_bb = $_POST['kamer_in_bb'];
}
else {
$kamer_in_bb = "";
}
if(isset($_POST['kamer_in_bb2'])) {
$kamer_in_bb2 = $_POST['kamer_in_bb2'];
}
else {
$kamer_in_bb2 = "";
}
if(isset($_POST['kamer_in_particulier'])) {
$kamer_in_particulier = $_POST['kamer_in_particulier'];
}
else {
$kamer_in_particulier = "";
}
if(isset($_POST['kamer_in_particulier_2'])) {
$kamer_in_particulier_2 = $_POST['kamer_in_particulier_2'];
}
else {
$kamer_in_particulier_2 = "";
}
if(isset($_POST['kamer_in_hotel'])) {
$kamer_in_hotel = $_POST['kamer_in_hotel'];
}
else {
$kamer_in_hotel = "";
}
if(isset($_POST['kamer_in_hotel2'])) {
$kamer_in_hotel2 = $_POST['kamer_in_hotel2'];
}
else {
$kamer_in_hotel2 = "";
}
if(isset($_POST['rijtjes_huis'])) {
$rijtjes_huis = $_POST['rijtjes_huis'];
}
else {
$rijtjes_huis = "";
}
if(isset($_POST['hoekwoning'])) {
$hoekwoning = $_POST['hoekwoning'];
}
else {
$hoekwoning = "";
}
if(isset($_POST['vrijstaand_huis'])) {
$vrijstaand_huis = $_POST['vrijstaand_huis'];
}
else {
$vrijstaand_huis = "";
}
if(isset($_POST['twee_onder_een_kap'])) {
$twee_onder_een_kap = $_POST['twee_onder_een_kap'];
}
else {
$twee_onder_een_kap = "";
}
if(isset($_POST['zomerhuis'])) {
$zomerhuis = $_POST['zomerhuis'];
}
else {
$zomerhuis = "";
}
if(isset($_POST['studio_in'])) {
$studio_in = $_POST['studio_in'];
}
else {
$studio_in = "";
}
if(isset($_POST['studio_in2'])) {
$studio_in2 = $_POST['studio_in2'];
}
else {
$studio_in2 = "";
}
if(isset($_POST['studio_in3'])) {
$studio_in3 = $_POST['studio_in3'];
}
else {
$studio_in3 = "";
}
if(isset($_POST['appartement_in'])) {
$appartement_in = $_POST['appartement_in'];
}
else {
$appartement_in = "";
}
if(isset($_POST['appartement_in2'])) {
$appartement_in2 = $_POST['appartement_in2'];
}
else {
$appartement_in2 = "";
}
if(isset($_POST['appartement_in3'])) {
$appartement_in3 = $_POST['appartement_in3'];
}
else {
$appartement_in3 = "";
}
if(isset($_POST['anders'])) {
$anders = $_POST['anders'];
}
else {
$anders = "";
}
if(isset($_POST['anders2'])) {
$anders2 = $_POST['anders2'];
}
else {
$anders2 = "";
}
if(isset($_POST['accommodaties_in_pand'])) {
$accommodaties_in_pand = $_POST['accommodaties_in_pand'];
}
else {
$accommodaties_in_pand = "";
}
if(isset($_POST['entree'])) {
$entree = $_POST['entree'];
}
else {
$entree = "";
}
if(isset($_POST['aantal_personen'])) {
$aantal_personen = $_POST['aantal_personen'];
}
else {
$aantal_personen = "";
}
if(isset($_POST['roken'])) {
$roken = $_POST['roken'];
}
else {
$roken = "";
}
if(isset($_POST['honden'])) {
$honden = $_POST['honden'];
}
else {
$honden = "";
}
if(isset($_POST['aantal_woonlagen'])) {
$aantal_woonlagen = $_POST['aantal_woonlagen'];
}
else {
$aantal_woonlagen = "";
}
if(isset($_POST['aantal_woonlagen2'])) {
$aantal_woonlagen2 = $_POST['aantal_woonlagen2'];
}
else {
$aantal_woonlagen2 = "";
}
if(isset($_POST['woonoppervlakte'])) {
$woonoppervlakte = $_POST['woonoppervlakte'];
}
else {
$woonoppervlakte = "";
}
if(isset($_POST['woonoppervlakt2'])) {
$woonoppervlakt2 = $_POST['woonoppervlakt2'];
}
else {
$woonoppervlakt2 = "";
}
if(isset($_POST['grondoppervlakte'])) {
$grondoppervlakte = $_POST['grondoppervlakte'];
}
else {
$grondoppervlakte = "";
}
if(isset($_POST['grondoppervlakte2'])) {
$grondoppervlakte2 = $_POST['grondoppervlakte2'];
}
else {
$grondoppervlakte2 = "";
}
if(isset($_POST['balkon_oppervlakte'])) {
$balkon_oppervlakte = $_POST['balkon_oppervlakte'];
}
else {
$balkon_oppervlakte = "";
}
if(isset($_POST['balkon_oppervlakte2'])) {
$balkon_oppervlakte2 = $_POST['balkon_oppervlakte2'];
}
else {
$balkon_oppervlakte2 = "";
}
if(isset($_POST['aantal_kamers'])) {
$aantal_kamers = $_POST['aantal_kamers'];
}
else {
$aantal_kamers = "";
}
if(isset($_POST['aantal_kamer2'])) {
$aantal_kamer2 = $_POST['aantal_kamer2'];
}
else {
$aantal_kamer2 = "";
}
if(isset($_POST['aantal_toiletten'])) {
$aantal_toiletten = $_POST['aantal_toiletten'];
}
else {
$aantal_toiletten = "";
}
if(isset($_POST['aantal_toiletten2'])) {
$aantal_toiletten2 = $_POST['aantal_toiletten2'];
}
else {
$aantal_toiletten2 = "";
}
if(isset($_POST['drukte'])) {
$drukte = $_POST['drukte'];
}
else {
$drukte = "";
}
if(isset($_POST['uitzicht_woningen'])) {
$uitzicht_woningen = $_POST['uitzicht_woningen'];
}
else {
$uitzicht_woningen = "";
}
if(isset($_POST['uitzicht_duinen'])) {
$uitzicht_duinen = $_POST['uitzicht_duinen'];
}
else {
$uitzicht_duinen = "";
}
if(isset($_POST['uitzicht_zee'])) {
$uitzicht_zee = $_POST['uitzicht_zee'];
}
else {
$uitzicht_zee = "";
}
if(isset($_POST['uitzicht_plein'])) {
$uitzicht_plein = $_POST['uitzicht_plein'];
}
else {
$uitzicht_plein = "";
}
if(isset($_POST['uitzicht_terras'])) {
$uitzicht_terras = $_POST['uitzicht_terras'];
}
else {
$uitzicht_terras = "";
}
if(isset($_POST['uitzicht_tuin'])) {
$uitzicht_tuin = $_POST['uitzicht_tuin'];
}
else {
$uitzicht_tuin = "";
}
if(isset($_POST['uitzicht_bomen'])) {
$uitzicht_bomen = $_POST['uitzicht_bomen'];
}
else {
$uitzicht_bomen = "";
}
if(isset($_POST['uitzicht_straat'])) {
$uitzicht_straat = $_POST['uitzicht_straat'];
}
else {
$uitzicht_straat = "";
}
if(isset($_POST['uitzicht_zwembad'])) {
$uitzicht_zwembad = $_POST['uitzicht_zwembad'];
}
else {
$uitzicht_zwembad = "";
}
if(isset($_POST['uitzicht_jachthaven'])) {
$uitzicht_jachthaven = $_POST['uitzicht_jachthaven'];
}
else {
$uitzicht_jachthaven = "";
}
if(isset($_POST['uitzicht_dorp'])) {
$uitzicht_dorp = $_POST['uitzicht_dorp'];
}
else {
$uitzicht_dorp = "";
}
if(isset($_POST['uitzicht_anders'])) {
$uitzicht_anders = $_POST['uitzicht_anders'];
}
else {
$uitzicht_anders = "";
}
if(isset($_POST['uitzicht_anders2'])) {
$uitzicht_anders2 = $_POST['uitzicht_anders2'];
}
else {
$uitzicht_anders2 = "";
}

$query = mysql_query("UPDATE accommodaties SET waardering_accommodatie = '$waardering_accommodatie', waardering_situering = '$waardering_situering', 'kamer = '$kamer', kamer2 = '$kamer2', kamer_pension = '$kamer_pension', kamer_pension_2 = '$kamer_pension_2', kamer_in_bb = '$kamer_in_bb', kamer_in_bb2 = '$kamer_in_bb2', kamer_in_particulier = '$kamer_in_particulier', kamer_in_particulier_2 = '$kamer_in_particulier_2', kamer_in_hotel = '$kamer_in_hotel', kamer_in_hotel2 = '$kamer_in_hotel2', rijtjes_huis = '$rijtjes_huis', hoekwoning = '$hoekwoning', vrijstaand_huis = '$vrijstaand_huis', twee_onder_een_kap = '$twee_onder_een_kap', zomerhuis = '$zomerhuis', studio_in = '$studio_in', studio_in2 = '$studio_in2', studio_in3 = '$studio_in3', appartement_in = '$appartement_in', appartement_in2 = '$appartement_in2', appartement_in3 = '$appartement_in3', anders = '$anders', anders2 = '$anders2', accommodaties_in_pand = '$accommodaties_in_pand', entree = '$entree', aantal_personen = '$aantal_personen', roken = '$roken', honden = '$honden', aantal_woonlagen = '$aantal_woonlagen', aantal_woonlagen2 = '$aantal_woonlagen2', woonoppervlakte = '$woonoppervlakte', woonoppervlakt2 = '$woonoppervlakt2', grondoppervlakte = '$grondoppervlakte', grondoppervlakte2 = '$grondoppervlakte2', balkon_oppervlakte = '$balkon_oppervlakte', balkon_oppervlakte2 = '$balkon_oppervlakte2', aantal_kamers = '$aantal_kamers', aantal_kamer2 = '$aantal_kamer2', aantal_toiletten = '$aantal_toiletten', aantal_toiletten2 = '$aantal_toiletten2', drukte = '$drukte', uitzicht_woningen = '$uitzicht_woningen', uitzicht_duinen = '$uitzicht_duinen', uitzicht_zee = '$uitzicht_zee', uitzicht_plein = '$uitzicht_plein', uitzicht_terras = '$uitzicht_terras', uitzicht_tuin = '$uitzicht_tuin', uitzicht_bomen = '$uitzicht_bomen', uitzicht_straat = '$uitzicht_straat', uitzicht_zwembad = '$uitzicht_zwembad', uitzicht_jachthaven = '$uitzicht_jachthaven', uitzicht_dorp = '$uitzicht_dorp', uitzicht_anders = '$uitzicht_anders', uitzicht_anders2 = '$uitzicht_anders2' WHERE huisnaam = '$huisnaam'")
or die(mysql_error());

echo "ok";

?>

En dit is de fout: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''kamer = '', kamer2 = '', kamer_pension = '', kamer_pension_2 = '', kamer_in_bb' at line 1

Wat gaat er mis?

Kilian
Post alléén relevante code en geen compleet script.


Er staat een quote teveel in de query.
Haal $vars buiten quotes.
Script is lek -> sql-injection.
Ik zou het anders doen. Ik zou van 'huis', 'uitzicht', 'toiletten', e.d. arrays maken, waar de gekozen opties in zitten. Dat gaat denk ik veel makkelijker. Dan denk ik ook dat je datamodel niet meer klopt, je zult alles nog eens over moeten denken, en het beter in moeten delen. Soort bij soort, categorie bij categorie. Ga [google]normaliseren[/google] ; ), zo blijft het enorm veel werk, te veel werk.

In $_POST maak je zo arrays:

<input type="checkbox" name="huis[]" value="Vrijstaand" />
<input type="checkbox" name="huis[]" value="Twee-onder-een-kap" />
<input type="checkbox" name="uitzicht[]" value="Zeezicht" />
<input type="checkbox" name="uitzicht[]" value="Duinzicht" />
enzovoorts...
Waarom heb je zo een super lange code? Je kan dit toch veel makkelijker via een array en for each doen?

edit: van 340 naar 26 regels. Je moet wel zelf de array nog helemaal invullen:

<?php

include("config.php");
include("checksession.php");

$huisnaam = $_SESSION['huisnaam'];
$waardering_accommodatie = $_POST['waardering'];
$waardering_situering =  $_POST['waardering_situering'];

$checkbox_namen = array('kamer."','kamer2."','kamer_pensioen');
foreach($checkbox_namen AS $checkbox)
{
	if(isset($_POST[$checkbox])) {
		${$checkbox} = $_POST[$checkbox];
	}
	else {
		$kamer = "";
	}
}

$query = mysql_query("UPDATE accommodaties SET waardering_accommodatie = '".$waardering_accommodatie."', waardering_situering = '".$waardering_situering."', 'kamer = '".$kamer."', kamer2 = '".$kamer2."', kamer_pension  = '".$kamer_pension."', kamer_pension_2 = '".$kamer_pension_2."', kamer_in_bb = '".$kamer_in_bb."', kamer_in_bb2 = '".$kamer_in_bb2."', kamer_in_particulier = '".$kamer_in_particulier."', kamer_in_particulier_2 = '".$kamer_in_particulier_2."', kamer_in_hotel = '".$kamer_in_hotel."', kamer_in_hotel2 = '".$kamer_in_hotel2."', rijtjes_huis = '".$rijtjes_huis."', hoekwoning = '".$hoekwoning."', vrijstaand_huis = '".$vrijstaand_huis."', twee_onder_een_kap = '".$twee_onder_een_kap."', zomerhuis = '".$zomerhuis."', studio_in = '".$studio_in."', studio_in2 = '".$studio_in2."', studio_in3 = '".$studio_in3."', appartement_in = '".$appartement_in."', appartement_in2 = '".$appartement_in2."', appartement_in3 = '".$appartement_in3."', anders = '".$anders."', anders2 = '".$anders2."', accommodaties_in_pand = '".$accommodaties_in_pand."', entree = '".$entree."', aantal_personen = '".$aantal_personen."', roken = '".$roken."', honden = '".$honden."', aantal_woonlagen = '".$aantal_woonlagen."', aantal_woonlagen2 = '".$aantal_woonlagen2."', woonoppervlakte = '".$woonoppervlakte."', woonoppervlakt2 = '".$woonoppervlakt2."', grondoppervlakte = '".$grondoppervlakte."', grondoppervlakte2 = '".$grondoppervlakte2."', balkon_oppervlakte = '".$balkon_oppervlakte."', balkon_oppervlakte2 = '".$balkon_oppervlakte2."', aantal_kamers = '".$aantal_kamers."', aantal_kamer2 = '".$aantal_kamer2."', aantal_toiletten = '".$aantal_toiletten."', aantal_toiletten2 = '".$aantal_toiletten2."', drukte = '".$drukte."', uitzicht_woningen = '".$uitzicht_woningen."', uitzicht_duinen = '".$uitzicht_duinen."', uitzicht_zee = '".$uitzicht_zee."', uitzicht_plein = '".$uitzicht_plein."', uitzicht_terras = '".$uitzicht_terras."', uitzicht_tuin = '".$uitzicht_tuin."', uitzicht_bomen = '".$uitzicht_bomen."', uitzicht_straat = '".$uitzicht_straat."', uitzicht_zwembad = '".$uitzicht_zwembad."', uitzicht_jachthaven = '".$uitzicht_jachthaven."', uitzicht_dorp = '".$uitzicht_dorp."', uitzicht_anders = '".$uitzicht_anders."', uitzicht_anders2 = '".$uitzicht_anders2' WHERE huisnaam = '".$huisnaam'")
or die(mysql_error());

echo "ok";

?>
En waar is dit voor:

$waardering_accommodatie = $_POST['waardering'];
$waardering_situering =  $_POST['waardering_situering'];

Als $_POST['waardering'] niet geset is, krijg je een notice.
Waarom wordt er niet gewoon een HTML index gecreeerd en die gewoon verwerkt? Naampjes van de index hetzelfde noemen als de velden in de DB.

Komt er dus op neer dat je dan alleen de relevante data verwerkt....


<?php
if (count($_POST) > 0)
{
	$updatesql = array();
	foreach ($_POST['checkbox'] AS $field => $value) $updatesql[] = "`" . mysql_escape_string($field)."`='" . mysql_escape_string($value) . "'";
	$sql = "UPDATE `tablename` SET " . implode(",",$updatesql) . " WHERE `huisnaam`='" . mysql_escape_string($_SESSION['huisnaam']) . "'";
	// Verwerk sql
}
?>
<form method="post" action="">
....
<input type="checkbox" name="checkbox[uitzicht_snackbar]" value="1" />
<input type="checkbox" name="checkbox[uitzicht_mcdonalds]" value="1" />
<input type="checkbox" name="checkbox[uitzicht_hoeren]" value="1" />
....
</form>


Iets in deze geest


Nog iets waar ik me mateloos aan irriteer:

EN GEBRUIK ALLEMAAL EENS EEN ESCAPE FUNCTIE Excuses voor de caps, maar de meeste fouten ontstaan hierdoor!!!! Niemand op dit forum gebruikt het!! Leer het jezelf aan ALTIJD een escape functie te gebruiken ookal komt de parameter van jezelf!!!!
Leon schreef op 11.09.2009 16:13

Nog iets waar ik me mateloos aan irriteer:

EN GEBRUIK ALLEMAAL EENS EEN ESCAPE FUNCTIE Excuses voor de caps, maar de meeste fouten ontstaan hierdoor!!!! Niemand op dit forum gebruikt het!! Leer het jezelf aan ALTIJD een escape functie te gebruiken ookal komt de parameter van jezelf!!!!


Iets "irriteert" je, of je "ergert je aan". "Ik irriteer me aan" is fout Nederlands.
Verder zou ik zeggen: geef het goede voorbeeld in je eigen scripts. Je kunt niet na pas dertien posts stellen dat "niemand" op dit forum het gebruikt. En al die uitroeptekens staan bijzonder schreeuwerig.

Reageren