Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用复选框更新数据库列_Php_Mysql_Mysqli - Fatal编程技术网

Php 使用复选框更新数据库列

Php 使用复选框更新数据库列,php,mysql,mysqli,Php,Mysql,Mysqli,在没有向服务器提交表单的情况下,为什么管理员用户仅仅通过刷新页面就变成了非管理员用户 更新代码: $status = '0'; if (isset($_POST['checkbox']) && $_POST['checkbox'] == '1') { $status = $_POST['checkbox']; } $stmt = $mysqli->prepare("UPDATE members SET isAdmin = ? WHERE id = \"$id\"

在没有向服务器提交表单的情况下,为什么管理员用户仅仅通过刷新页面就变成了非管理员用户


更新代码:

$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();
?>
/>

两件事结合起来,将括号移到php代码段的末尾,只需检查post是否已设置,但它是否等于任何内容<代码>$status
将在发布时用于更新它。请注意,由于表单处于循环中,
id=“checkbox”
在使用javascript时会成为一个问题
id=“*”
应该是唯一的,以便提供值。最后,
$id
的来源在所提供的脚本中是未知的,您需要确保您也在该值上绑定了
bind_param
(也许应该由post提供)。我不确定这个变量的来源,所以很难对此进行评论

?>

<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
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();
}

请再加一点代码。
$isAdmin
是如何设置的?很抱歉,它是从数据库最初设置的0或非管理员用户中提取的。问题的形式是管理员用户如何授予非管理员用户访问权限。在我看来,您应该在php代码段的末尾加上右括号,以便所有代码都在
$\u POST['checkbox']
上执行。每次在
$status='0'
重新加载时都会执行,不是吗?@Rasclatt这样就解决了一个问题,我刚刚测试过,它实际上并没有更新数据库。为什么要使用准备好的语句,只绑定其中一个参数,然后直接嵌入一个明显的参数-
id
?php代码并没有解决这个问题,只是重新创建了原始问题您从哪里获得
$id
?您已硬编码了
$id
,因此它将始终使用表单中的admin post值更新该id值。您可能需要在表单中提供
id
值,以便在提交时使用admin值发布该id。不类似于:
然后在处理过程中,执行
$id=$\u POST['id']然后在运行sql时也绑定它。实际上,$id来自另一个查询语句的db
$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
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);