selecteren van de niet geposte velden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Chris Bosmans

chris Bosmans

31/08/2018 20:04:06
Quote Anchor link
vraag

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)
PHP script in nieuw venster Selecteer het PHP script
1
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'");
            }

/*******************************************/
 ?>




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.
 
PHP hulp

PHP hulp

20/04/2024 10:43:42
 
Thomas van den Heuvel

Thomas van den Heuvel

31/08/2018 20:15:25
Quote Anchor link
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.
 
Chris Bosmans

chris Bosmans

31/08/2018 20:24:56
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'].'">';
 }
}

?>


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
 
Thomas van den Heuvel

Thomas van den Heuvel

01/09/2018 00:55:16
Quote Anchor link
Als je dan toch allemaal HTML uitpoept en dit variabel is in sommige delen, maak dan alleen onderscheid in het deel wat echt variabel is.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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
}
?>

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
 
Jan R

Jan R

03/09/2018 10:49:39
Quote Anchor link
je kan ook in de name de id meegeven
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
name="foto_zichtbaar[]"

wordt dan
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
name="foto_zichtbaar[<?php echo $alle_media_row['id']; ?>]"


Deze welke niet in de array staan moeten dan onzichtbaar zijn

Jan
Gewijzigd op 03/09/2018 10:50:04 door Jan R
 
Thomas van den Heuvel

Thomas van den Heuvel

03/09/2018 12:28:20
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.