我有一个表单,我试图用复选框显示一个表单,然后插入数据库,无论这些复选框是否被选中。然后,每次调用页面时,检查值并将信息附加到html表单以适当显示已选中或未选中的复选框。
我修改了下面的代码示例,使其缩短,我知道我将选中的值分配给'value',这将无法执行任何操作。
的方法
<input type="checkbox" name="notice" value="checked" checked/>
显示选中的复选框,而无效的html,适用于每个浏览器,并基于示例here。我宁愿坚持这种做法。
现在,我没有看到我的代码有什么问题。
第一步应该是从数据库中检索值,其中将检索一行onyl,因为article_no是主键。如果没有检索到任何内容,则只需为变量分配“”,这将导致复选框未选中。
检查该值后,如果选中该值,则应将其插入数据库,并在下次查看页面时显示为已选中。
现在,实际上,这段代码很难失败。 firebug没有显示在控制台中发送或接收的任何内容,没有使用php或mysql记录任何错误,数据库中没有任何内容出现,尽管这些字段是正确的,没有报告mysql错误......
有什么问题?
The code:
<?php
error_reporting(E_ALL);
if (isset($_GET["cmd"]))
$cmd = $_GET["cmd"];
else
if (isset($_POST["cmd"]))
$cmd = $_POST["cmd"];
if (isset($_GET["pk"]))
{ $pk = $_GET["pk"];}
if (isset($_POST["deleted"]))
{ $deleted = $_POST["deleted"];}
if (isset($_POST["notice"]))
{ $notice = $_POST["notice"];}
$con = mysqli_connect("localhost","user","pass", "db");
if (!$con) {
echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
exit;
}
$con->set_charset("utf8");
$getformdata = $con->query("select * from TEST where ARTICLE_NO = '$pk'");
$checkDeleted = "";
$checkNotice = "";
while ($row = mysqli_fetch_assoc($getformdata))
{
$checkDeleted = $row['deleted'];
$checkNotice = $row['notice'];
}
if($cmd=="submitinfo"){
$statusQuery = "INSERT INTO TEST VALUES (?, ?, ?)";
if ($statusInfo = $con->prepare($statusQuery)) {
$statusInfo->bind_param("sss", $pk, $deleted, $notice);
$statusInfo->execute();
$statusInfo->close();
} else {
print_r($con->error);
}
}
echo "<form name=\"statusForm\" action=\"x.php\" method=\"post\" enctype=\"multipart/form-data\">
<h1>Editing information for auction: ".$pk."</h1>
Löschung Ebay:
<input type=\"checkbox\" name=\"deleted\" value=\"checked\" ".$checkDeleted." align=\"right\"/>
<br />
Abmahnung:
<input type=\"checkbox\" name=\"notice\" value=\"checked\" ".$checkNotice." align=\"left\"/>
<br />
<input type=\"hidden\" name=\"cmd\" value=\"submitinfo\" />
<input name=\"Submit\" type=\"submit\" value=\"submit\" />
</form>";
在实际的表格/页面中,我已经进行了适当的清理。
一个很大的问题是没有任何内容被插入到数据库中,并且根本没有返回任何错误!
答案 0 :(得分:1)
重要的是要记住,未经检查的复选框在发送表单时不会向表单提供任何值。如果未选中已删除的框,则不会设置$ _POST ['deleted']值。
考虑到这一点,如果清除该复选框,看起来您实际上并未设置$ deleted的值。使用这样的成语。
$deleted = isset($_POST["deleted"]) ? 1: 0;
将1和0替换为数据库表中所需的任何值,以用于已检查和未检查的状态(在您的情况下,“已选中”和“”)
答案 1 :(得分:0)
与Paul Dixon的答案一样,我有时也这样做过:
<input type="hidden" name="notice" value="not checked" />
<input type="checkbox" name="notice" value="checked" checked="checked" />
如果用户取消选中该复选框,则会发送隐藏输入的值。这样,$_POST['notice']
始终会发送到您的脚本。
答案 2 :(得分:-1)
我认为复选框应该这样做:
<input type="checkbox" name="notice1" value="value1" checked="checked"/>
<input type="checkbox" name="notice2" value="value2" checked="checked"/>