Supprimer entrée SQL via checkbox HTML/PHP

Résolu/Fermé
serialtueur Messages postés 49 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 22 octobre 2009 - 12 avril 2009 à 11:00
 gaywild - 10 janv. 2013 à 20:24
Bonjour,
Voici mon problème :
Je crée un site auquel des gens pourront participer en entrant des données dans ma base de données.
Jusque la aucun problème.
Ensuite je voudrais que l'on puisse, à partir de mon panneau d'admin, supprimer des entrées en les selectionnant via une checkbox et un bouton supprimer.
Le problème c'est que je n'ai aucune idée de comment procéder puisque je ne saurais même pas combien il y a d'entrées : Le code est prévu pour toutes les afficher ...

Voici mon code :

<p>Bienvenue dans votre panneau d'administration !<br/><br/><strong>Liste de verbes :</strong><br/>
<form method="post" action="admin.php">
<?php


mysql_connect('sql.free.fr', 'XXXXX', 'XXXXXX');
mysql_select_db("kamoulmots");
$listeverbe = mysql_query("SELECT * FROM kamoulmots WHERE type='verbe'");
$listenom = mysql_query("SELECT * FROM kamoulmots WHERE type='nom'");
$listeadjectif = mysql_query("SELECT * FROM kamoulmots WHERE type='adjectif'");


while ($donnees = mysql_fetch_array($listeverbe) )
 { ?>
<input type="checkbox" name="$donnees['mot']" /><?php echo $donnees['mot']; ?><br />
<?php } ?><br/><input type="submit" value="Supprimer"> </p></form>



<p><strong>Liste de noms :</strong><br/>
 <?php
while ($donnees = mysql_fetch_array($listenom) )
 { ?>

   <input type="checkbox" name="choix" /><?php echo $donnees['mot']; ?><br />
</form>

<?php } ?><br/><input type="submit" value="Supprimer"></p>





<p><strong>Liste d'adjectifs :</strong><br/>
<?php
while ($donnees = mysql_fetch_array($listeadjectif) )
 { ?>
<form method="post" action="admin.php">
    <input type="checkbox" name="choix" /><?php echo $donnees['mot']; ?>  <br />
</form>
<?php } ?><br/><input type="submit" value="Supprimer"></p>



Il y a le bouton supprimer et les checkbox mais je ne sais pas quel "name" leur donner ni comment faire pour supprimer uniquement les entrées sélectionnées...

Merci de votre aide.
A voir également:

10 réponses

serialtueur Messages postés 49 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 22 octobre 2009 80
12 avril 2009 à 23:55
up svp ...
0
serialtueur Messages postés 49 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 22 octobre 2009 80
13 avril 2009 à 11:02
Re-up :D
0
serialtueur Messages postés 49 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 22 octobre 2009 80
13 avril 2009 à 15:36
Re-Re-Up, s'il vous plaît ô grands membres, répondez moi :D
0
KéKeCest !!
13 avril 2009 à 16:16
Bonjour,

Je pense que ce lien vous apportera des solutions qui vont permettront d'avancer pour votre problème de liste de CheckBox :

http://www.phpfrance.com/forums/voir_sujet-5220.php

salutations.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
serialtueur Messages postés 49 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 22 octobre 2009 80
13 avril 2009 à 18:30
Le problème, c'est qu'ils indiquent comment faire avecun nombres précis de checkbox définies par le webmaster. Moi je ne sais pas combien ni quels sont les noms des entrées puisque tout ceci est défini par ma BDD SQL...
0
KéKeCest !!
13 avril 2009 à 18:41
Re,

Relisez bien ce document.

Rien ne vous interdit de mettre une boucle while et de créer autant de checbox que vous récupérez d'enregistrements dans votre BDD.

A chaque entrée récupérée, générez alors une ligne comme celle ci (en PHP bien sur) :

<input type="checkbox" name="langage[]" value=xx> Toto <br> 


Dans "value", stockez simplement dans une variable xx la référence à votre champ récupéré dans votre BDD.

Ensuite, pour la suppression, vous allez parcourir toutes les checkbox :

if (!empty($tabLangages)) {
    foreach($tabLangages as $cle => $valeur) {
        echo $cle.' : '.$valeur.'<br>';
    } 




... et bah $valeur (a priori) contient votre xx stocké - il n'y a plus qu'à supprimer votre enregistrement ayant pour clef la valeur = à $valeur.

C'est correct non ?...

A+.
0
KéKeCest !!
13 avril 2009 à 18:55
J'ajoute encore ceci pour bien comprendre le truc :

while (non_fin_de_BDD)
{
-> Récupérez l'enregistrement xx de la BDD
-> Générez "<input type="checkbox" name="langage[]" value=xx> Toto <br>"
}

En fait à chaque listbox générée, PHP range xx dans l'entrée courante du tableau langage[] et incrémente implicitement son index.

Récupération et suppression :

$tabLangages = (isset($_POST['langage']))?$_POST['langage']:null;

if (!empty($tabLangages)) {
foreach($tabLangages as $cle => $valeur) {
echo $cle.' : '.$valeur.'<br>';
}

$tabLangages récupère le tableau posté et où sont stockées vos valeurs.

$valeur contient alors la valeur à l'entrée courante du tableau que vous parcourez dans le foreach.

Ensuite : DELETE FROM TATA WHERE machin = $valeur

Et voila.
0
serialtueur Messages postés 49 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 22 octobre 2009 80
13 avril 2009 à 19:39

étant donné que mon while se fait ainsi :
while ($donnees = mysql_fetch_array($listeverbe) )

Ceci est il correct ?
<input type="checkbox" name="verbe[]" value="<?php $donnees['id'] ?>" />

Le value=" " va t-il marcher ou je dois le remplacer par quelquechose d'autre ? Par quoi dans ce cas ?
0
KéKeCest !!
13 avril 2009 à 20:02
Re,

Je te conseille plutôt d'ouvrir une balise php, de générer le maximum de code et de fermer à la fin pour éviter de morceler des fragments de balises (pas lisible et forte possibilité d'erreurs).

Sinon tu a compris le principe.

> Je te propose ceci un peu adapté par rapport à ce que tu proposes :

.............. Concentrer au mieux ton code dans une seule balise ............................
<?
.........................
while ($donnees = mysql_fetch_array($listeverbe) ) 
{
 $id = $donnees['id'];
 echo "<input type='checkbox' name='langage[]' value=$id> $id <br>";
}
........................
/> 


Note : il faut quand même afficher quelque chose à l'utilisateur pour ta CheckBox - d'où le $id comme tu peu remarquer juste avant le <br>.

OK - on code déjà ça et on voit après pour la suppression.

A+.
0
KéKeCest !!
13 avril 2009 à 20:09
Bon - je remet ton nom de tableau : verbe[] plutôt que langage []....mais bon.

<?
.........................
while ($donnees = mysql_fetch_array($listeverbe) ) 
{
 $id = $donnees['id'];
 echo "<input type='checkbox' name='verbe[]' value=$id> $id <br>";
}
........................
/> 
0
KéKeCest !!
14 avril 2009 à 23:38
(SEVEN DOWN) != (NONE UP)

Alors cher ami - où en êtes vous de vos CheckBoxes ?...

Amicalement.
0
serialtueur Messages postés 49 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 22 octobre 2009 80
15 avril 2009 à 17:36
Bonjour,


<p>Bienvenue dans votre panneau d'administration !<br/><br/><strong>Liste de verbes :</strong><br/>
<form method="post" action="admin1.php">
<?php


mysql_connect('sql.free.fr', 'XXXX', 'XXXXXX');
mysql_select_db("kamoulmots");
$listeverbe = mysql_query("SELECT * FROM kamoulmots WHERE type='verbe'");
$listenom = mysql_query("SELECT * FROM kamoulmots WHERE type='nom'");
$listeadjectif = mysql_query("SELECT * FROM kamoulmots WHERE type='adjectif'");


while ($donnees = mysql_fetch_array($listeverbe) )
 { ?>

    <input type="checkbox" name="verbe[]" value="<?php $donnees['id'] ?>" /><?php echo $donnees['mot']; ?><br />


<?php } ?><br/><input type="submit" value="Supprimer"> 
<?php
$tabverbes = (isset($_POST['verbe']))?$_POST['verbe']:null;

if (!empty($tabverbes)) {
foreach($tabverbes as $cle => $valeur) {
echo $cle.' : '.$valeur.'<br>'; }

}
mysql_query("DELETE FROM kamoulmots WHERE id = $valeur")
?>
</p></form>



Affiche 0: devant le bouton Supprimer (pas plus d'effets)

Tester la page : http://webmaster.facebook.free.fr/kamoulbox/admin1.php
0
KéKeCest !!
15 avril 2009 à 21:00
Re !!

Voici quelques modifications proposées - n'hésite pas si ta des questions.

En général, habitue toi à essayer de tout "encapsuler" dans des balises PHP pour une meilleure lisibilité - même le code HTML généré.

Note : le problème principal est que tu avais oublié d'inclure ton DELETE dans la boucle foreach - aucune suppression n'était donc effectuée.

A+.

<?php
// Il faut plutôt placer la récupération du POST et la suppression des champs
// AVANT avant l'affichage des champs à l'écran pour une synchro. correcte.
$tabverbes = (isset($_POST['verbe']))?$_POST['verbe']:null;

mysql_connect('sql.free.fr', 'XXXX', 'XXXXXX');
mysql_select_db("kamoulmots");

if (!empty($tabverbes))
{
 foreach($tabverbes as $cle => $valeur)
 {
// Note : il vaut mieux inclure ton DELETE dans ta boucle !!..
// --> histoire que ça supprime toutes les sélections
  $Str_Delete_Valeur = "DELETE FROM kamoulmots WHERE id = '$valeur'";
  mysql_query($Str_Delete_Valeur);
 }
}

// Affichage de la page (en dernier aprés les traitements de suppression - synchro. des champs)
echo "<p>Bienvenue dans votre panneau d'administration !<br/><br/><strong>Liste de verbes :</strong><br/>";

Str_Select_Verbe = "SELECT * FROM kamoulmots WHERE type='verbe'";
Str_Select_Nom = "SELECT * FROM kamoulmots WHERE type='nom'";
Str_Select_Adjectif = "SELECT * FROM kamoulmots WHERE type='adjectif'";

$listeverbe = mysql_query(Str_Select_Verbe);
$listenom = mysql_query(Str_Select_Nom);
$listeadjectif = mysql_query(Str_Select_Adjectif);

echo "<form method='post' action='admin1.php'>";

while ($donnees = mysql_fetch_array($listeverbe) ) 
{
 echo "<input type='checkbox' name='verbe[]' value=$donnees['id']> $donnees['mot']<br>";
}

echo "<br/><input type='submit' value='Supprimer'>"; 
echo '</p></form>';
?>
0
serialtueur Messages postés 49 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 22 octobre 2009 80
15 avril 2009 à 22:28
Bonjour,

Ta ligne "Echo" pour la checkbox me renvoyait une error T_whitespace ' or "
J'ai donc essayé la mienne, sans résultat.

<div id="corps">
<h1>Panneau d'administration</h1>

<?php
// Il faut plutôt placer la récupération du POST et la suppression des champs
// AVANT avant l'affichage des champs à l'écran pour une synchro. correcte.
$tabverbes = (isset($_POST['verbe']))?$_POST['verbe']:null;

mysql_connect('sql.free.fr', 'webmaster.facebook', '01020456');
mysql_select_db("kamoulmots");

if (!empty($tabverbes))
{
 foreach($tabverbes as $cle => $valeur)
 {
// Note : il vaut mieux inclure ton DELETE dans ta boucle !!..
// --> histoire que ça supprime toutes les sélections
  $Str_Delete_Valeur = "DELETE FROM kamoulmots WHERE id = '$valeur'";
  mysql_query($Str_Delete_Valeur);
 }
}

// Affichage de la page (en dernier aprés les traitements de suppression - synchro. des champs)
echo "<p>Bienvenue dans votre panneau d'administration !<br/><br/><strong>Liste de verbes :</strong><br/>";

$Str_Select_Verbe = "SELECT * FROM kamoulmots WHERE type='verbe'";
$Str_Select_Nom = "SELECT * FROM kamoulmots WHERE type='nom'";
$Str_Select_Adjectif = "SELECT * FROM kamoulmots WHERE type='adjectif'";

$listeverbe = mysql_query($Str_Select_Verbe);
$listenom = mysql_query($Str_Select_Nom);
$listeadjectif = mysql_query($Str_Select_Adjectif);

echo "<form method='post' action='admin1.php'>";

while ($donnees = mysql_fetch_array($listeverbe) ) 
{ ?>

  <input type="checkbox" name="verbe[]" value="<?php $donnees['id'] ?>" /><?php echo $donnees['mot']; ?><br />
<?php
}

echo "<br/><input type='submit' value='Supprimer'>"; 
echo '</p></form>';
?>



Merci de ton aide :D
0
KéKeCest !!
15 avril 2009 à 23:06
Re,

OK c'est bon - j'ai compris :

$id = $donnees['id'];
$mot = $donnees['mot'];
echo "<input type='checkbox' name='verbe[]' value='$id'> '$mot' <br>";


--> les variables sont $id et $mot sont nécessaires ici pour éviter ton erreur (problème de ' ').

J'insiste sur le fait de toujours chercher à encapsuler en PHP (:>).

Teste et tient moi au courant.
0
serialtueur Messages postés 49 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 22 octobre 2009 80
15 avril 2009 à 23:24
Rectification :

echo "<input type='checkbox' name='verbe[]' value='$id'> $mot <br>";

Faut pas mettre de ' ' a $mot sinon ca les affiche sur la page. Merci beaucoup ca marche ! Je saurais a qui m'adresser pour la prochaine fois :)

A+
0
KéKeCest !!
15 avril 2009 à 23:31
Re,

OK pour $mot - pas besoin de mettre des ' ' car cette variable n'est pas la valeur de paramètre d'un tag HTML..

Bouh ... ces petites subtilités PHP (:>).

A+.
0
KéKiDonc ??
16 avril 2009 à 06:37
Re,

Peux tu clore le topic stp ?..

merci.
0
Mais vous puvez mettre
echo "<input type='checkbox' name='verbe[]' value='$id'>".$mot."<br>";
Et ça, sans erreur.
0
serialtueur Messages postés 49 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 22 octobre 2009 80
16 avril 2009 à 17:52
fait :D encore merci pour tout
0