fingolfin Posté 28 Août 2005 Posté 28 Août 2005 Bonjour tous le monde! Bon déjà je suis nouveau sur ce forum, et je suis en prime débutant en php mysql . Donc voilà, j'essaye de faire un jeu en php, mais j'ai des problèmes concernant les requêtes mysql de type update, car elles update rien du tous.... Voici le code par exemple des maisons niveau 1 (enfin le code mysql): <?mysql_connect ("localhost", "root",""); mysql_select_db("jeuxphp"); if (isset($_POST['maison1'])) { $maison = htmlentities ($_POST['maison1'], ENT_QUOTES); $maisontotale = htmlentities ($_POST['maisontotale'], ENT_QUOTES); $maisontotale = ("maison1 + $maison1"); mysql_query("UPDATE membre SET maison1='$maisontotale' WHERE pseudo='$pseudo' AND password='$password'");} Et donc ce code est censer être bon (a ce qu'on m'as dit lol) mais il n'enregistre strictement rien dans la BDD (mais il n'affiche aucune erreur...). Donc si vosu saviez quoi faire pour corriger ce bug assez soulant
Sarc Posté 28 Août 2005 Posté 28 Août 2005 Un jeu en php... Tu t'attaques pas au plus facile pour commencer ! Pour ton problème, pas facile de voir avec le peu d'informations qu'on a.. Pour faire du debugage, voilà la méthode : Mettre ta requète SQL dans une chaîne, puis l'afficher au lieu de l'exécuter : tu verras si l'affichage de la requète ne peut pas t'apporter un élément de réponse. Si ça paraît toujours bon, tu essayes de l'executer après un copié collé directement dans myadmin, qui te donnera l'erreur si erreur il y a... Donc : <?mysql_connect ("localhost", "root",""); mysql_select_db("jeuxphp"); if (isset($_POST['maison1'])){ $maison = htmlentities ($_POST['maison1'], ENT_QUOTES); $maisontotale = htmlentities ($_POST['maisontotale'], ENT_QUOTES); $maisontotale = ("maison1 + $maison1"); $requete = "UPDATE membre SET maison1='$maisontotale' WHERE pseudo='$pseudo' AND password='$password'"; echo $requete;}
fingolfin Posté 28 Août 2005 Auteur Posté 28 Août 2005 Bah y'a toujours pas d'erreur afficher apriori snif.... Sa ne peut pas venir de phpmyadmin qui bugerait? autrement si sa peut servir le code juste avant la requête pour la maison: <p>Maisons niveau 1:</p> <ul> <li>bois: 0 </li> <li>pierre: 0 </li> <li>or: 0 </li> <li>fer: 0 </li> <br/> </ul> Permet à 2 péons de se loger. <form method="post" action="carac.php"> <input type="post" name="maison1"/> <br /> <input type="submit" value="Construire les maisons" /> </form>
Sarc Posté 28 Août 2005 Posté 28 Août 2005 Quand tu poste la requète affichée sur ton script dans l'onglet SQL de myadmin, elle est correctement effectuée ?
fingolfin Posté 28 Août 2005 Auteur Posté 28 Août 2005 Oui quand je met: UPDATE membre SET maison1='$maisontotale' WHERE pseudo='$pseudo' AND password='$password' Il n'y a aucun problèmes elle est effectuer parfaitement. (du moins y'a pas d'erreur).
TheRec Posté 28 Août 2005 Posté 28 Août 2005 Bonjour, Essaie de remplacer cette ligne : mysql_query("UPDATE membre SET maison1='$maisontotale' WHERE pseudo='$pseudo' AND password='$password'"); par celle-ci pour affiche un message d'erreur s'il y en a un : mysql_query("UPDATE membre SET maison1='$maisontotale' WHERE pseudo='$pseudo' AND password='$password'")or die(mysql_errno().": ".mysql_error());
fingolfin Posté 28 Août 2005 Auteur Posté 28 Août 2005 Bah sa ne met pas d'erreur, mais sa n'affiche toujours rien (enfin sa n'enregistre toujours rien).
Sarc Posté 28 Août 2005 Posté 28 Août 2005 Afficher la requète sur ton écran a donné quoi ? Sur le script que je t'ai donné, il te donnait quel résultat à l'écran ?
TheRec Posté 28 Août 2005 Posté 28 Août 2005 (modifié) Donc la requête s'effectue sans erreur réellement... maintenant il nous faut savoir si dans les variable $pseudo et $password il existe bien ce que tu souhaites. Si elles étaient vide cela ne corresponderait sûrement à aucune des enregistrements de ta base. La même chose se produit si tu as des différences, suivant les cas aussi des différences de casse (majuscules/minuscules), aucun enregistrement ne correspond, l'update ne se fait pas mail la requête n'a pas rencontré d'erreur. Je remarque également que tu n'utilise pas les tableau de super-globales $_GET ou $_POST (**EDIT** je prale de $pseudo et $password) ce qui va te poser des problèmes de sécurité... dans ton example, si tu n'initialise pas $pseudo et $password l'utilisateur par simple modification de l'URL de ta page (par exemple : page.php?pseudo=admin&password=1234) essayer de changer les informations pour l'utilisateur "admin"... Ce n'est pas tout à fait le sujet du message mais je tiens juste à te mettre en garde.. Modifié 28 Août 2005 par TheRec
fingolfin Posté 28 Août 2005 Auteur Posté 28 Août 2005 (modifié) Bah sa me dit que pseudo et password sont pas définit, et maisontotale aussi. (ce qui est bizard car elle est définit une ligne au dessus ) --> réponse à sarc Euh non je n'utilise pas les superglobales.... c'est important pour que sa marche ou c'st juste pour la sécurité? (+ la réponse de sarc pour l'inéxistence du pseudo et du pass) Modifié 28 Août 2005 par fingolfin
Sarc Posté 28 Août 2005 Posté 28 Août 2005 $maisontotale = htmlentities ($_POST['maisontotale'], ENT_QUOTES); il n'y a pas de variable maisontotale dans ton formulaire, donc effectivement ça sera pas vraiment défini ici ! $maisontotale = ("maison1 + $maison1"); les parenthèses autour des guillemets sont inutiles.. et $maison1 n'aura pas de valeur, vu que tu as appelé la variable $maison au dessus qui va rechercher l'info envoyée par le formulaire ! $pseudo et $password n'ont l'air définies nulle part effectivement : ce sont sûrement des infos contenus dans les cookies , et vérifiées dans un fichier que tu veux faire non ?
TheRec Posté 28 Août 2005 Posté 28 Août 2005 Ha j'ai corrigé en même temps que toi dans mon message...j'ai du mal lire à la base Concernant $pseudo et $password, comme je te l'ai dit, s'il sont vide cela n'engendre pas d'erreur avec la commande UPDATE. Simplement il ne trouve aucun enregsitrement à mettre à jour... A toi de mettre les bonne valeures dans ces champs... je suppose que tu utilise une session pour idneitifer ton utilisateur donc il est probable que tu aies utilisé des variables de session qui seront accessibles comme ceci : $_SESSION['pseudo'] et $_SESSION['password']
fingolfin Posté 28 Août 2005 Auteur Posté 28 Août 2005 (modifié) Bah c'est censer être les pseudos et password du joueur qui sont retenu dans la page membre.php qui initialise la sessions (donc il est en include en début de page). Pour maisontotale je croyais que l'ont pouvaient faire des clacul du genre avec une variable qui servirait juste de résultat donc qui ne serait pas définit dans le formulaire.--> réponse pour scar Euh oui normalement c'est censer être accessible comme sa, mais quand je note $_SESSION['pseudo'] $_SESSION['password'] au lieu de: $pseudo $password bah l'ordi me dit que c'est faux.... Pour maisontotale c'est pas undifined varibla mais undifined index par contre... Trois éditage sa ne feras de mal à persone , pour maisontotale c'est bon, il suffisait de virer la ligne: maisontotale= htmlentities.... Modifié 28 Août 2005 par fingolfin
Sarc Posté 28 Août 2005 Posté 28 Août 2005 Juste une petite chose : essaye d'écrire sans trop de fautes de frappes, d'autres pourraient être plus vexés que moi de lire le pseudo écorché... <?mysql_connect ("localhost", "root",""); mysql_select_db("jeuxphp"); if (isset($_POST['maison1'])){ $maison = htmlentities ($_POST['maison1'], ENT_QUOTES); $maisontotale = "maison1 + $maison"; mysql_query("UPDATE membre SET maison1='$maisontotale' WHERE pseudo='$pseudo' AND password='$password'");} Si tu fais ce code, tu auras, si tu choisis "appartement" dans le formulaire la variable $maisontotale avec comme valeur "maison1 + appartement". Je ne sais pas si c'est ce que tu recherches comme valeur ? En tout cas, c'est ce que tu laisses supposer dans ton script de départ. Les erreurs que tu faisais sont des erreurs de noms de variables, tu utilises un peu tout, sans trop savoir quoi, donc tu as des erreurs ! Si tu travailles en local, je ne sais pas si les variables sessions marchent bien, à demander aux autres...
fingolfin Posté 28 Août 2005 Auteur Posté 28 Août 2005 Ah bah déja tous est définit avec ton code sarc, autrement je travaille en local et justement j'ai lut dans plusieurs forum que easyphp ne reconnnaissait pas tous le temps les sessions (autrement dans phpconfig j'ai mit de démarrer automatiquement les sessions, sa pourrait coser des problèmes?)
TheRec Posté 28 Août 2005 Posté 28 Août 2005 Il ne doit pas y avoir de problème de variables de sessions si le serveur HTTP, je suppose que comme la majorité des débutants (ce n'est pas péjoratif) tu utilises EasyPHP et dans ce cas les sessions devraient marcher sans problème... mais as-tu fait un "session_start" au début de ta page (ou dans membre.php) ? Sans cela il n'est pas possible d'accéder aux variables de session...
fingolfin Posté 28 Août 2005 Auteur Posté 28 Août 2005 Euh voici mon code de membre.php (donc ce que j'inclu dans toutes les pages): <? session_start(); if(!isset($_SESSION['pseudo'])) { echo "Vous n'êtes pas autoriser à acceder à cette page. Veuillez vous connectez"; include('connexion.php'); exit; $_SESSION['pseudo'] = '$pseudo'; $_SESSION['password'] = '$password'; } ?>
Sarc Posté 28 Août 2005 Posté 28 Août 2005 $_SESSION['pseudo'] = '$pseudo';$_SESSION['password'] = '$password'; Erreur ! $pseudo = $_SESSION['pseudo'];$password = $_SESSION['password']; serait déjà mieux ! Tu vas donner comme ça aux variables $pseudo et $password les valeurs de sessions !
fingolfin Posté 28 Août 2005 Auteur Posté 28 Août 2005 (modifié) Si c'est sa le bug je saute par la fenêtre. edit: Je ne sauterais pas par la fenêtres car c'est encore undifined (j'aurait préférer sauter par la fenêtre du rez de chaussez au cas lol) Pour Therec: je vais voire de suite dans login.php Modifié 28 Août 2005 par fingolfin
TheRec Posté 28 Août 2005 Posté 28 Août 2005 Oui...mais en même temps il a dit que s'il remplaçait dans sa page de base (pas membre.php) $pseudo et $password par $_SESSION['pseudo'] et $_SESSION['password'] et que cela ne marchait pas c'est qu'à la base les variables de sessions n'ont pas été définie...il serait bon de voir ce qui est fait lorsque l'utilisateur s'est correctement identifié (avec, apparemment, connexion.php)...
TheRec Posté 28 Août 2005 Posté 28 Août 2005 (modifié) Un petit "détail" ... <input type="post" name="maison1"/> <br /> dans ta page de base, le type "post" n'existe pas pour la balise <input>... ce champ est tout simplement ignoré lorsque le forumlaire est envoyé... de plus ce champ n'a pas de valeur... je ne sais aps ce qu'il doit contenir..mais un possibilité serait : <input type="hidden" name="maison1" value="nouvelle_maison" /> Maintenant j'ai une question subsidiaire, le champs "maison1" dans ta base de données est-il un entier que tu souhaite incérmenter lorsque l'utilisateur envoi le formulaire ? Modifié 28 Août 2005 par TheRec
fingolfin Posté 28 Août 2005 Auteur Posté 28 Août 2005 Voici le code de login.php (connexion.php n'étant que le formulaire): <?$base = mysql_connect ("localhost", "root", "");mysql_select_db("jeuxphp", $base);if(isset($_POST) && !empty($_POST['pseudo']) && !empty($_POST['password'])) { extract($_POST); $sql = "select password from membre where pseudo='".$pseudo."'"; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $data = mysql_fetch_assoc($req); if($data['password'] != $password) { echo '<p>Mauvais pseudo / password.</p>'; include('index.php'); exit; } else { session_start(); $_SESSION['pseudo'] = $pseudo; echo 'Vous êtes bien logué <br /> <a href="indexmembre.php">Cliquez ici</a> si la redirection ne marche pas.'; include('indexmembre.php'); } }else { echo '<p>vous avez oublié un champs.</p>'; include('connexion.php'); exit;}?>
fingolfin Posté 28 Août 2005 Auteur Posté 28 Août 2005 Euh alors, en regardant un topic sur ce forum j'ai essayer avec "hidden" bah sa fesait tous planter.... enfin je vais réessayer maintenant voire. Maison1 est effectivement un entier (le nombre de maison niveau 1 du joueur), et quand le formulaire est envoyer, sa envoye sur la page des caractéristique du joueur ou normalement s'affiche le nombre de maisons totale (mais la y'a un bug mais sa a rien à voire, enfin je pense pas..).
TheRec Posté 28 Août 2005 Posté 28 Août 2005 J'ai repris ton code pour que cela fonctionne..je ne peux malheureusement pas le tester ...essaie de remplace le code de login.php par ceci : <?$base = mysql_connect ("localhost", "root", "");mysql_select_db("jeuxphp", $base);if(isset($_POST) && !empty($_POST['pseudo']) && !empty($_POST['password'])) { $sql = "select * from membre where pseudo='".$_POST['pseudo']."' AND password='$_POST['password']'"; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); if(mysql_num_rows($req) == 0) { echo '<p>Mauvais pseudo / password.</p>'; include('index.php'); exit; } else { $data = mysql_fetch_array($req); session_start(); $_SESSION['pseudo'] = $data['pseudo']; $_SESSION['password'] = $data['password']; echo 'Vous êtes bien logué <br /> <a href="indexmembre.php">Cliquez ici</a> si la redirection ne marche pas.'; include('indexmembre.php'); } }else { echo '<p>vous avez oublié un champs.</p>'; include('connexion.php'); exit;}?> Ensuite dans ton code de la base de page tu utilises $_SESSION['pseudo'] et $_SESSION['password'] ... et non plus $pseudo et $password. J'ai également enlevé le "extract" ... il est préférable d'utiliser les tableaux de superglobales...
fingolfin Posté 28 Août 2005 Auteur Posté 28 Août 2005 Euh dans le code que tu me donne donc il y a cette erreur apriori: Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\documents and settings\génie\bureau\jeux\login.php on line 6 Et n'ayant jamais eu ce style d'erreur je ne sait pas ce qu'il y a de faux ligne six.... La ligne six donc: $sql = "select * from membre where pseudo='".$_POST['pseudo']."' AND password='$_POST['password']'";
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant