Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question MySQL

    18 janvier 2011 à 6:57:16

    Bonjour, j'ai fait le tp : Page protégée par mot de passe du tutoriel PHP et MySQL.
    Je l'ai reussi mais j'ai une question : Imaginons que j'ai une table avec deux entrées : Utilisateur et Mot de passe
    Si le formulaire demande l'utilisateur, et que l'on entre le deuxieme utilisateur de la liste, comment faire pour accéder au mot de passe qui lui va avec? Parce que pour l'instant, le tp ne conecernait un seul mot passe.

    En fait je veux accéder a une ligne spécifique. Si c'est "utilisateur Julien" qui est démandée alors verifier le mot de passe associé a "Julien"

    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      18 janvier 2011 à 7:49:28

      Tu fais
      SELECT utilisateur, mot_de_passe FROM table WHERE utilisateur = 'julien'
      • Partager sur Facebook
      • Partager sur Twitter
        18 janvier 2011 à 8:06:44

        Oui merci mais ne peux-t-on pas mettre
        SELECT utilisateur, mot_de_passe FROM table WHERE utilisateur = $_POST['utilisateur']
        

        avec le $_POST['utilisateur'] correspondant à l'utilisateur entré dans le formulaire de la page d'avant pour que la manipulation soit automatique.
        .
        Merci
        • Partager sur Facebook
        • Partager sur Twitter
          18 janvier 2011 à 8:17:03

          Si, bien sûr, là je te donnais juste la requête à faire, adapte à ton code comme tu le sens.
          • Partager sur Facebook
          • Partager sur Twitter
            18 janvier 2011 à 8:53:20

            Le problème c'est que j'obtiens Parse Error en mettant
            SELECT utilisateur, mot_de_passe FROM table WHERE utilisateur = $_POST['utilisateur']
            

            • Partager sur Facebook
            • Partager sur Twitter
              18 janvier 2011 à 8:54:27

              Salut !

              Tu pourrais nous donner ton code PHP ?
              • Partager sur Facebook
              • Partager sur Twitter
                18 janvier 2011 à 9:43:16

                Il faut

                1/ Bien concaténer tes chaines de caractères (c'est surement la parse error)

                2/ Vérifier que ta variable $_POST existe
                • Partager sur Facebook
                • Partager sur Twitter
                  18 janvier 2011 à 10:01:01

                  bonjour,
                  ta colonne utilisateur est de type VARCHAR donc la valeur de utilisateur dans le WHERE du SELECT , comme l'indique Taguan dans son 1er exemple, doit être entourée de '.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 janvier 2011 à 10:38:33

                    Je vous envoi le code entier des que possible. La colonne est du type int
                    • Partager sur Facebook
                    • Partager sur Twitter
                      18 janvier 2011 à 10:40:05

                      ah! utilisateur de type int!
                      Donc effectivement pas de '.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 janvier 2011 à 12:31:16

                        Bon alors voila. Il y a deux pages : l'une avec le formulaire l'autre, c'est la page de traitement php.
                        Ce que je cherche a faire, c'est d'avoir une page protégée par deux mots de passe gérés par MySQL.
                        Ma table MySQL s'appelle "mdp" et contient deux colonnes "id" en type INT et "mdp" en type TEXT.
                        Si l'utilisateur entre le login "1", le mot de passe doit etre "1234", si le login est "2", le mot de passe est "12345".

                        Voici la capture d'écran de la table MySQL :
                        Image utilisateur

                        Le code du formulaire :
                        <!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" lang="fr">
                            <head>
                                <title>Espace personnel de Soufiane</title>
                                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                        		<link rel="stylesheet" media="screen" type="text/css" title="Design" href="index.css" />
                            </head>
                            <body>
                        	
                        	<div id="login">
                        		<h1> Bienvenue sur mon espace personnel de stockage en ligne </h1>
                        			<div id="formulaire">
                        				<form method="post" action="login.php">
                        					<label for="session"> Login utilisateur : </label> 
                        					<input type="text" name="id"/>
                        					<label for="pass">Votre mot de passe :</label>
                        					<input type="password" name="mdp" id="pass" />
                        					<input type="submit"/>
                        				</form>
                        		
                        			</div>
                        	</div>
                        	
                        	</body>
                        </html>
                        


                        Et voila la page de traitement php :
                        <!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" lang="fr">
                            <head>
                                <title>Notre première instruction : echo</title>
                                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                            </head>
                            <body>
                                
                                
                                <p>
                                   <?php
                        			try
                        			{
                        			$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                        			$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
                        			$reponse = $bdd->query('SELECT * FROM mdp WHERE id = $_POST[id]');
                        			$mdp = $reponse->fetch();
                        		
                        			
                        			}
                        		
                        			catch (Exception $e)
                        			{
                        			die('Erreur : ' . $e->getMessage());
                        			}
                        			
                        
                        			
                        
                        			?>
                        			<?php 
                        			
                        			{
                        
                        			if ($_POST['mdp'] == $mdp['mdp'])
                        			{
                        				
                        				echo 'mot de passe ok';
                        
                        			}
                        			else
                        			{
                        				echo 'erreur mot de passe';
                        			}
                        			}
                        			$reponse->closeCursor(); // Termine le traitement de la requête
                        			?>
                        			
                                </p>
                            </body>
                        </html>
                        

                        La ligne me posant problème est celle-ci :
                        $reponse = $bdd->query('SELECT * FROM mdp WHERE id = $_POST[id]');
                        

                        Je vous remercie d'avance.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 janvier 2011 à 12:46:45

                          Essaie ceci :

                          <?php
                          $reponse = $bdd->query('SELECT * FROM mdp WHERE id = ' . $_POST['id'] . ');
                          ?>
                          


                          Normalement. cela devrait fonctionner.

                          Ah j'oubliais, n'oublies pas de vérifier que tes variables soient bien définies grâce à isset.

                          ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 janvier 2011 à 13:07:12

                            bonjour,
                            si tu (vous -> certains autres aussi) nommais les variables avec des noms significatifs ce serait mieux.
                            La méthode query() renvoie un curseur (un tableau 2D).
                            La méthode fetch() renvoie une ligne du curseur (un tableau 1D, un vecteur, une structure, ...).
                            Maintenant après le fetch il faut aller chercher la valeur d'un champ/d'une colonne.

                            Mais revenons au script!

                            'SELECT * FROM mdp WHERE id = $_POST[id]' ça c'est KO. Tu essaie de faire de l'interpolation avec des ' (impossible, il faut des ", et de plus avec avec un array où il faudrait ajouter de {})
                            'SELECT * FROM mdp WHERE id = ' . $_POST['id'] . ' ça c'est KO

                            ça c'est mieux : 'SELECT * FROM mdp WHERE id = ' . $_POST['id']

                            L'affichage temporaire des String SQL c'est pas mal aussi! Parfois.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 janvier 2011 à 14:51:26

                              J'ai trouver mon erreur. Maintenant j'utilise les requetes préparés.
                              Au passage, 'id' devient 'user'.
                              Merci
                              <?php
                              			try
                              			{
                              			$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                              			$bdd = new PDO('mysql:host=localhost;dbname=soufiane', 'soufiane', 'tenpentialorese', $pdo_options);
                              			$req = $bdd->prepare('SELECT mdp FROM mdp WHERE utilisateur = ?');
                              			$req->execute(array(htmlspecialchars($_POST['user'])));
                              	
                              
                              			$mdp = $req->fetch();
                              			}
                              			
                              			catch (Exception $e)
                              			{
                              			die('Erreur : ' . $e->getMessage());
                              			}
                              
                              			
                              			?>
                              			<?php 
                              			if (htmlspecialchars($_POST['mdp']) == $mdp['mdp'])
                              			{
                              				echo 'mot de passe ok';
                              
                              			}
                              			else
                              			{
                              				echo 'erreur mot de passe';
                              			}
                              			$req->closeCursor(); // Termine le traitement de la requête
                              			?>
                              
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 janvier 2011 à 14:56:08

                                Pas besoin de faire htmlspecialchars

                                1/ c'est à l'affichage qu'on fait cette fonction
                                2/ les requêtes préparées sont protégées automatiquement
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  19 janvier 2011 à 8:39:39

                                  Merci beaucoup pour l'aide. Par contre, j'ai encore une question mais de peur de créer un sujet dans la rubrique PHP inutilement, je prefere la poser rapidement. C'est pour savoir si on pouvait faire ce genre de chose :
                                  <?php
                                           echo'<p class="design_texte"> blablabla'; </p>
                                  ?>
                                  
                                  C'est histoire de formater le texte PHP.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    19 janvier 2011 à 9:18:21

                                    bonjour,
                                    inutile de passer par PHP, c'est du HTML statique.
                                    <p class="design_texte">blablabla</p>
                                    

                                    est suffisant!
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Question MySQL

                                    × 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