[PHP/SQL] Problème de requête

Fermé
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 - 12 juil. 2006 à 15:57
pour_quoi_pas Messages postés 40 Date d'inscription mardi 20 juin 2006 Statut Membre Dernière intervention 25 août 2006 - 13 juil. 2006 à 17:21
Bonjour, je suis en train d'essayer de faire un système d'identification, et j'ai un gros soucis sur une requête ...

Je teste si le login existe bien (pour l'identification d'un compte), et si ce n'est le cas j'indique un message d'erreur, sinon je mets à jour des variables.
Voila un bout de mon code :

mysql_connect('localhost', 'root', '') or die("Erreur de connexion au serveur.");
mysql_select_db('cdm') or die("Erreur de connexion a la base de données.");

$query = "SELECT * FROM `acces` WHERE `login` = $login";
$result = mysql_query($query);

if (!mysql_fetch_row($result))
{
echo "<FONT COLOR=\"RED\">Ce login n'existe pas, veuillez recommencer.</FONT><BR><BR>\n";
$erreur=1;
}
else
{
... mise à jour des variables...
}

Ce code provient de ce site (phpbdd) et même en essayant de le modifier, impossible de le faire tourner. Le message d'erreur renvoyé est le suivant :
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\plateau html\Identification.php on line 18
sachant que la ligne 18 correspond à "if (!mysql_fetch_row($result))".

Je sais pas si c'est intéressant, mais si je remplace la ligne 18 par "if !(mysql_fetch_row($result))" [je change juste le ! de place] alors à ce moment la l'erreur devient
Parse error: parse error, expecting `'('' in c:\program files\easyphp1-8\www\plateau html\Identification.php on line 18

Merci beaucoup
A voir également:

8 réponses

Thom@s Messages postés 3412 Date d'inscription mardi 4 mars 2003 Statut Modérateur Dernière intervention 28 septembre 2019 678
12 juil. 2006 à 18:57
Salut !

Essaie comme ca :
mysql_connect('localhost', 'root', '') or die("Erreur de connexion au serveur.");
mysql_select_db('cdm') or die("Erreur de connexion a la base de données.");

$query = "SELECT * FROM acces WHERE login = '".$login."'"; /* apostrophe-guillemets-point puis point-guillemets-apostrophe */
$result = mysql_query($query) or die("Erreur = ".mysql_error()); /* Il vaut mieux s'en assurer */

if (mysql_num_rows($result)<1)
{
echo "<FONT COLOR=\"RED\">Ce login n'existe pas, veuillez recommencer.</FONT><BR><BR>\n";
$erreur=1;
}
else
{
$data = mysql_fetch_array($result);
echo $data['MonChamp1']; 
echo $data['MonChamp2']; /* Ces variables tableaux permettent d'afficher le contenu des champs */
... mise à jour des variables...
} 

A+ :-)
1
ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012 82
12 juil. 2006 à 16:25
Salut,

Je crois que ton test serait plutot
if(!$result) {
echo "<FONT COLOR=\"RED\">Ce login n'existe pas, veuillez recommencer.</FONT><BR><BR>\n";
$erreur=1; 
}
0
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
12 juil. 2006 à 16:30
Oui je le pensais aussi et j'ai essayé, mais du coup il rentre TOUJOURS dans ce cas, même quand le login existe (vérifié avec MySQL) ...
0
ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012 82
12 juil. 2006 à 16:56
Le problème vient aussi de ta requete
En SQL quand tu fais une restriction sur un champs de texte, il faut mettre des guillemets autour du texte.

Essaies cette requete :
"SELECT * FROM `acces` WHERE `login` = \"".$login."\"";


Sans les guillemets autour du champs texte, la requete ne marche pas et te retourne false
0
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
12 juil. 2006 à 18:14
Non non, la requête marche tout à fait, pas de problème de ce côté la ... C'est encore autre chose, mais je ne sais pas quoi ! Parce que mysql_query() renvoie un truc compliqué, et je ne crois pas que ça se résume à true ou false, d'où le passage par mysql_fetch_row().
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012 82
12 juil. 2006 à 18:44
Pour etre sur que ce n'est pas le mysql_query qui foire essaies ca :
$result = @mysql_query($query) or die("Erreur = ".mysql_error());
0
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
13 juil. 2006 à 09:14
Merci beaucoup thomas, j'ai essayé ton code et il fonctionne parfaitement !
0
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
13 juil. 2006 à 09:44
Bon, j'ai un autre petit soucis maintenant, qui est lié à ça ... Ce sont mes fameuses "super variables" qui sont censées savoir si on est identifié ou non ($auth = 0/1) et le niveau d'accès ($level = 0 (admin)/1 (membre)/2 (anonyme)).

Je renvoie les données depuis identification.php par l'URL à index.php, mais dès que je change de page je perd mes variables et je retourne donc à l'état de connexion anonyme, configurée par défaut.

Le site est architecturé de la façon suivante : index.php contient le menu (dont certaines catégories ne sont affichées que si on est d'un niveau minimal), et fait appel via des include à d'autres pages qui se chargent dans une des cellules du tableau principal de index.php. Alors, à moins de modifier tous les liens pour leur passer en paramètre $auth et $level, ce qui en plus de ne pas être très joli faisse des failles de sécurité, je vois pas comment faire. J'ai essayé avec des <INPUT TYPE="hidden" NAME="auth" VALUE=" $auth "> et pareil pour $level, mais comme on ne clique pas sur un bouton submit pour lancer les liens, les données ne sont pas envoyées du formulaire vers la page cible ...

Je sais pas si je suis très clair, mais si quelqu'un sait comment faire des variables globales ! J'ai regardé la doc du site, mais c'est déja ce que j'ai fait (il me semble) ...
0
pour_quoi_pas Messages postés 40 Date d'inscription mardi 20 juin 2006 Statut Membre Dernière intervention 25 août 2006 10
13 juil. 2006 à 17:21
Salut Darshu,

si j'ai bien compris ton problème (garder des valeurs liées à un user suite à son identification, à peu près ??) je te conseille d'aller voir du côté des cookies ou encore (bien plus simple à mon humble avis) du côté des sessions.

Pour les sessions en gros :
- session_start() au début de chaque fichier php
- utilisation de la "super variable" $_SESSION
ex: si identification Ok => $_SESSION['log'] = 'ok'
et après au début de tes autres fichiers (ou scripts) tu testes avec
if (isset($_SESSION['log'])) {
    echo "user connecté";
}
 else { echo "user pas connecté"; }
            


voilà c'est peut être pas très clair donc je te renvoie là https://beaussier.developpez.com/articles/php/session/
(tuto pdf très con mais bien pour les bases)
0