【发布时间】:2019-12-04 08:27:09
【问题描述】:
我有一个带有复选框的注册表单,指示用户是否应该拥有 admin_rights,但问题是这不会进入数据库。
如果我检查标题,它确实会使用&admin_rights=on,我以多种方式声明了这个值,例如$rights = mysqli_real_escape_string($link, $_REQUEST['admin_rights']); 或$param_admin = trim($_POST["admin_rights"]);,但这些似乎都不起作用。
将其输入数据库的代码是
$sql = "INSERT INTO users (username, password, admin_rights) VALUES (?, ?, '$param_admin')";
if($stmt = mysqli_prepare($link, $sql)){
// Bind variables to the prepared statement as parameters
mysqli_stmt_bind_param($stmt, "ss", $param_username, $param_password);
// Set parameters
$param_username = $username;
$param_password = password_hash($password, PASSWORD_DEFAULT); // Creates a password hash
// Attempt to execute the prepared statement
if(mysqli_stmt_execute($stmt)){
// Redirect to login page
header("location: login.php");
} else{
echo "Something went wrong. Please try again later.";
}
<div class="form-group">
<input type="checkbox" name="admin_rights" class="form-control checkbox" id="admin_rights">
<label>Admin rights?</label>
</div>
其他数据,例如密码和用户名,确实会出现问题,所以我很确定问题出在布尔复选框中。
我不确定如何解决这个问题,以便 admin_rights 在检查时确实保存为布尔值。
【问题讨论】:
-
复选框选中将返回“on”,因此您可以在 php 代码中检查它,例如:'checkbox == "on"? true : false' 或者您可以将值直接设置到您的 html 中,请检查:stackoverflow.com/questions/6441654/…
-
“但这些似乎都不起作用” - 这意味着什么,究竟?您是否会看到自己的自定义“出现问题”错误消息?在这种情况下,请继续阅读如何正确调试通过 PHP 执行的 MySQLi 查询。
-
(为什么在准备好的语句与占位符和插入直接到查询中的值之间出现这种丑陋的混合?)
-
@leobrl 这似乎有效,谢谢!
-
您在滥用准备好的语句。停止使用
mysqli_real_escape_string并绑定所有参数。
标签: php mysql database forms boolean