2009-01-09 12 views
0

J'utilise ce code pour la connexion, mais lorsque j'entre un nom d'utilisateur et un mot de passe, il charge simplement la page et la page de connexion s'affiche à nouveau. Pourquoi cela se produit-il?problème de code de connexion php

<?php 
    session_start(); 
    if(!isset($_POST['username']) || !isset($_POST['password']) || empty($_POST['username']) || empty($_POST['password'])) 
    { 
?> 
     <html> 
     <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
     <title>Welcome to yachts database &nbsp;&nbsp;&nbsp;</title> 
     <script type="text/javascript"> 
     function validate() 
     { 
      var username=document.getElementById("username").value; 
      var password=document.getElementById("password").value; 
      if(username.length==0) 
      { 
       alert("Please enter your user name"); 
       document.getElementById("username").focus(); 
       document.getElementById("username").select(); 
       return false; 
      } 
      if(password.length==0) 
      { 
       alert("Please enter your password"); 
       document.getElementById("password").focus(); 
       document.getElementById("password").select(); 
       return false; 
      } 
      submitOK="false"; 
     } 
     </script> 
     <?php 
      include("styles.txt"); 
     ?> 
     </head> 
     <body onLoad="self.focus();document.login.username.focus()"> 
     <br><br><br><br><br><br><br> 
     <center><font size=5 color=blue><b>University of ....... </b></font></center> 
     <center><font size=5 color=blue><b>Yachts Database Project</b></font></center> 
     <form name="login" method="post" action="<?php $_SERVER['PHP_SELF'];?>" onSubmit="return validate()"> 
     <table width="350" border="1" align="center" cellpadding=0 cellspacing=0 bgcolor=#ffffff bordercolor=#ffffff> 
     <tr> 
      <th colspan=2 height=30 bgcolor=#050E8C><font size=4 color=#ffffff>Please, enter user name and password</font></th> 
     </tr> 
     <tr> 
      <th bgcolor=#E0E0FF><font size=4 color=#2020ff>User name</font></th> 
      <td bgcolor=#E0E0FF align=center><input type="text" name="username" id="username" size="30"></td> 
     </tr> 
     <tr> 
      <th bgcolor=#E0E0FF><font size=4 color=#2020ff>Password</font></th> 
      <td bgcolor=#E0E0FF align=center><input type="password" name=" password" id="password" size="30"></td> 
     </tr> 
     <tr> 
      <td bgcolor=#E0E0FF colspan=2 align=right><input type="submit" name="login" value="&nbsp;&nbsp;Login&nbsp;&nbsp;">&nbsp;&nbsp;<input type="reset" name="reset" value="&nbsp;&nbsp;Reset&nbsp;&nbsp;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=register.php class=links>Register</a>&nbsp;&nbsp;&nbsp;&nbsp;</td> 
     </tr> 
     </table> 
     </form> 
     </body> 
     </html> 
<?php 
    } 
    else 
    { 
     $connect= mysql_connect("localhost","root") or die ("Sorry, Can not connect to database"); 
     mysql_select_db("login") or die (mysql_error()); 
     $username1=$_POST['username']; 
     $password1=$_POST['password']; 
     if($username1 && $password1) 
     { 
      $query="SELECT * FROM users WHERE username='$username1' AND password='$password1'"; 
      $result=mysql_query($query,$connect) or die(mysql_error()); 
      $rowcount=mysql_num_rows($result); 
     } 
     if($rowcount) 
     { 
      //$_SESSION['username']=$rowcount['username']; 
      $user1=$username1; 
      $pass1=$password1; 
      session_register("user1"); 
      session_register("pass1"); 
      header("location: main.php"); 
     } 
     else 
     { 
?> 
      <html> 
      <head> 
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
      <title>Welcome to yachts database &nbsp;&nbsp;&nbsp;</title> 
      <script type="text/javascript"> 
      function validate() 
      { 
       var username=document.getElementById("username").value; 
       var password=document.getElementById("password").value; 
       if(username.length==0) 
       { 
        alert("Please enter your user name"); 
        document.getElementById("username").focus(); 
        document.getElementById("username").select(); 
        return false; 
       } 
       if(password.length==0) 
       { 
        alert("Please enter your password"); 
        document.getElementById("password").focus(); 
        document.getElementById("password").select(); 
        return false; 
       } 
       submitOK="false"; 
      } 
      </script> 
      <?php 
       include("styles.txt"); 
      ?> 
      </head> 
      <body onLoad="self.focus();document.login.username.focus()"> 
      <br><br><br><br><br><br><br> 
      <center><font size=5 color=blue><b>University of ....... </b></font></center> 
      <center><font size=5 color=blue><b>Yachts Database Project</b></font></center> 
      <form name="login" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" onSubmit="return validate()"> 
      <table width="350" border="1" align="center" cellpadding=0 cellspacing=0 bgcolor=#ffffff bordercolor=#ffffff> 
      <tr> 
       <th colspan=2 height=30 bgcolor=#050E8C><font size=4 color=#ffffff>Please, enter user name and password</font></th> 
      </tr> 
      <tr> 
       <th bgcolor=#E0E0FF><font size=4 color=#2020ff>User name</font></th> 
       <td bgcolor=#E0E0FF align=center><input type="text" name="username" id="username" size="30"></td> 
      </tr> 
      <tr> 
       <th bgcolor=#E0E0FF><font size=4 color=#2020ff>Password</font></th> 
       <td bgcolor=#E0E0FF align=center><input type="password" name=" password" id="password" size="30"></td> 
      </tr> 
      <tr> 
       <td bgcolor=#E0E0FF colspan=2 height=30 align=right><input type="submit" name="login" value="&nbsp;&nbsp;Login&nbsp;&nbsp;">&nbsp;&nbsp;<input type="reset" name="reset" value="&nbsp;&nbsp;Reset&nbsp;&nbsp;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=register.php class=links>Register</a>&nbsp;&nbsp;&nbsp;&nbsp;</td> 
      </tr> 
      <tr> 
       <td bgcolor=#E0E0FF colspan=2 height=30 align=center><font size=3 color=#ff0000>User name or Password wrong!</font></td> 
      </tr> 
      </table> 
      </form> 
      </body> 
      </html> 
      <?php 
     } 
    } 
?> 
+0

peut-être pourriez-vous formater votre code? – bchhun

+0

convenu, je ne peux rien distinguer en ce moment – BrynJ

+0

je ne sais pas comment le formater –

Répondre

1

Vous avez beaucoup de code pour ce que vous essayez d'obtenir. Sans essayer de paraître condescendant, je suggère un retour à la planche à dessin, google 'php user authentication' ou similaire et voir s'il y a quelques exemples simples que vous pouvez suivre.

0
<input type="password" name=" password" id="password" size="30"> 

Vous avez un espace dans le mot de passe le nom de champ, la valeur est stockée dans $ _POST [ « password « ], pas $ _POST [ » password »]

12

Il y a quelques choses que vous devriez changeriez ce code ...

  1. Vous n'avez pas besoin de faire !isset() et empty(): juste empty() fera
  2. Vous ne devriez pas dupliquer le code HTML de la page de connexion - soit le mettre dans une variable ou include() et utilisez PHP pour mettre le message d'erreur ici.
  3. Vous utilisez HTML comme <center> et désapprouvée <font> - les remplacer par CSS
  4. Dans le javascript, submitOK="false"; devrait être return true;
  5. name=" password" devrait être name="password" (les espaces blancs attributs doit être coupé, mais je ne voudrais pas compter sur elle.
  6. Vous mettez l'entrée dans une première requête mysql, vous laissant vulnérable à l'injection sql. utilisez mysql_escape_string()
  7. ne pas utiliser session_register, utilisez $_SESSION à la place.
  8. Un emplacement d'en-tête devrait vraiment être une URL canonique (commençant http: //) bien que chaque navigateur que je connais accepte une URL relative. Facilité d'utilisation - retirer le bouton de réinitialisation.
+0

mysql_real_escape_string() pourrait être mieux –

0

Vous pourriez aussi envisager ce qui se passerait si je suis entré un mot de passe comme celui-ci

' or 1=1 or ' 

Apprenez à désinfectez toutes les entrées qui viennent de l'extérieur!

2

Quel est l'intérêt de ce HTML généré pour ce formulaire?

comme

action="<?php $_SERVER['PHP_SELF'];?>" 

devrait être

action="<?php echo $_SERVER['PHP_SELF'];?>" 

bien vous pouvez trouver le code HTML généré est action = "" dans ce cas, il ne peut pas traiter la forme que vous attendez

+0

En fait, devrait être , comme chaque fois que vous publiez du texte en HTML, pour arrêter les exploits d'injection. – bobince

1

Quand Même si vous avez des problèmes avec un script, il est parfois plus facile de supprimer tout le surplus. Essayez le code ci-dessous. Je l'ai nettoyé un peu.

Je ne l'ai pas testé, mais je pense toujours que c'est un pas en avant.

<?php 

    session_start(); 

    /* If the form has been submitted. */ 
    if (!empty ($_POST)) 
    { 

     /* If there is not missing data. */ 
     if (empty ($_POST['username']) && empty ($_POST['password'])) 
     { 
      /* Connect to the database server. */ 
      $connection = mysql_connect ("localhost", "root") or die ("Error: can not connect to the database."); 

      /* Select the database. */ 
      mysql_select_db ("login") or die ("Error: Can not select the database."); 

      /* Make the query. */ 
      $login_check = mysql_query ("SELECT * FROM users WHERE username = '" . mysql_escape_string ($_POST['username']) . "' AND password = '" . mysql_escape_string ($_POST['password']) . "' LIMIT 1") or die ("MySQL query error."); 

      /* If there is a row returned. */ 
      if (mysql_num_rows ($login_check) > 0) 
      { 
       echo 'The username and password have matched.'; 
       exit; 
      } 

      /* There were no rows returned. */ 
      else 
      { 
       $_SESSION['login_error'] = 'Incorrect username or password.'; 
      } 
     } 

     /* There's missing data. */ 
     else 
     { 
      $_SESSION['login_error'] = 'Both the username and password are required.'; 
     } 
    } 

?> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
     <title>Testing Login Form</title> 
    </head> 
    <body> 
     <form name="login" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
      <p>User name: <input type="text" name="username" id="username"></p> 
      <p>Password: <input type="password" name="password" id="password"></p> 
      <p><input type="submit" name="login" value="Login"></p> 
      <?php 

       if (!empty ($_SESSION['login_error'])) 
       { 
        echo '<p>', htmlspecialchars ($_SESSION['login_error'], ENT_QUOTES), '</p>'; 
        unset ($_SESSION['login_error']); 
       } 

     ?> 
     </form> 
    </body> 
</html> 

Merci de bien vouloir prendre en compte tous les types tapés par RoBorg. C'est un très bon conseil.