问题与数据库中的复选框值...?

时间:2014-04-12 13:44:32

标签: php mysqli

我有一个设置页面作为我的游戏类的一部分,其中一个设置字段是一个复选框。

这是复选框的HTML字段:

<div class="field">
    <label for="allow_robot_name">Allow Robot Name?</label>
    <input type="checkbox" name="allow_robot_name" <?php if ($r->allow_robot_name == 1) { echo "checked"; } ?>>Yes
</div>

我遇到的问题是当用户选中复选框时,数据库中的值更改为1.但是,如果他们取消选中它然后更新数据库,则复选框将重置为已选中且值不会更改为1至0.

这是我更新数据库的代码:

<?php
$records = array();


if (!empty($_POST)) {
    if (isset($_POST['site_name'], $_POST['header_text'], $_POST['footer_copyright'], $_POST['default_robot_name'])) {

$site_name          = $_POST['site_name'];
$header_text        = $_POST['header_text'];
$footer_copyright   = $_POST['footer_copyright'];
$default_robot_name = $_POST['default_robot_name'];

if (isset($_POST['allow_robot_name'])) {
    $allow_robot_name = 1;
} else {
  $allow_robot_name = 0;
}

if (!empty($site_name) && !empty($header_text) && !empty($footer_copyright) && !empty($allow_robot_name) && !empty($default_robot_name)) {
$update = $db->prepare("UPDATE user_settings set site_name = ?, header_text = ?, footer_copyright = ?, allow_robot_name = ?, default_robot_name = ?");
$update->bind_param('sssis', $site_name, $header_text, $footer_copyright, $allow_robot_name, $default_robot_name);


if ($update->execute()) {
    header('Location: index.php');
    die();
     }
   }
 }
}

为什么复选框值不更新?

1 个答案:

答案 0 :(得分:1)

归因于!empty($allow_robot_name)

empty($x)表示!isset($x) || $x == null。由于0被认为与PHP中的null等效,因此empty($allow_robot_name)将评估为true,如果未选中该复选框,则不会执行更新查询。