Une erreur introuvable

Résolu
Meta-Dark -  
 loupius -
Bonjour,

Je galère depuis plusieurs heures, je voulais trouver l'erreur moi même mais franchement je n'y arrive pas.
Apparemment, ça bloque au while car un echo de $nomobjet ne m'affiche rien.

J'ai bien une table qui s'appelle objets, et la variable $attaque existe bien.

Un résultat apparait forcément a la query, j'ai essayé la requête avec une Potion qui m'a affiché un résultat sur PhpMyAdmin

mysql_select_db("objets");
				
				$objetZ = mysql_query("SELECT * FROM objets WHERE `nom` = '$attaque'");
				
				while($objetX = mysql_fetch_array($objetZ))
				{
					$nomobjet = $objetX['nom'];
					$soinPV = $objetX['valeur'];
					$soinPM = $objetX['valeur2'];
					$type = $objetX['type'];
					
					$Cac = 0;
					
					$_SESSION['PV'] += $soinPV;
					$_SESSION['PV'] += $soinPM;
					$message = "$nom utilise l'objet $nomobjet et restaure $soinPV points de Vie et $soinPM points de Mana.";
					$utilise = 1;
					
					
					
					if($objet10 == "$nomobjet")
					{
						$case = 10;
					}
					elseif($objet1 == "$nomobjet")
					{
						$case = 1;
					}
					elseif($objet2 == "$nomobjet")
					{
						$case = 2;
					}
					elseif($objet3 == "$nomobjet")
					{
						$case = 3;
					}
					elseif($objet4 == $nomobjet)
					{
						$case = 4;
					}
					elseif($objet5 == $nomobjet)
					{
						$case = 5;
					}
					elseif($objet6 == $nomobjet)
					{
						$case = 6;
					}
					elseif($objet7 == $nomobjet)
					{
						$case = 7;
					}
					elseif($objet8 == $nomobjet)
					{
						$case = 8;
					}
					elseif($objet9 == $nomobjet)
					{
						$case = 9;
					}
					
					mysql_select_db("Rpaygay");
					
					$quantiteM = mysql_query("SELECT `quantite $case` FROM Rpaygay WHERE `nom`='$nom', `objet $case`='$nomobjet'") or die (mysql_error());
					while($quantiteW = mysql_fetch_array($quantiteM))
					{
						$quantiteW = $quantiteW['objet $case'];
					}
					$quantiteI = $quantiteW - 1;
					mysql_query("UPDATE Rpaygay SET `quantite $case`='$quantiteI'") or die(mysql_error());
				}
				/* Fin Objets */



J'espere vraiment que vous pourrez m'aider, et de mon côté je vais chercher et vous tiendrais au courant tout en donnant la solution si jamais je met la souris dessus avant vous, merci d'avance !
Configuration: Windows Vista
Firefox 3.0.5

4 réponses

  1. toto
     
    Bonjour

    Modifie le début de ton programme :
    $objetZ = mysql_query("SELECT * FROM objets WHERE `nom` = '$attaque'") or die (mysql_error());
    echo mysql_num_rows($objetZ);
    ça ne va pas corriger l'erreur, mais permettre de la comprendre
    1
  2. william7007 Messages postés 344 Statut Membre 46
     
    bonjour moi je pense que c'est à l'intérieur de ta requete essaie un truc du genre

    $objetZ = mysql_query("SELECT * FROM objets WHERE nom ='".$attaque."'")

    ça devra normalement fonctionner
    0
    1. toto
       
      William, j'aimerais que tu me dises ce qui selon toi est incorrect dans la requête de Meta-Dark et surtout pourquoi c'est incorrect.
      Il n'y a absolument AUCUNE raison que ta requête marche mieux que la sienne.
      Il n'y a AUCUNE raison d'enlever les `` autour du nom de champ de la table, c'est même une bonne habitude qui évite un certain nombre de problèmes.
      Les écritures "..WHERE `nom` = '$attaque'" et "..WHERE nom ='".$attaque."'" sont exactement équivalentes en PHP, alors pourquoi espérer un changement ?

      À moins qu'il y ait autre chose qui m'échappe, bien sûr. Mais j'aimerais que tu me dises quoi.
      0
  3. Meta-Dark
     
    Voila l'erreur retournée :

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' `objet 1`='Potion'' at line 1

    et voila le bout de code concerné :

    $quantiteM = mysql_query("SELECT `quantite $case` FROM Rpaygay WHERE `nom`='$nom', `objet $case`='$nomobjet'") or die (mysql_error());
    


    Est-ce que cela viendrait du fait qu'une variable se trouve dans le nom du champ sélectionné ?

    P.S : c'est vrai qu'il faudrait que je prenne la bonne habitude de mettre un or die sur mes requetes quand je peux, j'y penserais maintenant :)
    0
  4. Meta-Dark
     
    J'ai enfin trouvé l'erreur !

    Voici le bout de code concerné :

    $quantiteM = mysql_query("SELECT `quantite $case` FROM Rpaygay WHERE `nom`='$nom', `objet $case`='$nomobjet'") or die (mysql_error());
    


    et voici le code corrigé :

    $quantiteM = mysql_query("SELECT `quantite $case` FROM Rpaygay WHERE `nom`='$nom' AND `objet $case`='$nomobjet'") or die (mysql_error());
    


    Et oui, j'ai mis une virgule pour séparer deux conditions, alors qu'il fallait utiliser AND. Merci pour votre aide, le problème est RESOLU
    0
    1. loupius
       
      Finalement, l'erreur n'était pas... introuvable ;=)
      0