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 - Sephi-Chan - 06-03-2007

pascaltje a écrit :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
Tout juste, je les avais oublié en tappant cet exemple à la sauvette. Merci Smile

denisc a écrit :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 " ... "
Le sprintf() c'est super ! C'est mon copain de débuggage depuis 1 an ^^'.
Et puis la méthode des doubles quotes est moins pratique à mettre en oeuvre.

Avec sprintf() par exemple tu peux faire :

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

Ce qui est très pratique et évite à recourir à des variables intermediaires Smile.
Et également à contrôler le rendu final de la requête grâce à echo (pour tester dans PHPmyAdmin par exemple).


Sephi-Chan, sprintf() c'est bon, mangez-en !


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

lèche bottes Tongue


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

Pas du tout. Regarde mes appréciations, celle de Pascal en particulier ^^.

Citation :Positif: Vraiment bien vu pour le sprintf() pour les requêtes SQL

Et oué, fallait pas m'chercher :p.


Sephi-Chan


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

Bon. J'ai testé chez moi en apportant quelques modifications et ça fonctionne parfaitement :

En prennant cette table, qui ne contient plus d'ambiguités (nom de champ identique au nom de table, nom portant des majuscules foireuses, etc.)

Code :
CREATE TABLE `joueurs` (
  `id_joueur` int(11) NOT NULL auto_increment,
  `joueur` varchar(25) collate latin1_general_ci NOT NULL,
  `force` int(10) NOT NULL,
  `defense` int(10) NOT NULL,
  `vie` int(10) NOT NULL,
  `pa` int(10) NOT NULL,
  PRIMARY KEY  (`id_joueur`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=4 ;

INSERT INTO `joueurs` (`id_joueur`, `joueur`, `force`, `defense`, `vie`, `pa`) VALUES
(1, 'genosite', 12, 6, 23, 10),
(2, 'marco', 10, 7, 10, 5),
(3, 'bill', 15, 3, 30, 4);

Avec ce code j'ai les bons retours :
Code PHP :
<?php 
$rqt
= sprintf("SELECT `defense`, `force`, `vie` FROM joueurs WHERE joueur='%s'", 'genosite');
//echo '<blockquote>',$requete,'</blockquote>';
$exe_rqt = mysql_query($rqt) or die(mysql_error());
$ret_rqt = mysql_fetch_assoc($exe_rqt) or die(mysql_error());
echo
'Défense : ',$ret_rqt['defense'],'<br />';
echo
'Force : ',$ret_rqt['force'],'<br />';
echo
'Vie : ',$ret_rqt['vie'],'<br />';

Me renvoi bien :
Citation :Défense : 6
Force : 12
Vie : 23


Sephi-Chan


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

GENIAL!!!!!!!!!!!!!!!!!!!!!!! merci Sephi-Chan ca marche avec la methode sprintf()


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

Pas de bol, j'utilise intégralement une classe SQL - que je développe au fur et à mesure de mes besoins.

Je ne suis pas d'accord avec le point suivant :
denisc a écrit :Le mieux est la chaine à double quotes
C'est plus long à interpréter car l'analyse de la chaine demande de repérer ce qui est une variable & ce qui n'en est pas une puis de la remplacer parce qui convient bien.

[EDIT]J'allais oublier :
http://lwdev4.free.fr/jeux/test/test3.php ~~> Fatal error: Call to undefined function: attaque() in /mnt/127/free.fr/2/7/lwdev4/jeux/test/test3.php on line 62
Voili voiloou


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

rha lala!

Sephi Chan a raison : une lecture facilitée pour le programmeur ( codage, débuggage, reprise du code...) vaut bien la "perte" d'une fraction de milliseconde à l'exécution.

les chaines à double quotes c'est aussi + simple pour le SQL, car on entoure le texte via des simple quotes; on ve pas pondre un troll, pitié...

A+

Pascal


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

idem dans le sprintf!
sauf qu'au lieu de rechercher la chaine $xxxxx, il faut rechercher la chaine %s pour finalement la remplacer aussi!
En terme de perf, il faudrai faire un bench, mais je reste persuadé que les chaines " " sont plus rapides.

Quand à ma phrase, c'était de toute façon orienté développeur débutant, et non optimisation cycles cpu!


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

rah, mais on s'en fiche du CPU, c'est pas les quotes qui constituent les goulots dans un script, pffff!


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

C'est vrai qu'avec une gueguerre pro-simplequote Vs. pro-doublequote on est pas dans la merde !? Wink
C'est comme l'utilisation des opérateurs , ou . pour concaténer. L'un est plus rapide que l'autre, mais est également moins lisible.

Ou sinon on peut parler des conventions de nommages des variables ?

Ou des différents types d'indentation :

structure_de_langage {
...
}

ou bien

structure_de_langage
{
...
}


Sephi-Chan, Big Grin

pascaltje a écrit :c'est pas les quotes qui constituent les goulots dans un script, pffff!
Pardonne ma curiosité mais, qu'est ce qui constitue les goulots dans un script ? Smile