probleme d'actualisation

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme d'actualisation

par Gwena » 31 oct. 2005, 03:18

merci bcp!!
c'est vrai que maintenant que tu l'explique c'est tout à fait logique :)

à bientôt peut être et merci!

par Truc » 31 oct. 2005, 02:01

ds le premier cas, qui était traité, il s'agissait de AND, et j'étais exactement ds le meme cas que la premiere personne...
eh bien elle a du se rendre compte toute seule que la requete était mauvaise et changer (on ne saura pas elle n'a pas donné signe de vie depuis :wink: )

Sinon c'est logique le OR.

1. Dans le cas AND id=1 AND id=2:
la requete cherche a supprimer les lignes ayant comme id=1 et id=2, hors toutes les lignes n'ont qu'un seul id ayant une valeur unique, il n'y a donc pas de ligne ayant comme id 1 et en meme temps 2.

2. Dans le cas OR id=1 OR id=2:
la requete supprimera les lignes dont l'id est soit 1 soit 2, elles supprimera donc ces 2 lignes de la BD.

par Gwena » 31 oct. 2005, 01:34

merci beaucoup!
mais je ne comprend pas pourquoi il faut mettre OR au lieu de AND??

ds le premier cas, qui était traité, il s'agissait de AND, et j'étais exactement ds le meme cas que la premiere personne...

donc je n'ai pas trop compris, si tu pouvais m'expliquer le OR je t'en serai vraiment reconnaissant 8)

par Truc » 31 oct. 2005, 00:16

si je ne met pas de $cle ds le foreach il me renvoie simplement ça: id= 97 AND id= 96 AND id= 95
$cle n'a rien a voir dans la requete, on en as pas besoin. $cle correspond a l'indice de ton tableau $box, un indice débute toujours a 0 c'est pour ça que tu as $cle=2 quand tu coche 3 cases [0],[1],[2]

Donc la requete fonctionne bien mais il faut remplcer les "AND" par des "OR".

par Gwena » 30 oct. 2005, 22:18

j'ai un probleme identique, ça fait des jours que je suis la dessus, j'ai essayé d'appliquer la méthode expliquée dans ces quelques pages mais il ne veut rien savoir!!
<form action="<? $PHP_SELF; ?>" method="POST">
 <table width="80%"  border="0" align="center" cellpadding="0" cellspacing="0">
   <?php 
    //requête SQL:
    $sql = "SELECT * FROM news order by date DESC" ;
    $requete = mysql_query( $sql) ;
    while( $result = mysql_fetch_array( $requete ) )
	{




						  
						  
						   ?>
  <tr>
 
    <td width="60" align="center"><b><?php echo ''.$result["id"].''; ?></b></td>
    <td><?php echo ''.$result["titre"].''; ?> </td>
    <td width="60" align="center"><input type="checkbox" name="box[]" value=" <?php echo''.$result["id"].'' ?> "></td>
  </tr>
	<?  
  } ?>  
	</table>
	<?
	
	if (isset($_POST['box'])) 
{ 
   $box=$_POST['box'] ;
   $req=""; 
   foreach ($box as $cle => $id) 
   { 
       $req.=" AND id=".$id; // a chaque tour de boucle il faut ajouter AND id (sauf pour la 1ere valeur) 
   } 
    $req=substr($req,4); //pour enlever le 1er AND 
    mysql_query("DELETE FROM news WHERE ".$req) or die (mysql_error());    
}

echo $req;
echo $cle;

?>

	  <input type="submit" name="submit" value="Envoyer"> 
  
 </form> 
si vous voyez quelque chose de bizarre n'hésitez pas!
je n'arrive pas à supprimer plus de 1 entrée à la fois et le echo $cle me renvoit un truc bizarre: id= 97 AND id= 96 AND id= 95 2
quand je coche 3 entrées et id= 97 AND id= 96 AND id= 95 1 quand j'en coche 2, le chiffre de la fin correspond à $cle

si je ne met pas de $cle ds le foreach il me renvoie simplement ça: id= 97 AND id= 96 AND id= 95

logiquement ça devrait marcher mais la ce n'est pas le cas![/code]

par fab » 22 oct. 2005, 00:58

EDIT: ou alors avec le switch comme proposé, mais en meme temps il n'y a que 2 valeurs possibles ça ne changera pas grand chose Wink

niveau compréhension et flexibilité je préfère :p

par marilou » 21 oct. 2005, 19:31

OK MERCI, c'est exactement ce qui manquais :

Code : Tout sélectionner

$req=substr($req,4); //pour enlever le 1er AND
Pour le bouton c'est parfait marci et bon week-end

par Truc » 21 oct. 2005, 18:17

Vous vous en etes pas vraiment sorti avec cette requete dynamique :wink:
essai comme ceci:
if (isset($_POST['sup']))
{
   $supp=$_POST['supp']
   $req="";
   foreach ($supp as $id)
   {
       $req.=" AND id_auto=".$id; // a chaque tour de boucle il faut ajouter AND id (sauf pour la 1ere valeur)
   }
    $req=substr($req,4); //pour enlever le 1er AND
    mysql_query("DELETE FROM auto WHERE ".$req) or die (mysql_error());   
} 
et en ce qui concerne ton bouton modifier tu lui donne un nom (name="modifier")et au bouton supprimer un autre (name="supprimer"), et en début de fichier tu teste la valeur du bouton récupèré et fait les operations en fonction ce cela:
if (isset($_POST['modifier']))
{
// opération de modifications
}
elseif (isset($_POST['supprimer']))
{
// opération de suppression
}
EDIT: ou alors avec le switch comme proposé, mais en meme temps il n'y a que 2 valeurs possibles ça ne changera pas grand chose :wink:

par fab » 21 oct. 2005, 18:15

c'est mieux de faire un switch
switch($action) {
  case "supprimer":
    // le code correspondant
  break;
  case "modifier":
    // le code correspondant
   break;
}
http://fr.php.net/switch

par isitien » 21 oct. 2005, 18:12

if ($action = 'supprimer')
{
delete
}

if ($action = 'modifier')
{
update
}

par marilou » 21 oct. 2005, 16:15

Oui c'est sur mais je vois pas comment faire autrement.
Par contre je viens de me rendre compte que je dois ajouter la fonction de modification et donc j'aurais le bouton supprimer et le bouton modifier qui sont alimentés par la même checkbox.. Comment peut-on les différencier puisque l'action et totalement différente?

par pitt » 21 oct. 2005, 15:47

le problème c'est que la tu executes a chaque tour de boucle ca prend plus de temps mais bon

par marilou » 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]

par pitt » 21 oct. 2005, 15:37

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

par marilou » 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..