Toon posts:

[PHP] Meerdere checkboxes parsen *

Pagina: 1
Acties:
  • 66 views sinds 30-01-2008

Verwijderd

Topicstarter
Hallo webscripters,

Ik zit met het volgende probleem :

Ik heb een lijst met berichten uit een database met een while loop op het scherm getoverd :

checkbox berichttitel datum

[ ] testbericht1 16-04-2004
[ ] testbericht2 13-04-2004
[ ] testbericht3 12-04-2004
[ ] testbericht4 11-04-2004

Wat het php script moet kunnen, en wat me dus niet lukt, alle afgevinkte checkboxes omzetten in een sql query die dat bericht verwijderen uit de database.

Wat ik gebruik :

php versie : 4
mysql versie : 4

een checkbox voor het bericht ziet er in code zo uit :
code:
1
 <input type="checkbox" name="check[id-nummer]">



Wat moet ik doen om het te laten werken. |:(

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 21:25

gorgi_19

Kruimeltjes zijn weer op :9

Wat heb je tot nu toe al aan PHP code?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 17:09

Super_ik

haklust!

iets met veel ifjes voor elke checkbox en wat . om strings aan elkaar te knopen :?

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • Osiris
  • Registratie: Januari 2000
  • Niet online
PHP:
1
2
3
4
5
6
while ($value = current($_POST["check"])) {
   if ($value == 'on') {
       echo key($array).'<br />';
   }
   next($array);
}


Ipv die echo maak je dan een $query .= ofzo :)

Verwijderd

Wat je nodig hebt:
* Check of $_POST['check'] een array is (is_array)
* Loop door deze array heen (foreach), op values hoef je niet te checken, want alleen gevinkte checkboxjes staan in deze array
* Check of de index van je array numeriek (is_numeric)
* Bak een query met deze index

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 12:41
zodra het form gesubmit wordt zullen alle gecheckte berichten staan in $_POST['check'][idnummer]

voor een query lijkt mij een komma gescheiden lijst van id nummers het handigst..
PHP:
1
2
3
4
$checked_id_array = array_keys($_POST['check']); //haal keys op

$comma_delimited_list = implode(',', $checked_id_array); 
// maak komma gescheiden lijst van values in array


de komma gescheiden lijst van id nrs kan je gebruiken in de mysql IN() functie.

DELETE FROM berichten WHERE id IN(kommagescheiden lijst);

Verwijderd

Topicstarter
Bedankt voor de reacties tot zover.

Ik zal het één en ander gaan proberen.

Verwijderd

Topicstarter
twiekert schreef op 16 april 2004 @ 12:51:
zodra het form gesubmit wordt zullen alle gecheckte berichten staan in $_POST['check'][idnummer]

voor een query lijkt mij een komma gescheiden lijst van id nummers het handigst..
PHP:
1
2
3
4
$checked_id_array = array_keys($_POST['check']); //haal keys op

$comma_delimited_list = implode(',', $checked_id_array); 
// maak komma gescheiden lijst van values in array


de komma gescheiden lijst van id nrs kan je gebruiken in de mysql IN() functie.

DELETE FROM berichten WHERE id IN(kommagescheiden lijst);
Dit heb ik nu :

code:
1
2
3
4
$checked_id_array = array_keys($_POST[check]); 
$comma_delimited_list = implode(",", $checked_id_array); 

$delete = mysql_query("DELETE FROM pvm WHERE id IN ('$comma_delimited_list')");


Werkt niet

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 21:25

gorgi_19

Kruimeltjes zijn weer op :9

Output je query eens; ik gok dat je dan de fout zelf wel ziet.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

je gebruikt quotes waar je geen quotes moet gebruiken (om je comma-seperated list), en gebruikt ze niet waar ze wel nodig zijn ($_POST['check']).
Volledig voorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<form method="post" action="<?=$_SERVER['PHP_SELF'];?>">
  <input type="checkbox" name="check[1]" /><br />
  <input type="checkbox" name="check[2]" /><br />
  <input type="checkbox" name="check[3]" /><br />
  <input type="checkbox" name="check[4]" /><br />
  <input type="checkbox" name="check[5]" /><br />
  <input type="submit" />
</form>
<?php

  if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['check'])) {

    $query = 'DELETE FROM table WHERE id IN('.implode(',', array_keys($_POST['check'])).')';

    echo $query;

  }

?>

Intentionally left blank


  • sjoerdb2
  • Registratie: Juli 2001
  • Laatst online: 09-05-2025
je kunt ook check[] gebruiken, er wordt dan gewoon een array gemaakt, beginnend bij check[0]

Verwijderd

Topicstarter
gorgi_19 schreef op 16 april 2004 @ 13:06:
Output je query eens; ik gok dat je dan de fout zelf wel ziet.
Ik heb het nu werkende geloof ik, nu moet ik alleen nog controlleren of er gepost is want het verwerkend script staat in hetzelfde bestand als het formulier.

Als ik de 1e keer de pagina bezoek krijg ik natuurlijk een foutmelding in mijn sql query omdat er niks is verstuurd.

Nu doet ie het geloof ik _/-\o_ thnx

Verwijderd

Topicstarter
crisp schreef op 16 april 2004 @ 13:07:
je gebruikt quotes waar je geen quotes moet gebruiken (om je comma-seperated list), en gebruikt ze niet waar ze wel nodig zijn ($_POST['check']).
Volledig voorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<form method="post" action="<?=$_SERVER['PHP_SELF'];?>">
  <input type="checkbox" name="check[1]" /><br />
  <input type="checkbox" name="check[2]" /><br />
  <input type="checkbox" name="check[3]" /><br />
  <input type="checkbox" name="check[4]" /><br />
  <input type="checkbox" name="check[5]" /><br />
  <input type="submit" />
</form>
<?php

  if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['check'])) {

    $query = 'DELETE FROM table WHERE id IN('.implode(',', array_keys($_POST['check'])).')';

    echo $query;

  }

?>
Dat klopt ja, het werkt nu wel _/-\o_

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

sjoerdb schreef op 16 april 2004 @ 13:10:
je kunt ook check[] gebruiken, er wordt dan gewoon een array gemaakt, beginnend bij check[0]
Dit klopt, maar dan moet je de id's als value opgeven bij je checkboxen:

HTML:
1
2
3
4
5
<input type="checkbox" name="check[]" value="1" /> 
<input type="checkbox" name="check[]" value="2" /> 
<input type="checkbox" name="check[]" value="3" /> 
<input type="checkbox" name="check[]" value="4" /> 
<input type="checkbox" name="check[]" value="5" />


en dan zo:

PHP:
1
$query = 'DELETE FROM table WHERE id IN(' . implode(',', $_POST['check']) . ')';

[ Voor 14% gewijzigd door crisp op 16-04-2004 13:19 ]

Intentionally left blank


  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 24-04 13:47
Ik krijg het zelf maar niet aan de praat, terwijl ik alles goed doe volgens mij.

Pagina met een lijst van te berichten om te verwijderen met checkboxen:
PHP:
1
<input type="checkbox" name="bericht[]" value="<?PHP echo $f_bericht['id']; ?>"></td>


Pagina met de code om ze te verwijderen:
PHP:
1
2
3
4
5
if (isset($_POST['bericht'])) {  
    $berichten = implode(",", $_POST['bericht']); 
    mysql_query("DELETE FROM berichten WHERE id IN('".$berichten."') ") or die ( mysql_error() );
    echo "<br>berichten: ".$berichten;
}

De laatste echo geeft netjes een string zoals bijv: 4,5,12,16,18.

Maar als ik meerdere checkboxen selecteer wordt alleen de laatste verwijderd ?!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 20:41
Waarom gebruik je de id's tussen ' en ' in de where clause? Als het goed is zijn het integers geen strings. Echo die query eens en kijk of daar iets vaags in zit. Of gebruik die ge-echode query om de query handmatig uit te voeren op de database, in console of eventueel phpmyadmin.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

je query komt er zo uit te zien:
code:
1
DELETE FROM berichten WHERE id IN('4,5,12,16,18')

note de quotes om je waarden, die horen daar dus niet.

second note: zomaar de waarden van een POST-var in een query gooien zonder enige vorm van controle is natuurlijk niet so safe; mijn voorbeeld (van vorig jaar) was wat kort-door-de-bocht; uiteraard verdient het aanbeveling de inhoud van deze POST-array vantevoren te controleren.

Intentionally left blank


  • software
  • Registratie: Mei 2003
  • Laatst online: 23-01 18:07
Misschien ben je hier iets mee ?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
            if(!isset($_POST['berichten'])){
                echo "Geen berichten geslecteerd !";
            }else{
                while(list($key,$value) = each($myArray)) { 
                    foreach($myArray AS $key => $value)
                    {
                        for ($n = 0; $n < $aantal; $n++)
                        {
                            if($_POST['berichten'][$n]==$key)
                            {
                                if(!isset($_POST['berichten'][$n])){
                                    echo "Geen berichten geslecteerd !";
                                }else{
                                    echo"$key : $value<br>";
                                    mysql_query("DELETE FROM berichten WHERE id IN('".$value."') ") or die ( mysql_error() );
                                }
                            }
                        }            
                    }
                }
            }

[ Voor 12% gewijzigd door software op 08-04-2005 12:03 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-05 18:51

Creepy

Tactical Espionage Splatterer

En daarbij, is het echt nodig een topic van een jaar oud hiervoor omhoog te kicken? Begin gewoon een nieuw topic als je echt een probleem hebt. Let daarbij wel even op P&W FAQ - De "quickstart".

Als je je query had afgedrukt naar het scherm (zoals crisp laat zien) dan had je het zeer waarschijnlijk meteen gezien :)

Software: als je wat code post, zou je dat misschien van enige vorm van uitleg willen voorzien? Dan valt er makkelijker wat van te leren ;)

[ Voor 17% gewijzigd door Creepy op 08-04-2005 12:04 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.