Script recherche mot de passe

Résolu
Bonjour,
alors je veux faire un script qui demande aux utilisateur d'inséré leur pseudo et leur mot de passe
<form action="paga.php" method="post">
<p>
<input type="text" name="posodo" />
<input type="text" name="passa" />
<input type="submit" value="Valider" />
</p>
</form>
après j'ai fait cette requete pour vérifier si le pseudo et le mot de passe sont bien situer dans la base de donné
$reponse="select motpasse from foruma where pseudo ='$posodo'";

if $reponse==$passa
{echo "<p>bravo felicitation</p>";
mais il ne veut pas marché je ne sais pas pourquoi,
merci pour vos reponse à bientot
Configuration: Windows XP
Internet Explorer 6.0

26 réponses

Résumé de la discussion

Un script PHP demande aux utilisateurs d'insérer leur pseudo et leur mot de passe via un formulaire et vérifie ensuite ces identifiants dans une base de données. Parmi les éléments proposés, il faut placer session_start() au tout début, sécuriser les entrées avec mysql_real_escape_string et htmlspecialchars, et gérer correctement la connexion à la base et sa fermeture. D'autres réponses soulignent l'importance d'éviter les erreurs liées à la portée des variables et de s'assurer que la connexion est accessible jusqu'à ce que le script se termine. En complément, des démonstrations montrent l'usage de PHP pour afficher des messages d'erreur adaptés et l'insertion dans la session de l'identifiant, afin d'améliorer l'expérience sans conclure sur l'état général.

Bobot (l’IA à votre service)
  1. je te remerci beaucoups , pour ton soutien ça a marcher, je n'ai plus ce message, merci pour tes explications, et ton aide, je vais le marquer comme résolu ^^
    1. Contributeur
      Voila, quelques petites modifications ... :
      <?php session_start(); ?>
      
      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
      <head>
      <title>Bienvenue sur mon site !</title>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      </head>
      <body>
      <form action="paga.php" method="post">
      	<p>
      		<input type="text" name="posodo" />
      		</br>
      		<input type="password" name="passa" />
      		</br>
      		<input type="submit" value="Valider" />
      	</p>
      </form>
      <?php 
      
      if ($_POST['posodo'] != NULL AND $_POST['passa'] != NULL) 
      { 
      
      
      	$cnx = mysql_connect("localhost", "root", ""); 
      	mysql_select_db("mama"); 
      	
      	
      	$passa = mysql_real_escape_string(htmlspecialchars($_POST['passa'])); 
      	$posodo = mysql_real_escape_string(htmlspecialchars($_POST['posodo'])); 
      	$result = mysql_query( "SELECT motpasse FROM foruma WHERE pseudo ='$posodo' " ); 
      	list( $reponse ) = mysql_fetch_array($result); 
      	
      	if ( $reponse==$passa ) 
      	{ 
      ?>
      <p>
      <?php
      	$_SESSION['prenom'] = $posodo; 
      
      
      
      ?>
      	<a href="koka.php">Lien vers </a><br/>
      </p>
      <?php 
      
      	} 
      	else 
      	{ 
      		echo "<p>vous navez pas entrer le bon mot de passe</p>"; } 
      	}
      	
      	mysql_close($cnx); 
      
      else 
      { 
      	echo "<p>veillez entré vos coordoné svp</p>"; 
      }
      
      ?>
      </body>
      </html>

      Il me semble que le problème venait du fait que la variable était définie dans un bloc plus bas : la fonction mysql_close n'avait par conséquent pas accès à la variable. Une variable dans les blocs haut peuvent être vues dans les blocs plus bas, mais pas le contraire.
      Pour le session_start(), il faut le mettre en tout premier, même avant la balise <html>, sinon tu risques de créer des erreurs.

      Concept de bloc :
      portée globale
      
      {
      	niveau 1 (haut)
      	
      	{
      		niveau 2 (inférieur au niveau 1)
      		
      		{
      			niveau 3
      			
      			{
      				... 
      			}
      		}
      	}
      }

      une variable définie dans le niveau 3 ne peut pas être vue dans les niveaux 1 et 2, mais uniquement dans les niveaux inférieurs (3,4,5,6,...).
      Les variables de portée globale (pas définies dans un bloc) peuvent être vue dans tous les blocs.

      Il faut toujours bien faire attention à la portée des variables ... :D

      @Bientôt
      1. alors voila toute la page :

        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
        <head>
        <title>Bienvenue sur mon site !</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        </head>
        <body>

        <form action="paga.php" method="post">
        <p>
        <input type="text" name="posodo" /> </br>
        <input type="password" name="passa" /></br>
        <input type="submit" value="Valider" />
        </p>
        </form>
        <?php

        if ($_POST['posodo'] != NULL AND $_POST['passa'] != NULL)
        {

        $cnx = mysql_connect("localhost", "root", "");
        mysql_select_db("mama");

        $passa = mysql_real_escape_string(htmlspecialchars($_POST['passa']));
        $posodo = mysql_real_escape_string(htmlspecialchars($_POST['posodo']));
        $result = mysql_query( "SELECT motpasse FROM foruma WHERE pseudo ='$posodo' " );
        list( $reponse ) = mysql_fetch_array($result);

        if ( $reponse==$passa )
        {
        ?>
        <p><?php
        session_start(); // On démarre la session AVANT toute chose
        $_SESSION['prenom'] = $posodo;

        ?>
        <a href="koka.php">Lien vers </a><br/>
        </p><?php

        }
        else
        {
        echo "<p>vous navez pas entrer le bon mot de passe</p>"; }

        }
        else
        {
        echo "<p>veillez entré vos coordoné svp</p>";
        }
        mysql_close($cnx);
        ?>

        </body>
        </html>
        1. je te remerci pour ton aide, mais c'est exactement ce que j'ai fait, et ça reste toujours la mème chose.
          je veux te dire que tout est bon, j'ai réussi à me conecter via un pseudo et un mot de passe, juste que le message ne veut pas disparaitre c tout
          1. Contributeur
            Une fois qu'une connection mysql est ouvert avec $nomdelaconnection = mysql_connect(...); , il faut la refermer avec mysql_close($nomdelaconnection); , sinon t'auras des erreurs d'exécution ...
            1. bonjours à tous, et bien le message a changer le voila :
              Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in C:\wamp\www\doci\paga.php on line 58
              1. et aussi, pourquoi c'est en espagnol ??
                car ce serais plus facil pour tout le monde si tu le mettait en francais nan ? a moin que se soit pour un site espanol :)
                1. Contributeur
                  Perso, on me parle dans une langue, alors j'essaye de répondre dans la même (pour que celui qui pose la question comprenne bien et puisse directement implémenter le code).

                  Mais c'est vrai que pour les autres c'est pas super ...
              2. Contributeur
                ça serait mieux de mettre le tout dans des variables, pour pouvoir, par exemple, refermer la connection, ou avoir plusieurs connections à la fois.
                1. non je n'ai pas fait $cnx = mysql_connect( "localhost", "root", "" );
                  j'ai fait directement :
                  <?php

                  if ($_POST['posodo'] != NULL AND $_POST['passa'] != NULL)
                  {

                  mysql_connect("localhost", "root", "");
                  mysql_select_db("mama");
                  .
                  .
                  .
                  .
                  .
                  1. voila c'est ca.
                    Comme lorsque tu nomme une feuille de style css en style.css , elle sera utiliser partout sous se nom, si tu en change le nom, plus rien ne fonctionne si tu n'a pas adapté ton nom aux autres variables ;)

                    a bientôt !
                    1. salut salut :)
                      je m'incruste =D

                      alors $cnx , c'est le nom de ta connection je pence :

                      $cnx = mysql_connect( "localhost", "root", "" );

                      Voila salut ^^ !
                      1. Contributeur
                        c'est exactement ça.

                        T'as la connection qui est enregistrée dans une variable, ici $cnx, et qui est utilisée dans toutes (je crois) les fonctions, pour indiquer sur quelle serveur (et table) il doit travailler.
                    2. Contributeur
                      aaaa ben non ... :D

                      Tu dois lui dire quelle connection fermer .... ici, ça serait
                      mysql_close( $cnx );
                      • 1
                      • 2