php表单问题

时间:2009-05-18 10:55:19

标签: php mysql html forms

我有一个表单,我试图用复选框显示一个表单,然后插入数据库,无论这些复选框是否被选中。然后,每次调用页面时,检查值并将信息附加到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>";

在实际的表格/页面中,我已经进行了适当的清理。

一个很大的问题是没有任何内容被插入到数据库中,并且根本没有返回任何错误!

3 个答案:

答案 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"/>