为什么表单提交按钮只有在双击时才有反应


Why the form submit button is reacting only in double-click?

所以我有一个简单的登录页面,像这样:

   <fieldset>
    <legend>Verification</legend>
   <form method="post" action="authentication.php">

<?php if($_GET['error']==1){
      echo "<p style='"float: left; '" class='"criticMsg'">Username or password are wrong</p>";  
    }
    ?>

 <br /><br /> <br /><br />
 <label style="float: left; margin-top: 15px;" for="username">User</label><input    type="text" name="username"></input><br />
 <label for="password">Password</label><input type="password" name="password"></input>  <br />
  <input type="submit" class="globalBtn" value="Enter"></input>
  </form>
    </fieldset>

则authenticate.php文件如下所示:

 include ('functions.php');
if(valid_details($_POST['username'], $_POST['password'])){
header("Location: ../../storage_update.php?message=1");
}else{
header("Location: login.php?error=1");
}

最后,functions.php看起来像这样

include("../connection.php");

$sql = "SELECT user, pass FROM users";
$back = "There is an error. <a href='"login.php'">Back</a>";
$result = $conn->query($sql) or die($back);
while($row = $result->fetch_object()){
//validates user input
function valid_details($username, $password){
if(isset($username) && $username == $row->user){
   if(isset($password) && $password == $row->pass){
   return true;}
   }

  };
 }

当我输入数据库中提供的正确用户名和密码时,我在url中得到error=1变量,这不是我对正确凭据的期望。然而,如果我快速双击提交按钮,它让我在预期的页面返回消息=1在url中,所以这意味着函数valid_credentials是工作正常,但为什么按钮反应像这样?编辑在页面storage_update.php(登陆页)我已经实现了fancybox jquery插件

你的代码结构真的很奇怪,如果我有我的方式,我会重写大部分,无论如何,把它放在一边。现在你的函数在一个while循环中,为什么你要在第一个地方循环很奇怪,你可以直接在数据库中检查你要找的用户。见下文。

include("../connection.php");
function valid_details($username, $password){
    $sql = "SELECT user, pass FROM users";
    $sql .= "WHERE user='".$username."' AND pass='".$password."'"; 
    $back = "There is an error. <a href='"login.php'">Back</a>";
    $result = $conn->query($sql) or die($back);
    return count( $result ) > 0             
}