probleme requet SQL

probleme requet SQL - PHP - Programmation

Marsh Posté le 31-01-2009 à 14:44:11    

Bonjour,
je suis en train de lire un tuto  et je suis arriver a un moment ou on dois crée une connexion et quand j'essaye sa me mais :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM enregistrer WHERE login = "badboys54"' at line 2
 
et voila le code  :
 

Code :
  1. <?php
  2. session_start();
  3. ?>
  4. <?php
  5. // Message
  6. if (empty($_POST['login']) || empty($_POST['pass']) ) //Oublie d'un champ
  7. {
  8.         $message = '<p>une erreur s est produite pendant votre identification.
  9.         Vous devez remplir tous les champs
  10.         Cliquez <a href="./connexion.php">ici</a> pour revenir</p>';
  11. }
  12. else
  13. {
  14.         //Acces interdit : le membre est déjà connecté
  15.         if (isset($_SESSION['login']))
  16.         {
  17.                 $message ='<p>Désolé mais vous ne pouvez
  18.                 pas accéder à cette page</p>';
  19.         }
  20.         else // Autorisation ok : il reste à voir le mot de passe
  21.         {
  22.         include("identifiants.php" );
  23.         mysql_connect($adresse, $nom, $motdepasse);
  24.         mysql_select_db($database);
  25.      
  26.      
  27.         //On protège les données
  28.         $login = mysql_real_escape_string($_POST['login']);
  29.         $password = mysql_real_escape_string($_POST['pass']);
  30.        
  31.         $requete1 = mysql_query('SELECT pass, id, 
  32.         FROM enregistrer WHERE login = "'.$login.'"')
  33.         or die (mysql_error());
  34.         $data1 = mysql_fetch_assoc($requete1);
  35.        
  36.         if ($data1['pass'] == md5($pass)) // Acces OK !
  37.         {
  38.      
  39.                 $_SESSION['login'] = $login;
  40.                 $_SESSION['id'] = $data1['id'];
  41.      
  42.                 $message = '<p>Bienvenue '.stripslashes(htmlspecialchars($_SESSION['login'])).',
  43.                 vous êtes maintenant connecté!</p>
  44.                 <p>Cliquez <a href="./index.php">ici</a>
  45.                 pour revenir à la page d accueil</p>';
  46.      
  47.          }
  48.          else // Acces pas OK !
  49.          {
  50.                 $message = '<p>Une erreur s est produite
  51.                 pendant votre identification.
  52.                 Le mot de passe ou le login entré n est pas correcte.
  53.                 Cliquez <a href="./connexion.php">ici</a>
  54.                 pour revenir à la page précédente
  55.                 <br /><br />
  56.                 Cliquez <a href="./index.php">ici</a>
  57.                 pour revenir à la page d accueil</p>';
  58.           }
  59.           }
  60. }
  61. //Ici seulement on affiche la page
  62. include("debut.php" );
  63. ?>
  64. <div id="banniere"></div>
  65. <?php
  66. if (isset($_POST['souvenir']))
  67. {
  68. $expire = time() + 365*24*3600;
  69. setcookie('login', $_SESSION['login'], $expire);
  70. }
  71. ?>
  72. <?php
  73. if (isset($_POST['souvenir']))
  74. {
  75. $expire = time() + 365*24*3600;
  76. setcookie('pseudo', $_SESSION['pseudo'], $expire);
  77. }
  78. ?>
  79. <div id="corps_forum">
  80. <?php
  81. echo $message;
  82. ?>
  83. <?php
  84. $page = $_POST['page'];
  85. echo 'Cliquez <a href="'.$page.'">ici</a> pour revenir à la page précédente';
  86. ?>
  87. </div>
  88. </body>
  89. </html>


merci

Reply

Marsh Posté le 31-01-2009 à 14:44:11   

Reply

Marsh Posté le 31-01-2009 à 14:59:39    

Bonjour,  
Alors déjà fait un effort sur l'orthographe, aussi bien en ce qui concerne ton message que ton code, c'est très désagréable et personnellement je n'ai pas envie d'aider les gens qui écrivent comme des sagouins.
 
En ce qui concerne ton problème de requête, il faut que tu retires la virgule qui suit "id" et qui précède "FROM" :

Code :
  1. SELECT pass, id FROM enregistrer WHERE login = '$login.'


 
Après cela, ta requête fonctionnera mais un autre problème se posera : il mysql_fetch_assoc doit être parcouru avec while() par exemple, sinon tu ne lis qu'une seule ligne retournée, donc si l'utilisateur n'est pas le premier inscrit il ne pourra jamais se connecter.
 
Mais dans ton cas ce n'est pas la peine de parcourir toute ta table d'utilisateurs, tu peux faire en sorte que mysql se charge lui même de faire la vérification login / mot de passe.
 
Pour çà, il faut faire une requête dont la clause WHERE est celle-ci :
login = $login ET pass = md5($pass)
 
La requête devient :

Code :
  1. SELECT * FROM enregistrer WHERE login = '$login' AND pass = '$pass'


 
Pour intégrer cela à PHP, il faut utiliser la fonction mysql_num_rows qui retourne le nombre de ligne retournées. Si une ligne contient le login spécifié ET le mot de passe spécifié, alors les coordonnées sont correctes.
 

Code :
  1. $sql = "SELECT * FROM enregistrer WHERE login = '$login' AND pass = '$pass'";
  2. $query = mysql_query($sql);
  3. if(mysql_num_rows > 0) {
  4.    echo 'connexion réussie ;)';
  5. }


 
Comme tu le sais il faut échapper les données avant de les utiliser dans une requête. Le but est de convertir les caractères réservés par le SGBD pour ne pas qu'ils soient interprétés. Or si tu utilises la fonction md5 (DE PHP) alors la chaîne retournée ne contiendra que des chiffres et des lettres et sera sûre donc il est inutile de l'échapper avec mysql_real_escape_string.
J'insiste sur le fait que ce ne soit vrai que si tu utilises la fonction md5 de PHP parce que tu peux aussi utiliser la fonction MD5 de mysql mais dans ce cas, il faudra échapper ton mot de passe avant (il sera en clair dans la requête, avant d'être hashé.


Message édité par Profil supprimé le 31-01-2009 à 15:00:00
Reply

Marsh Posté le 01-02-2009 à 13:35:11    

merci pour votre aide et j'ai compris mes erreurs mais sa na marche toujours pas j'ai enlever les erreur ( enfin je crois ) et rien :
revoila le code modifier :

Code :
  1. <?php
  2. // Message
  3. if (empty($_POST['login']) || empty($_POST['pass']) ) //Oublie d'un champ
  4. {
  5.         $message = '<p>une erreur s est produite pendant votre identification.
  6.         Vous devez remplir tous les champs
  7.         Cliquez <a href="./connexion.php">ici</a> pour revenir</p>';
  8. }
  9. else
  10. {
  11.         //Acces interdit : le membre est déjà connecté
  12.         if (isset($_SESSION['login']))
  13.         {
  14.                 $message ='<p>Désolé mais vous ne pouvez
  15.                 pas accéder à cette page</p>';
  16.         }
  17.         else // Autorisation ok : il reste à voir le mot de passe
  18.         {
  19.         include("identifiants.php" );
  20.         mysql_connect($adresse, $nom, $motdepasse);
  21.         mysql_select_db($database);
  22.      
  23.      
  24.         //On protège les données
  25.         $login = mysql_real_escape_string($_POST['login']);
  26.         $password = mysql_real_escape_string($_POST['pass']);
  27.        
  28. $sql = "SELECT * FROM enregistrer WHERE login = '$login' AND pass = '$password'";
  29. $query = mysql_query($sql);if(mysql_num_rows > 0) {echo 'connexion réussie ;)';}
  30.        
  31.         if ($data1['pass'] == md5($pass)) // Acces OK !
  32.         {
  33.      
  34.                 $_SESSION['login'] = $login;
  35.                 $_SESSION['id'] = $data1['id'];
  36.      
  37.                 $message = '<p>Bienvenue '.stripslashes(htmlspecialchars($_SESSION['login'])).',
  38.                 vous êtes maintenant connecté!</p>
  39.                 <p>Cliquez <a href="./index.php">ici</a>
  40.                 pour revenir à la page d accueil</p>';
  41.      
  42.          }
  43.          else // Acces pas OK !
  44.          {
  45.                 $message = '<p>Une erreur s est produite
  46.                 pendant votre identification.
  47.                 Le mot de passe ou le login entré n est pas correcte.
  48.                 Cliquez <a href="./connexion.php">ici</a>
  49.                 pour revenir à la page précédente
  50.                 <br /><br />
  51.                 Cliquez <a href="./index.php">ici</a>
  52.                 pour revenir à la page d accueil</p>';
  53.           }
  54.           }
  55. }
  56. //Ici seulement on affiche la page
  57. include("debut.php" );
  58. ?>
  59. <div id="banniere"></div>
  60. <?php
  61. if (isset($_POST['souvenir']))
  62. {
  63. $expire = time() + 365*24*3600;
  64. setcookie('login', $_SESSION['login'], $expire);
  65. }
  66. ?>
  67. <?php
  68. if (isset($_POST['souvenir']))
  69. {
  70. $expire = time() + 365*24*3600;
  71. setcookie('pseudo', $_SESSION['pseudo'], $expire);
  72. }
  73. ?>
  74. <div id="corps_forum">
  75. <?php
  76. echo $message;
  77. ?>
  78. <?php
  79. $page = $_POST['page'];
  80. echo 'Cliquez <a href="'.$page.'">ici</a> pour revenir à la page précédente';
  81. ?>
  82. </div>
  83. </body>
  84. </html>

Reply

Marsh Posté le 01-02-2009 à 15:19:23    

Désolé il faut faire :

Code :
  1. if(mysql_num_rows($query) > 0) {
  2.   echo 'connexion réussie ;)';
  3. }

Reply

Marsh Posté le 01-02-2009 à 17:48:54    

merci cela marche, mais enfaîte j'ai un autre problème. Ce n'est pas un problème de code, mais voilà :  
 
enfaîte j'ai crée mon site personnel et je voulais créer un forum dessus.  
 
donc je sais que je n'aurais pas dû, mais je me suis aidée du site du zéro, mais bien sûr il y a pleins d'erreurs de script. Et enfaîte je ne sais pas comment crée une connexion qui marche avec le forum site du zéro. j'ai essayé à travers ce topic mais finalement ça ne marche pas.  
 
merci de me donnée un conseil pour créer une connexion qui marche avec le site du zéro.  
 
moi je suis resté avec ce code de connexion qui marche ,mais sa ne reconnais ( désoler pour les fautes ) pas la connexion quand je suis sur le forum.  
 

Code :
  1. <?php
  2.  
  3.     // Message
  4.  
  5.    if (empty($_POST['login']) || empty($_POST['pass']) ) //Oublie d'un champ
  6.     {
  7.            $message = '<p>une erreur s est produite pendant votre identification.
  8.             Vous devez remplir tous les champs
  9.            Cliquez <a href="./connexion.php">ici</a> pour revenir</p>';
  10.    }
  11.    else
  12.    {
  13.           //Acces interdit : le membre est déjà connecté
  14.            if (isset($_SESSION['login']))
  15.            {
  16.                    $message ='<p>Désolé mais vous ne pouvez
  17.                    pas accéder à cette page</p>';
  18.            }
  19.            else // Autorisation ok : il reste à voir le mot de passe
  20.            {
  21.            include("identifiants.php" );
  22.            mysql_connect($adresse, $nom, $motdepasse);
  23.            mysql_select_db($database);
  24.        
  25.        
  26.            //On protège les données
  27.            $login = mysql_real_escape_string($_POST['login']);
  28.            $password = mysql_real_escape_string($_POST['pass']);
  29.          
  30.    $sql = "SELECT * FROM enregistrer WHERE login = '$login' AND pass = '$password'";
  31.       $query = mysql_query($sql);
  32.    
  33.       if(mysql_num_rows($query) > 0) {
  34.  
  35.         echo 'connexion réussie ;)';
  36.  
  37.       }
  38.          
  39.            if ($data1['pass'] == md5($pass)) // Acces OK !
  40.           {
  41.        
  42.                   $_SESSION['login'] = $login;               
  43.                       $_SESSION['id'] = $data1['id'];
  44.    
  45.    
  46.                   $message = '<p>Bienvenue '.stripslashes(htmlspecialchars($_SESSION['login'])).',
  47.                    vous êtes maintenant connecté!</p>
  48.                    <p>Cliquez <a href="./index.php">ici</a>
  49.                    pour revenir à la page d accueil</p>';
  50.        
  51.            }
  52.           else // Acces pas OK !
  53.            {
  54.                    $message = '<p>Une erreur s est produite
  55.                  pendant votre identification.
  56.                   Le mot de passe ou le login entré n est pas correcte.
  57.                   Cliquez <a href="./connexion.php">ici</a>
  58.                    pour revenir à la page précédente
  59.                  <br /><br />
  60.                  Cliquez <a href="./index.php">ici</a>
  61.                    pour revenir à la page d accueil</p>';
  62.              }
  63.              }
  64.    }
  65.    //Ici seulement on affiche la page
  66.    include("debut.php" );
  67.    ?>
  68.    <div id="banniere"></div>
  69.  
  70.    <?php
  71.    if (isset($_POST['souvenir']))
  72.   {
  73.    $expire = time() + 365*24*3600;
  74.    setcookie('login', $_SESSION['login'], $expire);
  75. }
  76.    ?>
  77.    <?php
  78.    if (isset($_POST['souvenir']))
  79.    {
  80.    $expire = time() + 365*24*3600;
  81.    setcookie('login', $_SESSION['login'], $expire);
  82.    }
  83.    ?>
  84.    <div id="corps_forum">
  85.    <?php
  86.    echo $message;
  87.    ?>
  88.    <?php
  89.   $page = $_POST['page'];
  90.    echo 'Cliquez <a href="'.$page.'">ici</a> pour revenir à la page précédente';
  91.   ?>
  92.    </div>
  93.    </body>
  94.    </html>

 
merci

Reply

Marsh Posté le 01-02-2009 à 17:50:10    

voila le code de la page principal du forum :

Code :
  1. <?php
  2. //Cette fonction doit être appelée avant tout code html
  3. session_start();
  4. //On donne ensuite un titre à la page, puis on appelle notre fichier debut.php
  5. $titre = "Index du forum";
  6. include("debut.php" );
  7. ?>
  8. <body>
  9. <div id="banniere"></div>
  10. <h3>
  11. <?php
  12. //Maintenant, on se connecte à la base de données
  13. include("identifiants.php" );
  14. mysql_connect($adresse, $nom, $motdepasse);
  15. mysql_select_db($database);
  16. ?>
  17. <div id="corps_forum">
  18. <?php
  19. // On indique où l'on se trouve
  20. echo'<a href ="./forum.php">Index du forum</a><br>';
  21. echo'<a href ="./ml.php">Index du site</a>';
  22. // Puis on commence notre if
  23. if (isset($_SESSION['login'])) // Si le membre est connecté
  24. {
  25.         //Voici les options
  26.         echo'<p>Vous êtes connecté en tant que
  27.         <a href="./voirprofil.php?m='.intval($_SESSION['id']).'&amp;action=consulter">
  28.         '.stripslashes(htmlspecialchars($_SESSION['login'])).'</a><br />
  29.         <a href="./voirprofil.php?action=modifier">
  30.         Modifier mon profil</a><br />
  31.         <a href="./messagesprives.php">
  32.         Consulter mes messages privés</a><br />
  33.         <a href ="./deconnexion.php">Se déconnecter</a><br /></p>';
  34. }
  35. // Sinon, on propose de se connecter ou de s'enregistrer
  36. else
  37. {
  38.         echo'<p>Vous n êtes pas connecté <br />
  39.         <a href="./connexion.php">Se connecter</a><br />
  40.         <a href="./inscription.php">Pas encore inscrit ?</a><br /></p>';
  41. }
  42. ?>
  43. <h3>Forum ml.com<br><br>
  44. <?php
  45. //Initialisation de deux variables
  46. $totaldesmessages = 0;
  47. $categorie = NULL;
  48. ?>
  49. <?php
  50. //Déterminons le niveau d'accès du visiteur
  51. $level = (isset($_SESSION['level']))?intval($_SESSION['level']):1;
  52. //Cette requete permet d'obtenir tout sur le forum
  53. $requete2 = mysql_query('
  54. SELECT cat_id, cat_nom,
  55. forum_forum.forum_id, forum_name, forum_desc, forum_post, forum_topic, auth_view, forum_topic.topic_id,  forum_topic.topic_post, post_id, post_time, post_createur, membre_login,
  56. membre_id
  57. FROM forum_categorie
  58. LEFT JOIN forum_forum ON forum_categorie.cat_id = forum_forum.forum_cat_id
  59. LEFT JOIN forum_post ON forum_post.post_id = forum_forum.forum_last_post_id
  60. LEFT JOIN forum_topic ON forum_topic.topic_id = forum_post.topic_id
  61. LEFT JOIN forum_membres ON forum_membres.membre_id = forum_post.post_createur
  62. WHERE auth_view < '.$level.'
  63. ORDER BY cat_ordre, forum_ordre DESC');
  64. ?>
  65. <?php
  66. //Dans un premier temps, on vérifie s'il y a des forums à lister
  67. if (mysql_num_rows($requete2) < 1)
  68. {
  69.         echo'Il n y a pas de forum :o
  70.         Allez en ajouter avec le panneau d administration';
  71. }
  72. else
  73. {
  74. ?>
  75. <table>
  76. <?php
  77.         //Début de la boucle
  78.         while($data2 = mysql_fetch_assoc($requete2))
  79.         {
  80.         //On affiche chaque catégorie
  81.         if( $categorie != $data2['cat_id'] )
  82.         {
  83.         //Si c'est une nouvelle catégorie on l'affiche
  84.      
  85.                 $categorie = $data2['cat_id'];
  86.                 ?>
  87.                 <tr>
  88.                 <th></th>
  89.                 <th class="titre"><strong><?php echo stripslashes(htmlspecialchars($data2['cat_nom'])); ?>
  90.                 </strong></th>           
  91.                 <th class="nombremessages"><strong>Sujets</strong></th>     
  92.                 <th class="nombresujets"><strong>Messages</strong></th>     
  93.                 <th class="derniermessage"><strong>Dernier message</strong></th> 
  94.                 </tr>
  95.                 <?php
  96.              
  97.          }
  98.          //Ici, on met le contenu de chaque catégorie
  99. ?>
  100. <?php
  101. if (verif_auth($data2['auth_view']))
  102. {
  103. //Affichage des forums
  104. ?>
  105. <?php
  106. }
  107. else
  108. {
  109. echo'<td class="nombremessages">Pas de message</td></tr>';
  110. }
  111. //Fin de la vérification d'autorisation
  112. ?>
  113. <?php
  114. // Ce super echo de la mort affiche tous
  115.          // les forums en détail : description, nombre de réponses etc...
  116.          echo'<tr><td><img src="./images/message.gif" alt="message" /></td>
  117.          <td class="titre"><strong>
  118.          <a href="./voirforum.php?f='.$data2['forum_id'].'">
  119.          '.stripslashes(htmlspecialchars($data2['forum_name'])).'</a></strong>
  120.          <br />'.nl2br(stripslashes(htmlspecialchars($data2['forum_desc']))).'</td>
  121.          <td class="nombresujets">'.$data2['forum_topic'].'</td>
  122.          <td class="nombremessages">'.$data2['forum_post'].'</td>';
  123.          // Deux cas possibles :
  124.          // Soit il y a un nouveau message, soit le forum est vide
  125.          if (!empty($data2['forum_post']))
  126.          {
  127.          //Selection dernier message
  128.  $nombreDeMessagesParPage = 15;
  129.          $nbr_post = $data2['topic_post'] +1;
  130.  $page = ceil($nbr_post / $nombreDeMessagesParPage);
  131.          echo'<td class="derniermessage">
  132.          '.date('H\hi \l\e d/M/Y',$data2['post_time']).'<br />
  133.          <a href="./voirprofil.php?m='.stripslashes(htmlspecialchars($data2['membre_login'])).'&amp;action=consulter">'.$data2['membre_login'].'  </a>
  134.                <a href="./voirtopic.php?t='.$data2['topic_id'].'&amp;page='.$page.'#p_'.$data2['post_id'].'">
  135.                <img src="./images/go.gif" alt="go" /></a></td></tr>';
  136.          }
  137.          else
  138.          {
  139.                echo'<td class="nombremessages">Pas de message</td></tr>';
  140.          }
  141.          //Cette variable stock le nombre de message, on la met à jour
  142.          $totaldesmessages += $data2['forum_post'];
  143.          //On ferme notre boucle et nos balises
  144.          } //fin de la boucle
  145. echo '</table>';
  146. } //fin du else
  147. ?>
  148. <?php
  149. //Le pied de page ici :
  150. echo'
  151. <hr />
  152. <div>
  153. <h4>
  154. Qui est en ligne ?
  155. ';
  156. $requete3 = mysql_query("SELECT membre_id FROM forum_membres" );
  157. $TotalDesMembres = mysql_num_rows($requete3);
  158. $requete4 = mysql_query("SELECT membre_login, membre_id FROM forum_membres ORDER BY membre_id DESC LIMIT 0, 1" );
  159. $data4 = mysql_fetch_assoc($requete4);
  160. $derniermembre = stripslashes(htmlspecialchars($data4['membre_login']));
  161. echo'<p>Le total des messages du forum est <strong>'.$totaldesmessages.'</strong>.<br />';
  162. echo'Le site et le forum comptent <strong>'.$TotalDesMembres.'</strong> membres.<br />';
  163. echo'Le dernier membre est <a href="./voirprofil.php?m='.$data4['membre_id'].'&amp;action=consulter">'.$derniermembre.'</a>.</p>';
  164. ?>
  165. </div>
  166. </div>
  167. </body>
  168. </html>

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed