Partage
  • Partager sur Facebook
  • Partager sur Twitter

Connexion

Anonyme
    11 avril 2010 à 16:37:22

    Bonjour.
    Je suis en train de faire un systeme de connexion mais j'ai un problème :
    <?php
    if(isset($_POST['pseudo']) AND isset($_POST['mot_de_passe']))
    {
    if($_POST['pseudo'] != NULL AND $_POST['mot_de_passe'] != NULL)
    {
    $pseudo = htmlspecialchars($_POST['pseudo']);
    $mot_de_passe = htmlspecialchars($_POST['mot_de_passe']);
    $bdd = new PDO('mysql:host=localhost;dbname=deus_game', 'root', '');
    $reponse = $bdd->query('SELECT pseudo, mot_de_passe, status FROM membre WHERE pseudo = $pseudo, mot_de_passe = $mot_de_passe');
    $donnees = $reponse->fetch();
    						 
    if($donnees['pseudo'] != NULL)
    {
    if($donnees['mot_de_passe'] != NULL)
    {
    $_SESSION['connecter'] = "oui";
    $_SESSION['pseudo'] = $donnees['pseudo'];
    $_SESSION['status'] = $donnees['status'];
    ?><p>Vous &#234tes maintenant connecter !</p><?php
    }
    else
    {
    ?>
    <p>Erreur : Le nom de compte ou mot de passe incorrect !</p>
    <?php
    }
    }
    else
    {
    ?>
    <p>Erreur : Le nom de compte ou mot de passe incorrect !</p>
    <?php
    }
    }
    else
    {
    ?>
    <p>Erreur : Vous devez indiquer votre nom de compte et votre mot de passe !</p>
    <?php
    }
    }
    ?>
    


    Sauf que sa ne veut pas. Sa me met : Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\My Site\connexion.php on line 38
    Et sa me met sa parce que on peut pas mettre sa :
    $reponse = $bdd->query('SELECT pseudo, mot_de_passe, status FROM membre WHERE pseudo = $pseudo, mot_de_passe = $mot_de_passe');
    

    C'est le WHERE pseudo = $pseudo, mot_de_passe = $mot_de_passe qui est faux.
    Mais il faut faire comment alors ?
    • Partager sur Facebook
    • Partager sur Twitter
      11 avril 2010 à 16:40:58

      WHERE pseudo = '.$pseudo.' AND mot_de_passe = '.$mot_de_passe.''
      
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        11 avril 2010 à 16:44:08

        Merci. Mais maintenant sa me met Nom de compte ou mot de passe incorrect alors qu'ils sont correct
        • Partager sur Facebook
        • Partager sur Twitter
          11 avril 2010 à 16:47:22

          Ca a rien à voir avec ton problème mais ça me semble important donc petite précision :
          • htmlspecialchars() est à utiliser au moment de l'affichage pour éviter l'affichage de code HTML
          • mysql_real_escape_string() est à utiliser pour éviter les injections SQL avant l'insertion dans la BD

          Donc rectifie ça dans ton code ;)
          • Partager sur Facebook
          • Partager sur Twitter
            11 avril 2010 à 16:48:04

            1 : Il faut mettre des guillemets entre les $pseudo et $mot_de_passe dans la requête si tu utilises query().
            2 : Je te conseille d'utiliser une requête préparée à la place, au moins tu ne te soucies plus de l'échappement, etc.
            <?php
            $reponse = $bdd->prepare('SELECT pseudo, mot_de_passe, status FROM membre WHERE pseudo = ?, mot_de_passe = ?')
                           ->execute(array($pseudo, $mot_de_passe));
            
            ?>
            


            @Volodim
            mysql_real_escape_string est à utiliser quand on utilise mysql_* et non PDO.
            • Partager sur Facebook
            • Partager sur Twitter
              11 avril 2010 à 16:49:09

              Ha. C'est automatique avec PDO ? ou c'est une autre fonction ?
              • Partager sur Facebook
              • Partager sur Twitter
                11 avril 2010 à 16:50:50

                Citation : Volodim

                Ha. C'est automatique avec PDO ? ou c'est une autre fonction ?



                L'échappement est à faire si on utilise query(). Si on utilise une requête préparée avec des marqueurs pour passer les variables, oui l'échappement est automatique.
                • Partager sur Facebook
                • Partager sur Twitter
                  11 avril 2010 à 16:52:35

                  avec les requêtes préparés il n'y en a pas besoin, car la structure de la requête est défini, il ne peut plus il y avoir d'injection. Sinon il faut utiliser la methode quote() avec query().
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    11 avril 2010 à 16:58:36

                    J'ai mit
                    <?php
                    $reponse = $bdd->prepare('SELECT pseudo, mot_de_passe, status FROM membre WHERE pseudo = ?, mot_de_passe = ?')
                                   ->execute(array($pseudo, $mot_de_passe));
                    
                    ?>
                    


                    mais pour ma condition j'ai mit ceci :
                    if($reponse['pseudo'] != NULL)
                    {
                    if($reponse['mot_de_passe'] != NULL)
                    {
                    


                    mais sa me dit toujours Le nom de compte ou le mot de passe est inccorect
                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 avril 2010 à 17:00:12

                      WHERE pseudo = ? AND mot_de_passe = ?

                      Si le problème ne vient pas de là, montre le code au complet.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        11 avril 2010 à 17:01:44

                        J'ai mit AND mais sa ne fonctionne toujours pas.
                        Voilat le code :
                        <?php
                        session_start();
                        ?>
                        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
                            <head>
                                <title>Deus Game - Connexion</title>
                                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                                <link rel="stylesheet" media="screen" type="text/css" title="Design" href="style.css" />
                            </head>
                            <body>
                        	    <?php include("includes/menu.php"); ?>
                        		
                        		<div id="page">
                        		    <div class="sous_page">
                        			    <span id="titre">Deus Game</span>
                        			</div>
                        		    <hr/>
                        		    <div class="sous_page">
                        			    <span>Connecte toi !</span>
                        				<form method="post" action="connexion.php">
                        			        <p>
                        				    Nom de compte : <input type="text" name="pseudo" class="form"/><br/><br/>
                        					Mot de passe : <input type="password" name="mot_de_passe" class="form"/><br/><br/>
                        					<input type="submit" value="Connexion" class="form"/>
                        				    </p>
                        				</form>
                        				
                        				<?php
                        				if(isset($_POST['pseudo']) AND isset($_POST['mot_de_passe']))
                        				{
                        				    if($_POST['pseudo'] != NULL AND $_POST['mot_de_passe'] != NULL)
                        					{
                        					     $pseudo = htmlspecialchars($_POST['pseudo']);
                        						 $mot_de_passe = htmlspecialchars($_POST['mot_de_passe']);
                        					     $bdd = new PDO('mysql:host=localhost;dbname=deus_game', 'root', '');
                        						 $reponse = $bdd->prepare('SELECT pseudo, mot_de_passe, status FROM membre WHERE pseudo = ? AND mot_de_passe = ?')
                                                                ->execute(array($pseudo, $mot_de_passe));
                        						 
                        						 if($reponse['pseudo'] != NULL)
                        						 {
                        						     if($reponse['mot_de_passe'] != NULL)
                        						     {
                        						         $_SESSION['connecter'] = "oui";
                        								 $_SESSION['pseudo'] = $donnees['pseudo'];
                        								 $_SESSION['status'] = $donnees['status'];
                        								 ?><p>Vous &#234tes maintenant connecter !</p><?php
                        						     }
                        						     else
                        						     {
                        						     ?>
                        						         <p>Erreur : Le nom de compte ou le mot de passe est incorrect !</p>
                        						     <?php
                        						     }
                        						 }
                        						 else
                        						 {
                        						 ?>
                        						     <p>Erreur : Le nom de compte ou le mot de passe est incorrect !</p>
                        						 <?php
                        						 }
                        					}
                        					else
                        					{
                        					?>
                        					    <p>Erreur : Vous devez indiquer votre nom de compte et votre mot de passe !</p>
                        					<?php
                        					}
                        				}
                        				?>
                        				<p class="sign">Article par Administrateur</p>
                        			</div>
                        			<hr/>
                        			<div class="sous_page">
                        			    <span>Site</span>
                        				<p class="banniere"><a href="http://www.deusgame.com"><img src="images/banniere.png" alt="banniere"/></a></p>
                        				<p class="sign">Article par Administrateur</p>
                        			</div>
                        			<hr/>
                        			<p class="sign">Deus Game - Tous droits r&#233serv&#233s  </p>
                        			<div id="page_bas"></div>
                        		</div>
                            </body>
                        </html>
                        
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Connexion

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown