JeuWeb - Crée ton jeu par navigateur
Problem dans une fonction attaque - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problem dans une fonction attaque (/showthread.php?tid=905)

Pages : 1 2 3 4


RE: Problem dans une fonction attaque - Roworll - 06-03-2007

Cette requete la
Code PHP :
<?php 
$sql
= mysql_query('SELECT `defence` , `force` , `vie` FROM Joueur WHERE Joueur=".$adversaire."') or die(mysql_error());
n'est pas bonne au niveau du WHERE

Il va rechercher la valeur .$adversaire. au lieu de rechercher la valeur 'marco'.

Deux méthode pour la rendre fonctionelle

- Utiliser les double quotes ( " ) pour délimiter la requête
Code PHP :
<?php 
$sql
= mysql_query("SELECT `defence` , `force` , `vie` FROM Joueur WHERE Joueur='$adversaire'") or die(mysql_error());
Dans ce cas, le $adversaire sera remplacé par la valeur a rechercher (comportement spécifique aux double quotes)

- Utiliser les simple quotes ( ' ) pour délimiter la requête
Code PHP :
<?php 
$sql
= mysql_query('SELECT `defence` , `force` , `vie` FROM Joueur WHERE Joueur=\' '.$adversaire.'\' ') or die(mysql_error());
Cela oblige a "échapper" les guillemets (avec le \' ) pour poivoir les insérer en tant que délimiteur dans la requête.

Dans les deux cas, en supposant que $adversaire ait pour valeur 'marco', le résultat qui sera traité par MySQL sera :
Code PHP :
<?php 
SELECT
`defence` , `force` , `vie` FROM Joueur WHERE Joueur='marco'



RE: Problem dans une fonction attaque - Sephi-Chan - 06-03-2007

Pour trouver les erreurs dans les requêtes, je propose la solution du sprintf().

Ainsi tu fais :

Code PHP :
<?php 
$requete
= sprintf("SELECT `defence` , `force` , `vie` FROM Joueur WHERE Joueur=%s", $adversaire);

echo
$requete;

/*
Ca renverra une expression du style (si tu mets Genosite dans $adversaire, bien entendu) :
SELECT `defence` , `force` , `vie` FROM Joueur WHERE Joueur=Genosite

Donc, en un coup d'oeil tu pourras savoir si ta requête est bonne (ou pas). Et si ça marche, il suffit de mettre la ligne avec le echo en commentaire pour ne pas avoir l'affichage.
Cette notation est bien plus clair, plus facile à sécuriser (on peut utiliser des fonctions). Vous verrez, l'essayer c'est l'adopter (sauf pour ceux qui utilisent une classe). C'est à mon sens l'outil de débuggage de requête le plus pratique.
*/

$sql = mysql_query($requete);

Il faut aussi penser à corriger. Défence ça n'existe pas. En revanche, Défense (et donc defense), oui !


Sephi-Chan


RE: Problem dans une fonction attaque - genosite - 06-03-2007

merci je vais tester tout ca et je vais vous dire si sa marche


RE: Problem dans une fonction attaque - genosite - 06-03-2007

Toujour le meme probleme

la requette marche parfaitement mais je narive pas a afficher les donne force ,defense , vie


RE: Problem dans une fonction attaque - genosite - 06-03-2007

Code PHP :
<?php 
$data
= mysql_fetch_array($sql, MYSQL_ASSOC);
$force=$data["force"];
$defense=$data["defense"];
$vie=$data["vie"];



RE: Problem dans une fonction attaque - Slyvore - 06-03-2007

Pour ma part, dans les requettes, je met des ` ( ALT GR+7) pour isoler tous les champs de la BD

Exemple :
"SELECT `defence` , `force` FROM `Joueur` WHERE `Joueur`=".$adversaire


RE: Problem dans une fonction attaque - genosite - 06-03-2007

oui c deja fait

je ne comprend pas sa menerve


RE: Problem dans une fonction attaque - pascal - 06-03-2007

il manquait des 'apostrophes' autour de %s, car il s'agit d'un texte

Code PHP :
<?php 
$requete
= sprintf("SELECT `defence` , `force` , `vie` FROM Joueur WHERE Joueur='%s' ", $adversaire);

echo
$requete;

A+

Pascal


RE: Problem dans une fonction attaque - Sephi-Chan - 06-03-2007

Et ça te donne quoi quand tu entres la requete directement de PHPmyAdmin ?


Sephi-Chan, (je t'ai ajouté à MSN pour essayer de te dépanner)


RE: Problem dans une fonction attaque - denisc - 06-03-2007

Me fait rire Pascal...
Toujours à utiliser des trucs que tu dois être le seul mettre en oeuvre!
Je te l'ai dit tout à l'heure, je le redit pour les petits développeurs qui ne font pas du PHP et du SQL à longueur de temps comme nous Wink
Le mieux est la chaine à double quotes:
Code PHP :
<?php 
$requete
= "SELECT `defence` , `force` , `vie` FROM Joueur WHERE Joueur='$adversaire'";

echo
$requete;
La variable sera interprétée puisqu'elle est encadrée de " ... "