JeuWeb - Crée ton jeu par navigateur

Version complète : erreur d'acces DB pour un select
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Pages : 1 2 3 4 5
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]");
Colle ce qu'il y à avant.
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"
$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.
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
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();
?>
Pour info, la connexion est fermée quand le futur joueur remplis les champs vu quelle se ferme a chaque fin d'execution...
(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
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();
?>
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.
Pages : 1 2 3 4 5