selecteren van de niet geposte velden
heb een foto slide show draaien. de gebruiker kan zelf foto's uploaden.
de tabel (media) waar alles instaat ziet er als volgt uit
id--foto_bstnaam--foto_zichtbaar
1 -- foto1.jpg -- 1
2 -- foto2.jpg -- 0
...
in het voorbeeld zal foto 1 zichtbaar zijn en foto 2 niet.
in het admin menu kan hij de foto's zien (mysqli_query while functie)
onder elke foto heb ik een checkbox geplaatst. via deze checkbox kan hij aanduiden (check =1) of de foto zichtbaar moet zijn of niet.
stel nu heb ik 5 foto's in de tabel en foto 1-2-3 zijn zichtbaar (foto_zichtbaar =1) en 4-5 staan op 0.
de while functie duidt de checkboxes correct aan.
als ik deze wil aanpassen bijvoorbeeld 4-5 check en 1-2-3 niet checked en ik post de data (via een form)
dan krijg ik als post 4-5 (active post)
en dan kan ik de desbetreffende velden updaten met een 1 (foto_zichtbaar)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$post_checkbox =$_POST['checkbox'];
/**********aantal checkbox gemarkeerd*******/
$N = count($post_checkbox);
for($i=0; $i < $N; $i++)
{
($post_checkbox[$i] . " ");
/**********update tabel met waar 1 voor geselecteerde items*******/
$sql=mysqli_query($sqllink,"UPDATE media SET foto_zichtbaar=1 WHERE id='$i'");
}
/*******************************************/
?>
$post_checkbox =$_POST['checkbox'];
/**********aantal checkbox gemarkeerd*******/
$N = count($post_checkbox);
for($i=0; $i < $N; $i++)
{
($post_checkbox[$i] . " ");
/**********update tabel met waar 1 voor geselecteerde items*******/
$sql=mysqli_query($sqllink,"UPDATE media SET foto_zichtbaar=1 WHERE id='$i'");
}
/*******************************************/
?>
perfect tot hier.
probleem situeert zich met het volgende
ik zou er moeten voor zorgen dat de foto's die niet meer gechecked zijn (1-2-3) in het voorbeeld ook in mijn tabel update worden naar een 0
hoe kan ik die items selecteren? ben al even aant google-en maar zonder resultaat momenteel.
Niet gecheckte checkboxen worden in het geheel niet gePOST. Weet niet precies hoe je formulier er uitziet, maar als je de waarden van de checkboxen nu de posities laat bevatten, dan weet je wat er wel (en dus ook wat er niet) aangevinkt is.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$alle_media =mysqli_query($sqllink,"SELECT * FROM media ");
while($alle_media_row = mysqli_fetch_array($alle_media))
{
if ($alle_media_row['foto_zichtbaar']==1)
{
echo'<input type="checkbox" name="checkbox[]" value="'.$alle_media_row['id'].'checked ">';
}else{
echo'<input type="checkbox" name="checkbox[]" value="'.$alle_media_row['id'].'">';
}
}
?>
$alle_media =mysqli_query($sqllink,"SELECT * FROM media ");
while($alle_media_row = mysqli_fetch_array($alle_media))
{
if ($alle_media_row['foto_zichtbaar']==1)
{
echo'<input type="checkbox" name="checkbox[]" value="'.$alle_media_row['id'].'checked ">';
}else{
echo'<input type="checkbox" name="checkbox[]" value="'.$alle_media_row['id'].'">';
}
}
?>
de if functie kijkt welke vanuit de tabel welke gelecteerd zijn (foto zichtbaar =1)
en zorgt dat de correct checkboxen zijn gevinkt.
Gewijzigd op 31/08/2018 20:26:01 door chris Bosmans
De quotes van de value kloppen ook niet, iets wat je wellicht eerder was opgevallen door een variant die beter leesbaar was te gebruiken of doordat je de uiteindelijke HTML-source had geinspecteerd.
Daarbij is het niet nodig om de statische delen te echo'en. Je kunt te allen tijde een PHP-blok stoppen en daarna weer starten.
Ook is *alles* selecteren als je maar 1 a 2 kolommen nodig hebt een beetje overkill niet?
Daarnaast doe je er ook verstandig aan om zinnige namen te geven aan formuliervelden, zo vertelt "checkbox" je niet zoveel. Je zou op zijn minst de naam kunnen aanpassen naar de kolom waar dit veld betrekking op heeft.
Een kortere (en kloppende) variant, die misschien weliswaar hetzelfde bereikt maar die wellicht beter leesbaar is, wordt aldus:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$alle_media = mysqli_query($sqllink, 'SELECT id, foto_zichtbaar FROM media');
while ($alle_media_row = mysqli_fetch_array($alle_media)) {
$checked = ($alle_media_row['foto_zichtbaar'] == '1' ? ' checked="checked"' : ''); // let op initiele spatie
?><input type="checkbox" name="foto_zichtbaar[]" value="<?php echo $alle_media_row['id']; ?>"<?php echo $checked; ?>><?php
}
?>
$alle_media = mysqli_query($sqllink, 'SELECT id, foto_zichtbaar FROM media');
while ($alle_media_row = mysqli_fetch_array($alle_media)) {
$checked = ($alle_media_row['foto_zichtbaar'] == '1' ? ' checked="checked"' : ''); // let op initiele spatie
?><input type="checkbox" name="foto_zichtbaar[]" value="<?php echo $alle_media_row['id']; ?>"<?php echo $checked; ?>><?php
}
?>
Ook moet je bij de for-loop in de verwerking rekening houden met het feit dat mogelijk geen enkele checkbox is geselecteerd. In dat geval bestaat $_POST['checkbox'] in het geheel niet, noch is het dan een array...
Om antwoord te geven op je oorspronkelijke vraag: het makkelijkste lijkt mij eerst één UPDATE-query uit te voeren waarmee je alle waarden van foto_zichtbaar uitzet, en vervolgens zet je de aangevinkte checkboxen weer aan, als die er uberhaupt zijn. Op die manier hoef je geen ingewikkelde code te schrijven die allerlei gevalsonderscheiden gaat uitvoeren.
Gewijzigd op 01/09/2018 00:57:09 door Thomas van den Heuvel
wordt dan
Deze welke niet in de array staan moeten dan onzichtbaar zijn
Jan
Gewijzigd op 03/09/2018 10:50:04 door Jan R
Nogmaals kort samengevat, en wellicht beter verwoord: het is makkelijker om alles eerst te DEselecteren met één query (UPDATE tabel SET foto_zichtbaar = 0) en vervolgens de elementen die geselecteerd zijn opnieuw zichtbaar te maken. Dit kan ook in één query door $_POST['checkbox'] te imploden als deze niet leeg is (UPDATE tabel SET foto_zichtbaar = 1 WHERE id IN (<imploded $_POST['checkbox']>)). Je doet er uiteraard wel verstandig aan om na te gaan (validatie) dat $_POST['checkbox'] enkel id's bevat.