JeuWeb - Crée ton jeu par navigateur
erreur d'acces DB pour un select - 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 : erreur d'acces DB pour un select (/showthread.php?tid=4045)

Pages : 1 2 3 4 5


erreur d'acces DB pour un select - gameprog2 - 11-09-2010

salut Wink
Pourriez-vous m'aindiquer d'où vient l'erreur ?

La page php me donne cette erreur :
Citation :Parse error: syntax error, unexpected T_IS_NOT_EQUAL in C:\Program Files\EasyPHP-5.3.3\www\testexiste.php on line 12

C'est au niveau de ce code :

$result=mysql_query("SELECT * FROM joueurs WHERE pseudo=$lelogin[0]");



RE: erreur d'acces DB pour un select - Sephi-Chan - 11-09-2010

Colle ce qu'il y à avant.


RE: erreur d'acces DB pour un select - gameprog2 - 11-09-2010

Voilà Wink
Merci de m'aider Wink

<?php
include("connect.php");
if (!$okbase){
echo "Problème de connection à la base de données !";
}else
{
/* Teste si le pseudo $mot existe dans la DB, logue le pseudo dans ce cas sinon affiche la page

html d'inscription */

if ( isset($_COOKIE['khamlogin']) ){
$lelogin=explode('*','khamlogin');
$result=mysql_query("SELECT * FROM joueurs WHERE pseudo=$lelogin[0]");
if(!=$result){
header("location:inscription.html");
}
else{
header("location:jouer.html");
}
}
}

mysql_close();
?>

Le login correspond en cookie à ça : "pseudo*pass"


RE: erreur d'acces DB pour un select - niahoo - 11-09-2010

$result=mysql_query('SELECT * FROM joueurs WHERE pseudo=\''.$lelogin[0].'\';');


Gaffe au cross site scripting. stocker le passe en clair dans un cookie ça craint grave. même stocker le passe crypté ça craint grave.


RE: erreur d'acces DB pour un select - Sephi-Chan - 11-09-2010

Ou plus lisible :


$result = mysql_query("SELECT * FROM joueurs WHERE pseudo = '{$lelogin[0]}';");

Et encore mieux :


$query = sprintf(
"SELECT * FROM joueurs WHERE pseudo = '%s';",
$lelogin[0]
);
$result = mysql_query($query);


Sephi-Chan


RE: erreur d'acces DB pour un select - gameprog2 - 11-09-2010

Merci Wink
Citation :Gaffe au cross site scripting. stocker le passe en clair dans un cookie ça craint grave. même stocker le passe crypté ça craint grave.
Mais comment tu fais alors pour faire passer le pseudo et le pass d'une page à une autre sans que ces données puissent être captées ?
(j'ai une page qui teste si le pseudo et le pass ne sont pas vulgaires ni vides ni le pseudo d'une taille inférieure à 3 caractères, puis j'ai une page qui se connecte à la DB pour vérifier si le pseudo et le pass existent en DB)
C'est le premier problème que j'ai posé quoi :/

En fait le mieux c'est de tout faire avec une seule page mais je ne sais pas éviter ça : être connecté au serveur de DB pendant le remplissage des champs par le joueurs (pour ne pas faire perdre du temps inutile au serveur de DB).

Dans ce que vous avez fait (vos réponses), c'était quoi mon erreur de DB en fait ?
Séphy c'est génial les liens PHP que tu as mis sur les instructions de ton code Wink

ça correspond à quoi les accolades dans ce cas ?
ça m'a l'air propre comme truc Wink
{$lelogin[0]}

J'ai essayé la version niahoo et ça me donne le message :
Citation :Parse error: syntax error, unexpected T_IS_NOT_EQUAL in C:\Program Files\EasyPHP-5.3.3\www\testexiste.php on line 12


<?php
include("connect.php");
if (!$okbase){
echo "Problème de connection à la base de données !";
}else
{
/* Teste si le pseudo $mot existe dans la DB */

if ( isset($_COOKIE['khamlogin']) ){
$lelogin=explode('*','khamlogin');
$result=mysql_query('SELECT * FROM joueurs WHERE pseudo=\''.$lelogin[0].'\';');
if(!=$result){
header("location:inscription.html");
}
else{
header("location:jouer.html");
}
}
}

mysql_close();
?>



RE: erreur d'acces DB pour un select - atra27 - 11-09-2010

Pour info, la connexion est fermée quand le futur joueur remplis les champs vu quelle se ferme a chaque fin d'execution...


RE: erreur d'acces DB pour un select - Sephi-Chan - 11-09-2010

(11-09-2010, 08:40 PM)gameprog2 a écrit : Séphy c'est génial les liens PHP que tu as mis sur les instructions de ton code Wink

ça correspond à quoi les accolades dans ce cas ?
ça m'a l'air propre comme truc Wink
Citation :{$lelogin[0]}

Les liens dans le code, c'est en utilisant la balise BBCode code=PHP, que tu devrais utiliser au lieu des quote et des code.

Concernant les accolades, elles doivent entourer les variables que l'on met dans les chaînes de caractères avec des guillemets double. Ce n'est pas obligatoire pour les variables scalaires, mais ça l'est pour les tableaux et les objets. Mieux vaut les mettre tout le temps. En revanche, je te conseille d'utiliser la technique que je t'ai montré avec le sprintf : c'est beaucoup plus propre.

Et, c'est dingue que tu sois persuadé d'avoir une erreur dans ta requête alors que c'est marqué en gros que c'est une erreur de syntaxe (dû à l'oubli des accolades).

Citation :Parse error: syntax error, unexpected T_IS_NOT_EQUAL


Sephi-Chan


RE: erreur d'acces DB pour un select - gameprog2 - 11-09-2010

Citation :Les liens dans le code, c'est en utilisant la balise BBCode code=PHP, que tu devrais utiliser au lieu des quote et des code.
Oui c'est top ça Wink je vais le faire dorénavant !

Citation :Et, c'est dingue que tu sois persuadé d'avoir une erreur dans ta requête alors que c'est marqué en gros que c'est une erreur de syntaxe (dû à l'oubli des accolades).
Ah oui, mais moi je ne voyais que le résultat, une requete qui ne fonctionne pas Wink (à cause syntaxe il est vrai^^)

Citation :Concernant les accolades, elles doivent entourer les variables que l'on met dans les chaînes de caractères avec des guillemets double. Ce n'est pas obligatoire pour les variables scalaires, mais ça l'est pour les tableaux et les objets. Mieux vaut les mettre tout le temps. En revanche, je te conseille d'utiliser la technique que je t'ai montré avec le sprintf : c'est beaucoup plus propre.
Alors là, sprintf partout maintenant Wink
(enfin quand il faut^^)
Voilà, je l'ai mis et en bbcode PHP Wink
Mais j'ai le message encore :/


<?php
include("connect.php");
if (!$okbase){
echo "Problème de connection à la base de données !";
}else
{
/* Teste si le pseudo $mot existe dans la DB */

if ( isset($_COOKIE['khamlogin']) ){
$lelogin=explode('*','khamlogin');
$result = mysql_query("SELECT * FROM joueurs WHERE pseudo = '{$lelogin[0]}';");
if(!=$result){
header("location:inscription.html");
}
else{
header("location:jouer.html");
}
}
}

mysql_close();
?>



RE: erreur d'acces DB pour un select - niahoo - 11-09-2010

Sephi, je n'ai pas les liens dans mon code PHP, ni la même couleur sur le mysql query. (peut être pasque dans le code que j'ai recopié il n'y avait pas les espaces autour du '=')

Citation :Mais comment tu fais alors pour faire passer le pseudo et le pass d'une page à une autre sans que ces données puissent être captées ?
(j'ai une page qui teste si le pseudo et le pass ne sont pas vulgaires ni vides ni le pseudo d'une taille inférieure à 3 caractères, puis j'ai une page qui se connecte à la DB pour vérifier si le pseudo et le pass existent en DB)
C'est le premier problème que j'ai posé quoi :/

ben c'est exactement ce que je te disais. Tu confonds page et script, tu confonds affichage d'une page à l'utilisateur et démarrage d'un processus, d'une suite d'instructions.

Dans l'exemple que je t'ai donné, quand je mets if($pseudoOk) /* traitement DB */, qu'est-ce qui t'empêche de démarrer ta connexion à ce moment là seulement ? (si vraiment tu ne veux pas avoir ouvert ta connexion auparavant -- mais sans vouloir te vexer, vu ton niveau ça ne devraît pas être ta préoccupation prioritaire..)

Il te faut réorganiser ton code, lui trouver une architecture plus logique. ça ne sert à rien de faire de l'affichage utilisateur pour transférer des données entre deux scripts qui se suivent de manière logique. ça ne se justifierait que si, à cette étape de l'inscription, tu avais besoin de demander quelque chose à l'utilisateur. sinon fous lui la paix, fais bêtement un include de la page suivante pour commencer.