将复选框值插入数据库

时间:2008-10-28 03:41:48

标签: php sql mysql

我需要帮助解决这个问题,我试图解决一段时间(我是PHP的新手)。 我有一个带有几个复选框的表单,这些复选框从数据库中提取值。 我设法在表单中显示它们,为每个分配适当的值,但不能将它们的值插入到其他数据库中。

以下是代码:

<form id="form1" name="form1" method="post" action="">
<?php
$info_id = $_GET['info_id'];
$kv_dodatoci = mysql_query("SELECT * FROM `dodatoci`") or die('ERROR DISPLAYING: ' . mysql_error());
while ($kol = mysql_fetch_array($kv_dodatoci)){
    $id_dodatoci = $kol['id_dodatoci'];
    $mk = $kol['mk'];


    echo '<input type="checkbox" name="id_dodatoci[]" id="id_dodatoci" value="' . $id_dodatoci . '" />';
    echo '<label for="' . $id_dodatoci.'">' . $mk . '</label><br />';
  }
?>
<input type="hidden" value="<?=$info_id?>" name="info_id" />
<input name="insert_info" type="submit" value="Insert Additional info" />
</form>
<?php
if (isset($_POST['insert_info']) && is_array($id_dodatoci)) {
    echo $id_dodatoci . '<br />';
    echo $mk . '<br />';

    // --- Guess here's the problem  ----- //
    foreach ($_POST['id_dodatoci'] as $dodatok) {
         $dodatok_kv = mysql_query("INSERT INTO `dodatoci_hotel` (id_dodatoci, info_id) VALUES ('$dodatok', '$info_id')") or die('ERROR INSERTING: '.mysql_error());
     }
}


?>

我的问题是遍历所有复选框,并且对于每个复选框,在数据库中填充单独的记录。 实际上我不知道如何识别哪个框被选中,并在db。中放入适当的值。

我希望有人可以帮我解决这个问题,或者给我一些指导。

提前致谢。

6 个答案:

答案 0 :(得分:3)

您可以判断是否选中了复选框,因为它将具有值。如果没有选中它,它将不会出现在PHP的请求/获取/发布中。

您可能想要做的是检查它的价值并根据它开展工作。默认情况下,该值为字符串“on”,但可以通过HTML中的value =''属性进行更改。

以下是一些可能有用的代码片段(不完全是生产质量,但有助于说明):

<强> HTML:

<input type='checkbox' name='ShowCloseWindowLink' value='1'/> Show the 'Close Window' link at the bottom of the form.

PHP:

if (isset($_POST["ShowCloseWindowLink"])) {
    $ShowCloseWindowLink=1;
} else {
    $ShowCloseWindowLink=0;
}

        .....


$sql = "update table set ShowCloseWindowLink = ".mysql_real_escape_string($ShowCloseWindowLink)." where ..."

(假设具有ShowCloseWindowLink列的表将接受1或0)

答案 1 :(得分:0)

海!

好吧,正如Eli写的那样,当未选中复选框时,未设置POST。

我有时使用额外的隐藏字段(-array)来确保,我有一个页面上所有复选框的列表。

示例:

<input type="checkbox" name="my_checkbox[<?=$id_of_checkbox?>]">
<input type="hidden" name="array_checkboxes[<?=$id_of_checkbox?>]" value="is_on_page">

所以我进入$ _POST:

array(2){
 array(1){"my_checkbox" => array(1){[123]=>"1"}}
 array(1){"array_checkboxes" => array(1){[123]=>"is_on_page"}}
}

我甚至得到了第二行,当未选中复选框时,我可以使用以下内容遍历所有复选框:

foreach ($_POST["array_checkboxes"] as $key => $value)
{
  if($value=="is_on_page")
  {
    $value_of_checkbox[$key] = $_POST["my_checkbox"][$key];
    //Save this value
  }
}

希望这有帮助! :)

祝你好运, 巴斯蒂安

答案 2 :(得分:0)

作为额外说明:您对ID和<label>使用了错误的HTML语法。 <label>的“for”属性应指向ID,而不是值。您还需要每个元素的唯一ID。您发布的代码无法验证。

此外,您根本没有验证您的代码。至少,在输出之前在输入上执行htmlspecialchars()htmlentities(),在将数据插入数据库之前在mysql_real_escape_string()执行此操作。

答案 3 :(得分:0)

第二回答:

您可能会这样做:

HTML:

echo '<input type="checkbox" name="id_dodatoci[]" value="'.$id_dodatoci.'" />';

PHP:

if ( !empty($_POST["id_dodatoci"]) ) {
    $id_dodatoci = $_POST["id_dodatoci"];
    print_r($id_dodatoci);
    // This should provide an array of all the checkboxes that were checked.
    // Any not checked will not be present.
} else {
    // None of the id_dodatoci checkboxes were checked.
}

这是因为您对所有复选框使用相同的名称,因此它们的值将作为数组传递给php。如果您使用了不同的名称,那么每个名称都有自己的帖子键/值对。

这也可能有所帮助:

http://www.php-mysql-tutorial.com/php-tutorial/using-php-forms.php

答案 4 :(得分:0)

这是我需要的循环。我意识到我需要使用$i变量遍历每个键。

if(isset($_POST['id_dodatoci'])){
    $id_dodatoci=$_POST['id_dodatoci'];
    $arr_num=count($id_dodatoci);
    $i=0;
    while ($i < $arr_num)
    {
        $query="INSERT INTO `dodatoci_hotel`(id_dodatoci,info_id) 
            VALUES ('$id_dodatoci[$i]','$info_id')";
        $res=mysql_query($query) or die('ERROR INSERTING: '.mysql_error());
        $i++;
    }
}

答案 5 :(得分:-1)

也是很少人使用但在HTML中非常好的东西,你可以拥有:

<input type="hidden" name="my_checkbox" value="N" />
<input type="checkbox" name="my_checkbox" value="Y" />

瞧! - 复选框的默认值......!