mysql用表单数组更新查询

时间:2011-11-15 03:49:46

标签: php html

多个帖子,但我仍然卡住......我在这里缺少一些基本的东西。我有一个带有选择的表单:

<select name="camera_status[]">
  <option <?php echo $enabled_option; ?>>Enabled</option>
  <option <?php echo $disabled_option; ?>>Disabled</option>
</select>

此表单使用循环构建,以提供所有相机设置的列表。所以你会有多个摄像头和相应的camera_status。我还有一个隐藏的输入字段与camera_id:     

使用一些javascript处理camera_id。然后我用:

处理
$camera_id = $_POST['camera_id'];

if (is_array($_POST['camera_status']))
{
  foreach ($_POST['camera_status'] as $camera_status) {
    $query_status = 'UPDATE `#__cameras` SET `camera_status` ="'.$camera_status.'" WHERE `camera_id`='.$camera_id;
    $db->setQuery($query_status);
    $db->query();
  }
}

如果我回显camera_id它是正确的。但我的foreach运行更新查询完整的相机列表,而不是只选择一个。所以它只更新列表中的最后一个摄像头。让我知道更新完整代码是否有意义。显然,我这一切都错了......

3 个答案:

答案 0 :(得分:1)

编辑:如果您有单一选择,那么它比那更简单:

HTML:

<select name="camera_status">
  <option value="Enabled">Enabled</option>
  <option value="Disabled">Disabled</option>
</select>

和PHP:

$camera_id = (int) $_POST['camera_id']; //Here you had SQL injection.
$camera_status = mysql_real_escape_string($_POST['camera_status']); //Neither that was protected.

$query_status = 'UPDATE `#__cameras` SET `camera_status` ="'.$camera_status.'" WHERE `camera_id`='.$camera_id;
$db->setQuery($query_status);
$db->query();

答案 1 :(得分:0)

您的页面思维过程存在根本缺陷。当您输出多个<select name="camera_status[]">元素时,您将获得更多结果。使用其中两个,您将在数组中获得两个值,依此类推。

您正在做的是输出相机列表,让用户选择要修改的相机,然后,从那时起,所有相机设置现在仅适用于该特定相机。如果是这种情况,则不需要为相机设置使用数组,包括camera_status。只需删除阵列部分并停止为每个摄像机设置输出多个HTML元素(因为您知道一旦选择了摄像机,这些值将应用于该特定摄像机)。

但是,如果显示多个摄像头的页面允许用户修改每个摄像头及其设置,则需要适应用户的输入。

如果是后者,这是一个巧妙的技巧 - 修改你的<select>所以当你输出你的相机形式时它就像这样:

<select name="camera_status[<?php echo $row['camera_id']; ?>]">
    <option value="1">Enabled</option>
    <option value="0">Disabled</option>
</select>

现在,当你抓住$_POST['camera_status']时,它将是一个数组,其中相机ID作为键,其选定值为值。所以现在,你可以这样做:

if( is_array($_POST['camera_status']))
{
    foreach ($_POST['camera_status'] as $camera_id => $camera_status) {
        $camera_status = intval( $camera_status); // Be wary of SQL injection
        $camera_id = intval( $camera_id);
        $query_status = 'UPDATE `#__cameras` SET `camera_status` ="'.$camera_status.'" WHERE `camera_id`='.$camera_id;
        $db->setQuery($query_status);
        $db->query();
    }
}

现在,这将使用所选的正确值更新每台相机。

答案 2 :(得分:0)

够容易。将值属性添加到<option>标记,以便每个标记都具有值

<select name="camera_status">
  <option value="1" <?php echo $enabled_option; ?>>Enabled</option>
  <option value="0" <?php echo $disabled_option; ?>>Disabled</option>
</select>

然后,在你的php中,寻找那个值

foreach ($_POST['camera_status'] as $camera_status) {
    if($camera_status == 1) {
        $query_status = 'UPDATE `#__cameras` SET `camera_status` ="'.$camera_status.'" WHERE `camera_id`='.$camera_id;
        $db->setQuery($query_status);
        $db->query();
    }
}
相关问题