将<选择>添加到 HTML 登录表单会中断.为什么


Adding <select> to HTML login form breaks. Why?

我已经有一个HTML登录表单工作了一段时间,但现在我需要向它添加<select>

问题是一旦我添加它,登录表单就会中断。

  <form action="" class="form-signin" method="post" role="form">
    <h2 class="form-signin-heading">Sign In</h2>
    <input type="text" class="form-control" name="user" id="user" placeholder="User" required autofocus>
    <input type="password" class="form-control" name="pass" id="pass" placeholder="Pass" required>
    <select class="form-control" id="site" name="site">  // This has been added
      <option value="Company A">Company A</option>
      <option value="Company B">Company B</option>
      <option value="Company C">Company C</option>
    </select> 
    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
  </form>
  <?php
   $dbh = new PDO('sqlite:database.sqlite');
   $stmt = $dbh->prepare("SELECT COUNT(*) FROM users WHERE user = :user AND pass = :pass");
   foreach ($_POST as $key => $value) {
     $stmt->bindParam("$key", $_POST[$key]);
   }
   $stmt->execute();
   if ( $stmt->fetchColumn() > 0 ) {
     session_start();
     $_SESSION['active'] = 1;
     $_SESSION['site'] = $_POST['site']; // This has been added
     $_SESSION['user'] = $_POST['user'];
     header("Location: /");
   }
  ?>

我已经用"//这已被添加"标记了我添加的代码,所以你可以看到哪些部分破坏了它,但我不明白为什么会发生这种情况。

此行代码的原因

$stmt = $dbh->prepare("SELECT COUNT(*) FROM users WHERE user = :user AND pass = :pass");
foreach ($_POST as $key => $value) {
  $stmt->bindParam("$key", $_POST[$key]);
}

您正在绑定所有 POST 项目,但只需要两个userpass因此请保留两者以单独绑定而不是在 foreach 中。

$stmt = $dbh->prepare("SELECT COUNT(*) FROM users WHERE user = :user AND pass = :pass");
$stmt->bindParam(":user", $_POST['user']);
$stmt->bindParam(":pass", $_POST['pass']);

如果 html 在选择原因中看起来很奇怪(缺少关闭选项(所以替换

<option value="Company A">Company A<option>

<option value="Company A">Company A</option>

更改

  <option value="Company A">Company A<option>

  <option value="Company A">Company A</option>

您没有正确关闭第一个选项。

<option value="Company A">Company A<option>

应该是 :

<option value="Company A">Company A</option>

请更改此内容

<option value="Company A">Company A<option>

<option value="Company A">Company A</option>

option有一个拼写错误:结束标签不是结束标签(缺少斜杠(。