Aller au contenu
fingolfin

problème requête de type update...

Noter ce sujet :

Recommended Posts

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 :D

Partager ce message


Lien à poster
Partager sur d’autres sites

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;
}

Partager ce message


Lien à poster
Partager sur d’autres sites

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>

Partager ce message


Lien à poster
Partager sur d’autres sites

Quand tu poste la requète affichée sur ton script dans l'onglet SQL de myadmin, elle est correctement effectuée ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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).

Partager ce message


Lien à poster
Partager sur d’autres sites

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());

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par TheRec

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par fingolfin

Partager ce message


Lien à poster
Partager sur d’autres sites

  $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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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']

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :D , pour maisontotale c'est bon, il suffisait de virer la ligne:

maisontotale= htmlentities....

Modifié par fingolfin

Partager ce message


Lien à poster
Partager sur d’autres sites

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...

Partager ce message


Lien à poster
Partager sur d’autres sites

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?)

Partager ce message


Lien à poster
Partager sur d’autres sites

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...

Partager ce message


Lien à poster
Partager sur d’autres sites

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';

}

?>

Partager ce message


Lien à poster
Partager sur d’autres sites

$_SESSION['pseudo'] = '$pseudo';
$_SESSION['password'] = '$password';

Erreur ! :P

$pseudo = $_SESSION['pseudo'];
$password = $_SESSION['password'];

serait déjà mieux ! Tu vas donner comme ça aux variables $pseudo et $password les valeurs de sessions !

Partager ce message


Lien à poster
Partager sur d’autres sites

:o 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é par fingolfin

Partager ce message


Lien à poster
Partager sur d’autres sites

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)...

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par TheRec

Partager ce message


Lien à poster
Partager sur d’autres sites

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;
}


?>

Partager ce message


Lien à poster
Partager sur d’autres sites

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..).

Partager ce message


Lien à poster
Partager sur d’autres sites

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...

Partager ce message


Lien à poster
Partager sur d’autres sites

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']'";

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×