php表单问题

php表单问题,php,mysql,html,forms,Php,Mysql,Html,Forms,我有一个表单,我试图用它来显示一个带有复选框的表单,然后插入到数据库中,不管这些复选框是否被选中。然后,每次调用页面时,检查该值并将信息附加到html表单,以适当地显示复选框是否选中 我已经修改了下面的代码示例,使其简短,并且我知道我正在将选中的值指定给“value”,这不会起任何作用 方法 <input type="checkbox" name="notice" value="checked" checked/> 将复选框显示为选中状态虽然不是有效的html,但在每个浏览器

我有一个表单,我试图用它来显示一个带有复选框的表单,然后插入到数据库中,不管这些复选框是否被选中。然后,每次调用页面时,检查该值并将信息附加到html表单,以适当地显示复选框是否选中

我已经修改了下面的代码示例,使其简短,并且我知道我正在将选中的值指定给“value”,这不会起任何作用

方法

<input type="checkbox" name="notice"  value="checked" checked/>

将复选框显示为选中状态虽然不是有效的html,但在每个浏览器中都有效,并且基于示例。我更愿意坚持这种方法

现在,我看不出我的代码有什么问题

第一步应该是从数据库中检索值,只检索一行,因为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>";
代码:

重要的是要记住,未选中复选框在发送表单时不会为表单提供任何值。如果未选中“已删除”框,则没有设置$\u POST['deleted']值

考虑到这一点,如果清除复选框,看起来您实际上没有设置$deleted的值。用这样的成语

$deleted = isset($_POST["deleted"]) ? 1: 0;

用数据库表中所需的任何值替换1和0,以替换选中和未选中状态(在您的示例中为“checked”和“”)

我认为复选框应该这样做:

<input type="checkbox" name="notice1"  value="value1" checked="checked"/>
<input type="checkbox" name="notice2"  value="value2" checked="checked"/>

按照保罗·迪克森的回答,我有时会这样做:

<input type="hidden" name="notice" value="not checked" />
<input type="checkbox" name="notice" value="checked" checked="checked" />


如果用户取消选中该复选框,则会发送隐藏输入的值。通过这种方式,
$\u POST['notice']
始终发送到脚本。

也在PHP中添加输入清理-客户端清理可以关闭…您的代码容易受到sql注入的攻击。在第一个select查询中对$pk使用bind_param。它也容易受到xss注入的攻击。在html中嵌入$pk时,使用
htmlspecialchars()
退出$pk。是的,但是我不能很容易地做我想做的事情。正如我所说,我的方法是有效的,所以它很好。我想你在想单选按钮。如果用户选中这两个复选框,则只发送值2(除非您将name=“notice”转换为name=“notice[])。这不是对问题的直接回答,而是关于html的更多提示:a要指向的点是,如何在输入字段上使用checked属性。如果未选中该复选框,然后,相关值肯定应保持为“”,这将简单地显示为未检查。我仍然不明白为什么没有发送任何内容,我也没有收到任何错误。您没有收到任何未检查复选框的提交值,我已修改了我的答案以使其更清晰。感谢您的答案…现在就测试这个。尝试使用$deleted=isset($\u POST[“deleted”])?“已勾选”:“;我觉得很奇怪,我没有收到任何错误。嗯,数据库中仍然没有任何东西,没有错误…,我真的不明白这一点。