gpt4 book ai didi

php - 使用复选框更新数据库列

转载 作者:可可西里 更新时间:2023-11-01 09:02:05 25 4
gpt4 key购买 nike

echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">";
if ($isAdmin === '1'){
echo "<input id=\"checkbox\" name=\"checkbox\" type=\"checkbox\" checked=\"checked\" value=\"1\" />";
} else {
echo "<input id=\"checkbox\" name=\"checkbox\" type=\"checkbox\" value=\"0\" />";
}
echo "<input type=\"submit\" name=\"formSubmit\" value=\"X\" />";
echo "</form>";

上面的代码在一个 while 循环中,所以它为每个用户创建了一个表单。我的 PHP 代码如下所示:

$status = '0';
if (isset($_POST['checkbox']) && $_POST['checkbox'] == '1') {
$status = $_POST['checkbox'];
}

$stmt = $mysqli->prepare("UPDATE members SET isAdmin = ? WHERE id = \"$id\"");
$stmt->bind_param('s', $status);

$stmt->execute();

$stmt->close();
$mysqli->close();

为什么没有真正向服务器提交表单,admin用户只是刷新页面就变成了非admin用户?


更新代码:

?>

<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="POST">
<input type="checkbox" id="checkbox" name="checkbox" value="<?php echo ($checked)? '1' : '0'; ?>"<?php if($checked) echo ' checked="checked"'; ?> />
<input type="hidden" id="userid" name="userid" value="<? echo $members_row['id']; ?>" />
<input type="submit" id="submit" name="submit" value=">>" />
</form>

<?

$status = '0';
if (isset($_POST['checkbox']) && $_POST['checkbox'] == '1') {
$status = $_POST['checkbox'];
$id = $_POST['id'];

$stmt = $mysqli->prepare("UPDATE members SET isAdmin = ? WHERE id = \"$id\"");
$stmt->bind_param('s', $status);

$stmt->execute();

$stmt->close();
$mysqli->close();
}

最佳答案

一些事情,将括号移动到 php 代码段的末尾,然后检查帖子是否已设置,但不检查它是否等于任何内容。 $status 将用于在发布时更新它。旁注,由于表单处于循环中,因此当/如果您使用 javascript,id="checkbox" 将成为问题。 id="*" 应该是唯一的以提供值(value)。最后,$id 的来源在所提供的脚本中是未知的,您需要确保您也在该值上 bind_param(也许它应该由帖子提供?)。不确定该变量的来源,因此很难对此发表评论。

$checked = ($isAdmin == '1');
?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="POST">
<input id="checkbox" name="checkbox" type="checkbox" value="<?php echo ($checked)? '1' : '0'; ?>"<?php if($checked) echo ' checked="checked"'; ?> />
<input type="submit" name="formSubmit" value="X" />
</form>
<?php //continue with loop

大概这是在顶部,因为您的表单引用了 PHP_SELF:

<?php
if (isset($_POST['checkbox'])) {
$status = $_POST['checkbox'];
// The $id variable is suspect here. Probably should be provided by the post?
$stmt = $mysqli->prepare("UPDATE members SET isAdmin = ? WHERE id = '$id'");
$stmt->bind_param('s', $status);
$stmt->execute();
$stmt->close();
$mysqli->close();
}

如果我这样做,我会使用函数或类/方法来使其更易于阅读和重用:

function updateUserRole($id,$status,$mysqli)
{
$stmt = $mysqli->prepare("UPDATE members SET isAdmin = ? WHERE id = ?");
$stmt->bind_param('si', $status,$id);
$stmt->execute();
$stmt->close();
}

// To execute, include the function
// then run the "if" condition
if (isset($_POST['checkbox']))
updateUserRole($_POST['id'],$_POST['checkbox'],$mysqli);

关于php - 使用复选框更新数据库列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38600000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com