2016-06-28 84 views
0

所以我有这个代码,它不工作...你能帮我吗?登录表格MySqli

这是登录表单 - >

<form name="login" action="entrar.php" method="post"> 
      <fieldset> 
       <label>E-mail:</label> 
       <input type="text" name="email"> 
      </fieldset> 
      <fieldset> 
       <label>Password:</label> 
       <input type="password" name="password"> 
      </fieldset> 
       <button type="submit">Login</button> 
       <a href="recuperar.html">Recuperar a Password</a> 
     </form>  

这是检查登录 - >

<?php 
    if(isset($_POST['email']) && isset($_POST['password'])){ 
     $lig=new mysqli("localhost", "root", "", "dompingasbd"); 
     if($lig->connect_error==NULL){ 
      $inst=$lig->prepare("SELECT password FROM cliente WHERE email=?"); 
      $inst->bind_param("s", $_POST['email']); 
      $inst->execute(); 
      $inst->bind_result($hashBD); 
      if($inst->fetch()==TRUE && 
           password_verify($_POST['password'], $hashBD)==TRUE){ 
       $_SESSION['utilizador']=$_POST['email']; 
       echo "<p>Welcome!!!</p>"; 
      } 
      else{ 
       session_destroy(); 
       echo "<p>Wrong!</p>"; 
      } 
      $inst->close();    
      $lig->close();  
     } 
     else echo "<p>Por favor efetue o <a href='Login.php'>login</a></p>"; 
    } 
    else echo "<p>Por favor efetue o <a href='Login.php'>login</a></p>"; 
    ?> 

它总是返回错误的回声......你觉得是错的?谢谢

+0

它是否产生页面上显示的错误?它回来了什么? –

+2

当你'echo $ hashBD;'它输出了什么内容,如果你只是手动把它放在'password_verify'上并且发布密码,它会返回true吗? –

+0

它返回回声“

错误!

”当我用完全相同的凭据登录与数据库 –

回答

0

尝试使用while($ inst-> fetch())而不是检查fetch()是否返回true。

<?php 
if(isset($_POST['email']) && isset($_POST['password'])){ 
    $lig=new mysqli("localhost", "root", "", "dompingasbd"); 
    if($lig->connect_error==NULL){ 
     $inst=$lig->prepare("SELECT password FROM cliente WHERE email=?"); 
     $inst->bind_param("s", $_POST['email']); 
     $inst->execute(); 
     $inst->bind_result($hashBD); 
     while($inst->fetch()) { 
      if (password_verify($_POST['password'], $hashBD)) { 
       $_SESSION['utilizador']=$_POST['email']; 
       echo "<p>Welcome!!!</p>"; 
      } 
      else { 
       session_destroy(); 
       echo "<p>Wrong!</p>"; 
      } 
     } 
     $inst->close();    
     $lig->close();  
    } 
    else echo "<p>Por favor efetue o <a href='Login.php'>login</a></p>"; 
} 
else echo "<p>Por favor efetue o <a href='Login.php'>login</a></p>"; 
?> 
+1

没有解释?像你修正了什么错误? –

+0

替换$ inst-> bind_result($ hashBD);和$ inst-> close(); –

+0

我认为你的$ stmt实际上是$ inst。 –