我已经有一个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 项目,但只需要两个user
和pass
因此请保留两者以单独绑定而不是在 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
有一个拼写错误:结束标签不是结束标签(缺少斜杠(。