我需要帮助解决这个问题,我试图解决一段时间(我是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。中放入适当的值。
我希望有人可以帮我解决这个问题,或者给我一些指导。
提前致谢。
答案 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" />
和瞧! - 复选框的默认值......!