Posez votre question Signaler

Supprimer entrée SQL via checkbox HTML/PHP [Résolu]

serialtueur 40Messages postés 25 novembre 2008Date d'inscription - Dernière réponse le 16 avril 2009 à 17:52
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.
Lire la suite 

Supprimer entrée SQL via checkbox HTML/PHP »

19 réponses
Réponse
+0
moins plus
up svp ...
Ajouter un commentaire
Réponse
+0
moins plus
Re-up :D
Ajouter un commentaire
Réponse
+0
moins plus
Re-Re-Up, s'il vous plaît ô grands membres, répondez moi :D
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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...
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+.
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.
Ajouter un commentaire
Réponse
+0
moins plus

é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 ?
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+.
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>";
}
........................
/> 
KéKeCest !! - 14 avril 2009 à 23:38
(SEVEN DOWN) != (NONE UP)

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

Amicalement.
Ajouter un commentaire
Réponse
+0
moins plus
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
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>';
?>
Ajouter un commentaire
Réponse
+0
moins plus
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
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.
Ajouter un commentaire
Réponse
+0
moins plus
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+
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+.
KéKiDonc ?? - 16 avril 2009 à 06:37
Re,

Peux tu clore le topic stp ?..

merci.
Ajouter un commentaire
Réponse
+0
moins plus
fait :D encore merci pour tout
Ajouter un commentaire
Ce document intitulé « Supprimer entrée SQL via checkbox HTML/PHP » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?