Une erreur introuvable

Résolu/Fermé
Meta-Dark Messages postés 24 Date d'inscription jeudi 11 décembre 2008 Statut Membre Dernière intervention 1 février 2009 - 6 janv. 2009 à 21:17
 loupius - 7 janv. 2009 à 17:05
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 !

4 réponses

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
william7007 Messages postés 335 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 23 mars 2010 46
7 janv. 2009 à 00:22
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
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
Meta-Dark Messages postés 24 Date d'inscription jeudi 11 décembre 2008 Statut Membre Dernière intervention 1 février 2009 10
7 janv. 2009 à 12:56
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
Meta-Dark Messages postés 24 Date d'inscription jeudi 11 décembre 2008 Statut Membre Dernière intervention 1 février 2009 10
7 janv. 2009 à 17:03
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
Finalement, l'erreur n'était pas... introuvable ;=)
0