Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2852 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  une erreur que j'avais jamais vu

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

une erreur que j'avais jamais vu

n°1529947
thomas0302
Posté le 17-03-2007 à 17:20:59  profilanswer
 

bonjour,
 
pour le nouveau site que je suis en train de créer, j'ai mis un système de membres.
mais quand j'essaye de me conncter, je remplis le formulaire de connexion, je valide et j'ai une erreur bizzare :  

Citation :

Erreur de syntaxe près de 'azerty' à la ligne 1.

(azerty est mon passe pour mes tests)
 
je viens de passer 2 heures a chercher d'où cela pouvait provenir et je voit pas du tout
 
je mettrai mes fichiers demain (et si il y a besoin)

mood
Publicité
Posté le 17-03-2007 à 17:20:59  profilanswer
 

n°1529959
Ayuget
R.oger
Posté le 17-03-2007 à 18:20:27  profilanswer
 

il manque un ; a la ligne 38.
 
Plus sérieusement, sans le code, on pourra pas te dire.

n°1529965
thomas0302
Posté le 17-03-2007 à 18:54:06  profilanswer
 

le code est sur un autre ordi, je l'uploaderai demain
 
mais a la ligne 1 y'a juste

Citation :

<?php


j'ai sauté une ligne avant de commencer a ecrire le reste
 
edit :

Code :
  1. <?php
  2. if( isset($_POST['pseudo']) AND isset($_POST['pass']) ) //si les champs sont remplis
  3. {
  4.  mysql_connect("localhost","root","" ) or die(mysql_error());
  5.  mysql_select_db("test" ) or die(mysql_error());
  6.  $reponse = mysql_query('SELECT * FROM membres WHERE pseudo=\'' .$_POST['pseudo']. ' AND pass=\'' .$_POST['pass']. '') or die(mysql_error()); //on cherche si le membre existe
  7.  while( $donnees = $reponse ) //si les données entrées sont correctes
  8.  {
  9.  $datedefin = time()+365*24*3600;
  10.  setcookie('Pseudo', $donnees['pseudo'] , $datedefin);
  11.  setcookie('Pass', $donnees['pass'] , $datedefin);
  12.  ?><p>Vous êtes à présent connectés<p><?php //on crée les cookies et on informe l'usager
  13.  }
  14. }
  15. else
  16. {?><p>Veuillez remplir tous les champs</p>
  17. <?php }
  18. mysql_close(); //on oublie surtout pas de fermer mysql ?>
  19. <p><a href="index.php">Revenir à la page d'accueil</a></p> <!--dans tous les cas on met un lien vers l'accueil -->

Message cité 1 fois
Message édité par thomas0302 le 18-03-2007 à 17:23:38
n°1530441
dreamkille​r
Posté le 19-03-2007 à 11:38:28  profilanswer
 

euuuuuuuu
y a des truc etranges dans ton code.
Déja il est complet? parceque dans se cas tu le ferme ou le premier <?php??
Ensuite pourquoi tu ferme une balise php pour afficher du texte un simple echo "<p>montexte</p>"; suffit

n°1530458
rufo
Pas me confondre avec Lycos!
Posté le 19-03-2007 à 12:07:15  profilanswer
 

AND, ça existe ça, dans un test php :??: normalement, c'est && qu'il faut utiliser...
if ( (isset($_POST['pseudo'])) && (isset($_POST['pass'])) ) {
...
}

n°1530467
anapajari
s/travail/glanding on hfr/gs;
Posté le 19-03-2007 à 12:20:07  profilanswer
 

Euh, l'erreur de syntaxe est évaluée avant l'éxécution du script donc je vois pas trop comment le azerty viendrait de $_POST.
 
A mon avis tu dois avoir la chaine azerty qui traine quelque part dans du code php...

n°1530470
RiderCrazy
Posté le 19-03-2007 à 12:26:49  profilanswer
 

Code :
  1. mysql_close(); //on oublie surtout pas de fermer mysql ?>


 

Code :
  1. mysql_close(); //on oublie surtout pas de fermer mysql
  2. ?>

serait mieux à mon avis...

n°1530495
nORKy
Grmmph...
Posté le 19-03-2007 à 13:50:45  profilanswer
 

RiderCrazy a écrit :

Code :
  1. mysql_close(); //on oublie surtout pas de fermer mysql ?>


 

Code :
  1. mysql_close(); //on oublie surtout pas de fermer mysql
  2. ?>

serait mieux à mon avis...


 
Pas d'accord. On est pas obligé de fermé la balise PHP à la fin du fichier.
Au contraire, ca évite les erreurs de type 'cannot send header... already send...'
Genre qu'on on oublis des sauts de ligne à la fin du fichier

n°1530497
anapajari
s/travail/glanding on hfr/gs;
Posté le 19-03-2007 à 13:55:51  profilanswer
 

nORKy a écrit :

Pas d'accord. On est pas obligé de fermé la balise PHP à la fin du fichier.
Au contraire, ca évite les erreurs de type 'cannot send header... already send...'
Genre qu'on on oublis des sauts de ligne à la fin du fichier


 [:grinking]  du grand art ...

n°1530509
gatsu35
Blablaté par Harko
Posté le 19-03-2007 à 14:23:33  profilanswer
 

nORKy a écrit :

Pas d'accord. On est pas obligé de fermé la balise PHP à la fin du fichier.
Au contraire, ca évite les erreurs de type 'cannot send header... already send...'
Genre qu'on on oublis des sauts de ligne à la fin du fichier


Ok lol

mood
Publicité
Posté le 19-03-2007 à 14:23:33  profilanswer
 

n°1530514
Master p
My new cock ring :D
Posté le 19-03-2007 à 14:29:30  profilanswer
 

thomas0302 a écrit :

Code :
  1. $reponse = mysql_query('SELECT * FROM membres WHERE pseudo=\'' .$_POST['pseudo']. ' AND pass=\'' .$_POST['pass']. '') or die(mysql_error()); //on cherche si le membre existe



Genre c'est dure de préciser que c'est une erreur mysql [:moule_bite] ?
Une apostrophe est manquante à la fin de la requête, et tu le verrais de suite si tu affichais, en plus de l'erreur sql, la requête elle-même, dans le die().


---------------
HAHAHA I M USING TEH INTERNET
n°1530516
nORKy
Grmmph...
Posté le 19-03-2007 à 14:33:42  profilanswer
 

Master p a écrit :

Genre c'est dure de préciser que c'est une erreur mysql [:moule_bite] ?
Une apostrophe est manquante à la fin de la requête, et tu le verrais de suite si tu affichais, en plus de l'erreur sql, la requête elle-même, dans le die().


 
Presque ca, je dirais même qu'il  manque également, au vu de la façon dont c'est écrit, un inhibiteur.

Code :
  1. $reponse = mysql_query('SELECT * FROM membres WHERE pseudo=\'' .$_POST['pseudo']. ' AND pass=\'' .$_POST['pass']. '\'') or die(mysql_error());

Message cité 1 fois
Message édité par nORKy le 19-03-2007 à 14:33:59
n°1530531
soju
One shot !
Posté le 19-03-2007 à 14:56:46  profilanswer
 

thomas0302 : quant tu auras corrigé l'erreur de syntaxe, prend le temps de te renseigner sur les "injections sql"

n°1530772
thomas0302
Posté le 19-03-2007 à 20:37:01  profilanswer
 

rufo a écrit :

AND, ça existe ça, dans un test php :??: normalement, c'est && qu'il faut utiliser...
if ( (isset($_POST['pseudo'])) && (isset($_POST['pass'])) ) {
...
}


 
bah j'ai deja vu des AND (chez des pros (enfin normalement ^^)) alors je fais pareil :spamafote:
 

anapajari a écrit :

Euh, l'erreur de syntaxe est évaluée avant l'éxécution du script donc je vois pas trop comment le azerty viendrait de $_POST.
 
A mon avis tu dois avoir la chaine azerty qui traine quelque part dans du code php...


 
bah non pourtant
 

RiderCrazy a écrit :

Code :
  1. mysql_close(); //on oublie surtout pas de fermer mysql ?>


 

Code :
  1. mysql_close(); //on oublie surtout pas de fermer mysql
  2. ?>

serait mieux à mon avis...


 
en fait j'ai ajouté le commentaire après, pas fais gaffe
 

Master p a écrit :

Genre c'est dure de préciser que c'est une erreur mysql [:moule_bite] ?  
Une apostrophe est manquante à la fin de la requête, et tu le verrais de suite si tu affichais, en plus de l'erreur sql, la requête elle-même, dans le die().


 
et comment je sais que c'est une erreur sql alors qu'il me dit erreur a la ligne 1 et qu'a la ligne 1 y'a pas de sql

Message cité 1 fois
Message édité par thomas0302 le 19-03-2007 à 20:37:13
n°1530782
Master p
My new cock ring :D
Posté le 19-03-2007 à 20:47:54  profilanswer
 

thomas0302 a écrit :

et comment je sais que c'est une erreur sql alors qu'il me dit erreur a la ligne 1 et qu'a la ligne 1 y'a pas de sql


Réfléchis un peu à ce que tu fais. Tu arrêtes le script si la requête SQL provoque une erreur. Au lieu d'indiquer juste le contenu de l'erreur mysql, tu fais une jolie concaténation genre 'Erreur SQL : '.$sql.'<br />'.mysql_error()
Ça t'inspirera peut-être un peu plus...


---------------
HAHAHA I M USING TEH INTERNET
n°1531154
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 20-03-2007 à 16:22:28  profilanswer
 

soju a écrit :

thomas0302 : quant tu auras corrigé l'erreur de syntaxe, prend le temps de te renseigner sur les "injections sql"


+1

n°1531165
thomas0302
Posté le 20-03-2007 à 16:35:48  profilanswer
 

malgré tous vos conseils, j'ai toujours la meme erreur
 

Code :
  1. <?php
  2. if( isset($_POST['pseudo']) && isset($_POST['pass']) ) //si les champs sont remplis
  3. {
  4.  mysql_connect("localhost","root","" );
  5.  mysql_select_db("test" );
  6.  $reponse = mysql_query('SELECT * FROM membres WHERE pseudo=\'' . $_POST['pseudo'] . ' AND pass=\'' . $_POST['pass'] . '\'') or die(mysql_error()); //on cherche si le membre existe
  7.  if( $donnees = $reponse ) //si les données entrées sont correctes
  8.  {
  9.  $datedefin = time()+365*24*3600;
  10.  setcookie('pseudo', $donnees['pseudo'] , $datedefin);
  11.  setcookie('pass', $donnees['pass'] , $datedefin);
  12.  echo '<p>Vous êtes à présent connectés<p>'; //on crée les cookies et on informe l'usager
  13.  }
  14. }
  15. else
  16. {
  17. echo '<p>Veuillez remplir tous les champs</p>';
  18.  }
  19. mysql_close(); //on oublie surtout pas de fermer mysql  
  20. ?>
  21. <p><a href="index.php">Revenir à la page d'accueil</a></p> <!--dans tous les cas on met un lien vers l'accueil -->

n°1531170
sielfried
Posté le 20-03-2007 à 16:49:30  profilanswer
 

Parce que t'as toujours pas rajouté l'apostrophe manquante... :sleep:  
 
Et +1 pour les injections SQL (mysqli's your friend).


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1531173
thomas0302
Posté le 20-03-2007 à 16:51:47  profilanswer
 

nORKy a écrit :

Presque ca, je dirais même qu'il  manque également, au vu de la façon dont c'est écrit, un inhibiteur.

Code :
  1. $reponse = mysql_query('SELECT * FROM membres WHERE pseudo=\'' .$_POST['pseudo']. ' AND pass=\'' .$_POST['pass']. '\'') or die(mysql_error());



 
j'ai recopié ce qu'on m'a dit ici ;)

n°1531175
sielfried
Posté le 20-03-2007 à 16:53:21  profilanswer
 

Il en manque une autre, ouvre un peu les yeux ou affiche la requête avec un echo, je sais pas... :x


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1531176
omega2
Posté le 20-03-2007 à 16:54:16  profilanswer
 

Voilà ce que donne ta requête :

Code :
  1. SELECT * FROM membres WHERE pseudo='mon pseudo AND pass='motdepasse'


 
 
Elle est où l'erreur à ton avis? ;)
 
En passant comme ca t'as déjà été signalé plus haut sous le terme d' "injection sql" je peux modifier ta requette comme je veux en mettant des mots de passe ou des peudos bidons. En fait, je peux même me conecter sans conaitre le moindre mot de passe et donc me faire passer pour n'importe qui (y compris l'admin)
Exemple :
pseudo saisie = "admin"
mot de passe saisie = " ' or 1=1 or 'pass=' "  
ce qui donnera comme requette (quand t'auras corrigé ton erreur) :
 

Code :
  1. SELECT * FROM membres WHERE pseudo='admin' AND pass=' ' or 1=1 or 'pass=' '


Et voilà, je suis connecté et pourtant je ne conais pas le mot de passe.
 
PS : Dans l'exemple présent, c'est de l'injection sql assez gentille et pourtant potentiellement trés dangeureuse vu que ca permet à n'importe qui de modifier ce qu'il veut dans les limites du systémes d'administration du site. Cependant si la personne s'amuse à faire des requettes imbriqués, (mettre des requettes dans une requette) elle peut bloquer ton serveur sql en saturant le processeur et elle pourrait également modifier les données stockés dans la base.
 
PS2 : En php5 et php6 (le 4 il me semble aussi mais je ne suis pas sur) on peut mettre indifferament "&&" et "AND" ainsi que "||" et "OR". Par contre, "&&" et "||" ont un niveau de priorité différent de "AND" et "OR" ce qui fait que ca peut entrainer des résultats différents dans certains cas.

n°1531177
Master p
My new cock ring :D
Posté le 20-03-2007 à 16:55:37  profilanswer
 

thomas0302 a écrit :

j'ai recopié ce qu'on m'a dit ici ;)


C'est pour ça que je ne t'ai pas donné pas la réponse directement. On t'a dit le problème, tu le résouds, ou sinon tu reviendras une heure après nous dire que t'as une nouvelle erreur.


---------------
HAHAHA I M USING TEH INTERNET
n°1531179
RiderCrazy
Posté le 20-03-2007 à 16:56:03  profilanswer
 

thomas0302 a écrit :

Code :
  1. if( $donnees = $reponse ) //si les données entrées sont correctes



Ton test est foireux là... enfin, ça veut rien dire. $donnees n'est pas initialisé et reponse c'est juste la référence de ta requête.

 

Sinon, faudrait revoir ta requête, l'erreur vient de là [:spamafote]

 
Code :
  1. 'SELECT * FROM membres WHERE pseudo=\'' . $_POST['pseudo'] . '\' AND pass=\'' . $_POST['pass'] . '\''

juste en corrigeant, pas d'amélioration

 

edit: Overburned... poster en bossant, caimal. et gros +1 pour les injections :o


Message édité par RiderCrazy le 20-03-2007 à 16:57:24
n°1531182
Master p
My new cock ring :D
Posté le 20-03-2007 à 16:57:50  profilanswer
 

omega2 a écrit :

PS2 : En php5 et php6 (le 4 il me semble aussi mais je ne suis pas sur) on peut mettre indifferament "&&" et "AND" ainsi que "||" et "OR". Par contre, "&&" et "||" ont un niveau de priorité différent de "AND" et "OR" ce qui fait que ca peut entrainer des résultats différents dans certains cas.


Ce langage est une vaste blague [:dawak]


---------------
HAHAHA I M USING TEH INTERNET
n°1531184
sielfried
Posté le 20-03-2007 à 16:59:25  profilanswer
 

C'est pareil en Ruby, donc ça peut pas être un défaut de PHP. :o


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1531186
thomas0302
Posté le 20-03-2007 à 17:00:07  profilanswer
 

omega2 a écrit :

Voilà ce que donne ta requête :

Code :
  1. SELECT * FROM membres WHERE pseudo='mon pseudo AND pass='motdepasse'


 
 
Elle est où l'erreur à ton avis? ;) en effet, c'est pas beau :ack:
 
En passant comme ca t'as déjà été signalé plus haut sous le terme d' "injection sql" je peux modifier ta requette comme je veux en mettant des mots de passe ou des peudos bidons. En fait, je peux même me conecter sans conaitre le moindre mot de passe et donc me faire passer pour n'importe qui (y compris l'admin)
Exemple :
pseudo saisie = "admin"
mot de passe saisie = " ' or 1=1 or 'pass=' "  
ce qui donnera comme requette (quand t'auras corrigé ton erreur) :
 

Code :
  1. SELECT * FROM membres WHERE pseudo='admin' AND pass=' ' or 1=1 or 'pass=' '


Et voilà, je suis connecté et pourtant je ne conais pas le mot de passe. comment faire pour l'empecher alors ?
 
PS : Dans l'exemple présent, c'est de l'injection sql assez gentille et pourtant potentiellement trés dangeureuse vu que ca permet à n'importe qui de modifier ce qu'il veut dans les limites du systémes d'administration du site. Cependant si la personne s'amuse à faire des requettes imbriqués, (mettre des requettes dans une requette) elle peut bloquer ton serveur sql en saturant le processeur et elle pourrait également modifier les données stockés dans la base.
 
PS2 : En php5 et php6 (le 4 il me semble aussi mais je ne suis pas sur) on peut mettre indifferament "&&" et "AND" ainsi que "||" et "OR". Par contre, "&&" et "||" ont un niveau de priorité différent de "AND" et "OR" ce qui fait que ca peut entrainer des résultats différents dans certains cas.


 

n°1531191
Master p
My new cock ring :D
Posté le 20-03-2007 à 17:05:44  profilanswer
 

sielfried a écrit :

C'est pareil en Ruby, donc ça peut pas être un défaut de PHP. :o


En y repensant, c'est vrai que c'est une fonctionnalité très intéressante [:petrus75]


---------------
HAHAHA I M USING TEH INTERNET
n°1531288
sielfried
Posté le 20-03-2007 à 20:31:04  profilanswer
 
n°1531295
thomas0302
Posté le 20-03-2007 à 20:55:04  profilanswer
 

merci pour le lien (meme si je comprends rien, je relirai ça demain a tête reposée)
 


Message édité par thomas0302 le 22-03-2007 à 16:25:32
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  une erreur que j'avais jamais vu

 

Sujets relatifs
erreur Access Violationerreur en c++ sous ubuntu
Erreur php/mysqlErreur d'affichage du <div> d'une page dans le <div> d'une autre page
Erreur PHP/FTP - Warning: ftp_fget()Erreur Compilation stray '\357'
[Résolu] [Oracle10g] Erreur connexion au serveur[python] erreur que je ne comprends pas
.[RESOLU] 1 erreur de validation (x)HTML 1.0 Transitional
Plus de sujets relatifs à : une erreur que j'avais jamais vu


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR