多个复选框更新查询

时间:2011-11-07 21:14:15

标签: php mysql html

我有一个应用程序,其中包含数据库表中的多个值,这些值与单个复选框一起生成。当然,复选框被赋予从数据库关联的值。

现在我想要做的是在提交更新数据库时给定已选中或未选中的值。如果我在HTML中硬编码了这些值,这很简单,但由于这些值是数据库驱动的,我不知道如何做到这一点。

非常简单:我想更新数据库给定的复选框值是否已经过检查。

2 个答案:

答案 0 :(得分:4)

你问题的标题是“收音机”按钮,但你的问题是“复选框”。它们是非常不同的东西。这是一个例子。

    <input type="radio" name="fish" value="one"> One Fish
    <input type="radio" name="fish" value="two"> Two Fish
    <input type="radio" name="fish" value="red"> Red Fish
    <input type="radio" name="fish" value="blue"> Blue Fish

以上是单选按钮输入数组的示例。它包含一个字段名称(“fish”)和四个可能的值(“one”,“two”,“red”,“blue”)。

由于它是一个单选按钮,因此在任何给定时间只有其中一个选项有效。这意味着你得到“一个”或“两个”或“红色”或“蓝色”,但除非字段名称不同,否则不可能同时选择“一个”和“红色”(“数字” “,”“颜色”,例如)。

复选框是二进制的,就像一个灯开关。他们要么开,要么开。每个复选框代表自己的字段名称。

    <input type="checkbox" name="light"> On
    <input type="checkbox" name="status"> Single?
    <input type="checkbox" name="featured"> Featured

您可以根据需要检查多个这些,因为每个都有自己的字段名称,可以是真或假(打开或关闭)。

由于我不知道你在谈论哪一个,我会给每个人快速举例。

首先,无线电示例:

    <? $types = array("one","two","three","four"); ?>
    <? foreach ($types as $type): ?>
         <input type="radio" name="fish" value="<?= $type ?>"/> <?= ucwords($type) ?> Fish
    <? endforeach ?>

提交表单后,您将收到与此类似的回复:

    Array
    (
        [fish] => "one"
    )

假设在单选按钮阵列中选择了“one”。

现在,复选框示例:

    <? $fields = array("light", "status", "featured"); ?>

    <? foreach ($fields as $field): ?>
        <input type="checkbox" name="<?= $field ?>"/> <?= ucwords($field) ?>
    <? endforeach ?>

这提供了与上面基于HTML的示例相同的HTML输入。如果您检查字段并提交表单,结果将如下所示:

    Array
    (
        [light] => "on"
        [status] => 
        [featured] => "on"
    )

如果选中复选框,则“on”,如果未选中复选框,则为空白(或可能为“off”)。

根据哪一个,您需要通过获取这些响应并解析它们,然后创建SQL查询,将这些值插入到数据库中。

使用单选按钮,变量很简单:

    $fish = $_POST['fish'];
    $sql = 'INSERT INTO fishes (fish) VALUES ('.mysql_real_escape_string($fish).')';
    mysql_query($sql);

使用复选框,会有点困难:

    $light = $_POST['light'] == 'on' ? 1 : 0;
    $status = $_POST['status'] == 'on' ? 1 : 0;
    $featured = $_POST['status'] == 'on' ? 1 : 0;

    $sql = "INSERT INTO checkboxes (light, status, featured) VALUES ($light, $status, $featured)";
    mysql_query($sql);

如你所说,你的问题相当含糊。我希望我的答案提供足够的信息,让你开始朝着你需要的方向前进。当然,这是一个非常基本的示例,您可能希望动态生成SQL语句,这样您就不必对每个字段进行硬编码或将其应用于更通用的函数来处理多种类型的表单。

无论如何,祝你好运。希望这会有所帮助。

答案 1 :(得分:1)

对于那些想知道我是如何完成这项工作的人来说,这是我的代码:

$publish = $_POST['publish'];
while (list ($key,$val) = @each ($publish)) 
{
    $temp=mysql_query("SELECT * FROM temp WHERE id = '$val'");
    while($row = mysql_fetch_array($temp))
{
$id = $row['id'];
$title = $row['title'];
$maintext = $row['maintext'];
$order = $row['order'];
$pageID = $row['pageID'];
$sql = "INSERT INTO content (id, title, maintext, order, pageID) VALUES ({$row['id']}, {$row['title']}, {$row['maintext']}, {$row['order']}, {$row['pageID']})";
$sql2 = "UPDATE content SET `title` = '$title', `maintext` = '$maintext', `order` = '$order', `pageID` = '$pageID' WHERE `id` = '$id'";
$sql3 = "DELETE FROM temp WHERE id = '$id'";
mysql_query($sql);
    mysql_query($sql2);
    mysql_query($sql3);
    }
} 
?>