probleme d'actualisation

marilou
Invité n'ayant pas de compte PHPfrance

21 oct. 2005, 11:45

Salut à tous.
Voila mon problème, j'ais une checkbox qui lorsque je valide le formulaire me supprime à l'aide d'une requête mysql des données de ma table.
Il y a en fait deux problème, lorsque je valide la suppression les données sont supprimer dans la base de donnée par-contre il faut que j'actualise la page de mon site afin de constater leurs suppressions.
L'autre problème et que je n'arrive pas à supprimer deux données à la fois, c'est à dire que lorsque je selectionne deux checkbox cela ne m'en supprime que une.
J'éspère que j'ais été assé clair.. :?
Voici mon code :

Code : Tout sélectionner

<form action="page_membres.php" method="POST" name="test"> <input type="checkbox" name="sup" value="<?php echo($row["id"]); ?>"> <?php if (isset($_POST['sup'])) { mysql_query("DELETE FROM auto WHERE id='".$_POST['sup']."' ") or die (mysql_error()); } ?> <input type="submit" value="supprimer">
Si vous avez une idée. Merci

Eléphant du PHP | 153 Messages

21 oct. 2005, 11:52

Pour commencer je me demande si il ne manque pas le terme multiple dans ton checkbox pour pouvoir en sélectionner plusieurs.

Ensuite tu dois appeler ton checkbox supp[]

Ce qui aura pour effet de stocker toutes les cases cochées dans un tableau sinon il considère que supp vaut seulement la dernière valeur qu'elle a prise et ensuite dans ta page de traitement tu peux utiliser:
$supp=$_POST['supp']
foreach ($supp as $cle => $id){

//ta requête

}
et pour actualiser tu peux faire

Code : Tout sélectionner

<script> window.document.reload(); </script>

Je pense que cela devrait fonctionner

marilou
Invité n'ayant pas de compte PHPfrance

21 oct. 2005, 12:04

Désolé mais je ne vois pas comment utiliser ton code :oops:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 oct. 2005, 12:17

Salut, ton probleme d'acctualisation viens certainement du faite que tu affiche les données puis les supprime, essai en plaçant le code de suppression en début de fichier.

Puis pour la muliséléction faut effectivement rajouter des [] au nom des cases.

Puis pour la suppresion tu a le choix entre 2 types de requete. Soit supprimer les lignes une par unes (donc plein de requetes pas optimal) soit une requete dynamique qui ajoute a chaque case cochée la clause " AND id=$case ".
<?
//ce test en début de fichier
if (isset($_POST['sup'])) 
{
   $supp=$_POST['supp']
   $req="";
   foreach ($supp as $id)
   {
       //code requete dynamique
   }
       mysql_query("DELETE FROM auto WHERE ".$req) or die (mysql_error());
   
}
...
...
?>
<form action="page_membres.php" method="POST"  name="test">
<input type="checkbox" name="sup[]" value="<?php echo($row["id"]); ?>">
<input type="submit" value="supprimer"> 
je te laisse le soin de la requete dynamique pour l'instant, fait des tests si tu n'y arrive pas tu reviendras :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

marilou
Invité n'ayant pas de compte PHPfrance

21 oct. 2005, 13:03

Cela ne fonctionne pas je dois toujours actualiser la page... Pour la requête dynamique je cherche..

Eléphant du PHP | 153 Messages

21 oct. 2005, 14:36

Pour actualiser ta page tu peux mettre après la partie requête

Code : Tout sélectionner

<script> window.location.replace('pages_membres.php'); </script>
Cela rappelera ta page pages_membres et la variable supp n'existera plus donc il passera à la deuxième partie de ton script qui correspond à l'affichage des enregistrements restants

marilou
Invité n'ayant pas de compte PHPfrance

21 oct. 2005, 14:39

J'ais essayé d'envoyer les valeurs à ma requête de suppression mais je n'arrive pas à en éliminer 2 à la fois.

Code : Tout sélectionner

<? if (isset($_POST["supp"])) { $supp=$_POST["supp"]; foreach ($supp as $id) { echo(" <li>". $id ."</li>\n"); } $req=" id_auto = '$id' "; mysql_query("DELETE FROM fk_auto WHERE ".$req." ") or die (mysql_error()); } ?>
J'ai simplement affiché le tableau afin de voir les résultats enregistrés mais je n'arrive pas à les transmettres à ma requête.

Eléphant du PHP | 153 Messages

21 oct. 2005, 14:55

il te manque les and dans ta requête: à chaque nouveau id_auto tu dois mettre and id_auto=x mais ca va poser un problème pour le premier ou le dernier en fonction de où tu places ton and sinon il te reste la solution d'éxécuter la requête à chaque tour de boucle.
Si tu trouves comment faire pour tout faire d'un coup dis le ca m'intéresse aussi

Merci

ViPHP
pjl
ViPHP | 2119 Messages

21 oct. 2005, 15:01

J'ais essayé d'envoyer les valeurs à ma requête de suppression mais je n'arrive pas à en éliminer 2 à la fois.
Lire la FAQ, c'est dedans : http://www.phpfrance.com/forums/voir_sujet-5220.php

Eléphant du PHP | 153 Messages

21 oct. 2005, 15:04

Je ne pense pas que le problème soit celui la la variable est bien récupérée sous forme de tableau.

Je pense que c'est la construction de la requête dynamiquement qui n'est pas au point.

marilou
Invité n'ayant pas de compte PHPfrance

21 oct. 2005, 15:09

C'est juste le problème n'est pas de récupérer les valeurs mais de les transmettres à la requéte.

Eléphant du PHP | 153 Messages

21 oct. 2005, 15:12

Je pense que j'ai trouvé alors tu testes si ta variable existe

ensuite tu comptes ton nombre d'éléments et tu initialises ta requête
$taille=sizeof($supp);
$req="delete from fk_auto where"
ensuite à chaque tour de boucle
foreach($supp as $cle => $id_auto){

$req.="id_auto = {$id_auto} "

if ($cle!=$taille-1){

$req.="and";

}
}
on ajoute une ligne à supprimer et si ce tour ne correspond pas au dernier tour de boucle on ajoute and .

J'éspère que ca marchera

marilou
Invité n'ayant pas de compte PHPfrance

21 oct. 2005, 15:34

J'ais testé mais sans résultat :

Code : Tout sélectionner

delete from fk_auto where id_auto = 12 and
Il faudrais une boucle dans la requête..

Eléphant du PHP | 153 Messages

21 oct. 2005, 15:37

n'éxécute pas ta requête mais affiche la pour voir le résultat

marilou
Invité n'ayant pas de compte PHPfrance

21 oct. 2005, 15:44

J'ais trouvé il suffit d'intégre la requête dans la boucle et elle sera démultiplié :

Code : Tout sélectionner

if (isset($_POST["supp"])) { $supp=$_POST["supp"]; foreach ($supp as $cle => $id) { echo(" <li>". $cle ."</li>\n"); //code requete dynamique mysql_query("DELETE FROM fk_auto WHERE id_auto = $id ") or die (mysql_error()); }
Merci pour votre aide et merci pour l'actualisation[/quote]