Condition - 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 : Condition (/showthread.php?tid=4729) |
Condition - Ksama - 11-04-2010 Bonjour, je reviens encore avec un petit problème (décidément, ça deviens une habitude -.-). Bref, voici mon problème : Pour la création d'une unité, il faut 5 de nourriture. Après l'envoie du formulaire, je met le calcul sur une autre page :
Je reprend la valeur que le joueur a rentré ($_POST['mont']), je la multiplie par 5 et je la compare à une variable qui à pour valeur le nombre de nourriture du joueur ($nourriture). Je fait ça sous forme de condition. Seulement voilà, si je met admettons 5 et que j'ai 10 nourriture, il va bien afficher que je n'ai pas assez de ressources. Mais si je met 1, il va toujours dire que je n'ai pas assez de ressources. Seulement la condition de marche pas, le reste fonctionne. Voilà, j'ai chercher pendants des heures, mais je en trouve pas mon erreur. Merci d'avance pour votre aide. RE: Condition - Ter Rowan - 11-04-2010 le signe <, si tu le remplaces par > ? là ce que je lis c'est que si mont * 5 (soit ce qui doit etre consommé) est inférieur au stock, ça ne marche pas à noter tu pourrais ne faire qu'une seule requête update, puisque tu tapes dans la même table EDIT : et en plus (je pense ton code très critiquable mais bon je ne suis pas assez à niveau pour tout t'expliquer) tu devrais passer par une variable intermédiaire pour ton $_POST['mont'] genre $mont = intval($_POST['mont']); et après utiliser $mont, tu réduiras les risques d'injection SQL RE: Condition - Sephi-Chan - 11-04-2010 Faut-il t'envoyer une fois de plus à la documentation de mysql_fetch_assoc ? Lis, bordel ! Tu gagneras du temps ! La documentation dit clairement : Documentation PHP a écrit :Retourne un tableau associatif de chaînes qui contient la ligne lue dans le résultat result, ou bien FALSE s'il ne reste plus de lignes à lire. Donc ta variable $nourriture contient un tableau, et toi, tu cherches à comparer $_POST['mont'] * 5 à un tableau. Au passage :
Après la déclaration de $nourriture, insert cette ligne :
Tu comprendras que pour avoir la valeur que tu attends, il faut que tu prennes la clé 'nourriture' de ton tableau. Voici donc un fragment de code qui produira le résultat attendu :
Maintenant, petite mise au point. Dans ton autre sujet, je t'avais montré comment faire ta requête, avec un nommage correct des variables ($query, $resource, $result). Je vois que tu n'as pas respecté ça : du coup tu t'es planté. Non seulement tu ne lis pas la documentation, mais en plus tu ne lis pas nos réponses. Ça donne vachement envie de t'aider… Sephi-Chan RE: Condition - Cartman34 - 11-04-2010 Ksama, faire une seule requete est toujours mieux que 2 si ca concerne la même entrée. Si tu commences à faire une requete par champs de ta table que tu veux modifier, t'as pas fini. RE: Condition - Ksama - 11-04-2010 Excusez moi ... D'abord merci pour votre aide. Je ferrai plus attention la prochaine fois. Citation :Non seulement tu ne lis pas la documentation, mais en plus tu ne lis pas nos réponses. Ça donne vachement envie de t'aider…Je lis la documentation et vos réponses, j'ai envi de progresser ... Pour le nom des variables et le code, c'est vrai que je ne suis pas très organiser, je vais arranger ça. Merci pour tout, je vais corriger tout et poster à nouveau, le tout corriger. Edition :
Voilà, j'ai préférer garder le même nombres de requêtes pour mieux m'y retrouver. Ensuite j'ai modifier le nom des variables. J'ai repris le nom des variable que Sephi-Chan m'a proposées mais je les ai changer pour que je comprenne mieux. Merci à tous, j'espère ne plus avoir à vous embêter comme sa. RE: Condition - Sephi-Chan - 11-04-2010 Voilà, si tu y vois plus clair en traduisant, c'est déjà ça de gagné (d'ailleurs, en français, ressource prend deux 's'). Un détail, maintenant, concernant sprintf(). Tu ne dois pas mettre de guillemets simples autour du marqueur %d. Il n'y en a qu'autour des chaînes de caractères %s. Une autre chose bien plus importante : tu ne dois pas utiliser les données qui viennent de $_POST (ou $_GET) directement dans tes requêtes, car un utilisateur peut les modifier. Je t'invite donc à déclarer une variable en début de script pour y stocker la quantité de montgolfières achetées. D'ailleurs il y a encore une faute dans ton paramètres, il faudrait mettre montgolfière au pluriel.
Comme ça, tu es protégé face aux injections SQL : tu as la garantie que ta variable contiendra toujours un nombre (même si on met la chaîne "Jambon fumé" dans ce paramètre). (11-04-2010, 07:11 PM)Ksama a écrit : Merci à tous, j'espère ne plus avoir à vous embêter comme sa. Le problème n'est pas de nous embêter ou pas, c'est d'apprendre de tes erreurs. J'espère au moins que tu ne feras plus celle-ci. Sephi-Chan RE: Condition - php_addict - 11-04-2010 je te conseille egalement de te renseigner les injection de CODE SQL, car tes $_POST ne sont pas du tout sécurisés.... RE: Condition - Cartman34 - 11-04-2010 (11-04-2010, 08:12 PM)Sephi-Chan a écrit :je lui conseillerai même plus: Code PHP :
RE: Condition - php_addict - 11-04-2010 htmlentities($_POST['montgolfieres_achetees']) c'est pas plus judiceux? RE: Condition - Sephi-Chan - 11-04-2010 Rien à voir. htmlentities() doit toujours être utilisé pour l'affichage de texte (à moins d'être sûr de sa source, mais dans le doute, mettez-le. Ça sert à éviter les failles XSS. Ici, c'est pour t'assurer que tu auras un entier et pas une chaîne qui contient du SQL indésirable (une injection). Sephi-Chan |