PHP 通过复选框布尔值更改数据库的多个值
PHP change multiple values of database through checkboxes boolean
我正在尝试制作某种简单的博客平台,到目前为止它一直运行良好,我的页面在 table 中有一个文章列表,它从我的 SQL 数据库,还有一列说明文章是 public 还是不是。问题是我无法将所有这些复选框写成布尔值来工作(如果选中输入 1 否则为 0)。我认为出错的部分是:
<?php
if (isset($_POST['submit'])) {
try {
$stmt = $db->prepare('SELECT postID FROM blog_posts') ;
$idArray = $stmt->fetch();
for($i = $idArray; $i > 0; $i--){
if(document.getElementById($i).checked){
$public = 1;
} else {
$public = 0;
}
try {
$stmt = $db->prepare('UPDATE blog_posts SET public = :public WHERE postID = '$i) ;
$stmt->execute(array(
':public' => $public
));
}
}
}
?>
完整代码可以在 Hastebin
上找到
使用数组格式命名您的 public
复选框,这样每个复选框的名称中都有 id,如下所示:
<input type="checkbox" name="public[<?php echo $postID ?>]">
然后您可以使用此 PHP 代码进行更新:
if (isset($_POST['submit'])) {
// You can use query here instead of prepare if you want all the blog posts
$stmt = $db->query('SELECT postID FROM blog_posts');
// fetch the postID from each row in the query result
while ($id = $stmt->fetchColumn()) {
// set public based on the submitted value from your form
$public = empty($_POST['public'][$id]) ? 0 : 1;
// do the update
$stmt = $db->prepare('UPDATE blog_posts SET public = ? WHERE postID = ?') ;
$stmt->execute(array($public, $id);
}
}
请注意,您正在 SELECT
ing 每个博客 post,因此如果您的表单不包含每个博客 post,则此代码会将不在您的表单上的每个设置为 public=0
。如果您没有在表单上显示每个博客 post,则需要在 SELECT
语句中添加一个 WHERE
子句,以便它仅包含 已包含在您的表单中。
我正在尝试制作某种简单的博客平台,到目前为止它一直运行良好,我的页面在 table 中有一个文章列表,它从我的 SQL 数据库,还有一列说明文章是 public 还是不是。问题是我无法将所有这些复选框写成布尔值来工作(如果选中输入 1 否则为 0)。我认为出错的部分是:
<?php
if (isset($_POST['submit'])) {
try {
$stmt = $db->prepare('SELECT postID FROM blog_posts') ;
$idArray = $stmt->fetch();
for($i = $idArray; $i > 0; $i--){
if(document.getElementById($i).checked){
$public = 1;
} else {
$public = 0;
}
try {
$stmt = $db->prepare('UPDATE blog_posts SET public = :public WHERE postID = '$i) ;
$stmt->execute(array(
':public' => $public
));
}
}
}
?>
完整代码可以在 Hastebin
上找到使用数组格式命名您的 public
复选框,这样每个复选框的名称中都有 id,如下所示:
<input type="checkbox" name="public[<?php echo $postID ?>]">
然后您可以使用此 PHP 代码进行更新:
if (isset($_POST['submit'])) {
// You can use query here instead of prepare if you want all the blog posts
$stmt = $db->query('SELECT postID FROM blog_posts');
// fetch the postID from each row in the query result
while ($id = $stmt->fetchColumn()) {
// set public based on the submitted value from your form
$public = empty($_POST['public'][$id]) ? 0 : 1;
// do the update
$stmt = $db->prepare('UPDATE blog_posts SET public = ? WHERE postID = ?') ;
$stmt->execute(array($public, $id);
}
}
请注意,您正在 SELECT
ing 每个博客 post,因此如果您的表单不包含每个博客 post,则此代码会将不在您的表单上的每个设置为 public=0
。如果您没有在表单上显示每个博客 post,则需要在 SELECT
语句中添加一个 WHERE
子句,以便它仅包含 已包含在您的表单中。