【发布时间】:2009-05-15 13:13:14
【问题描述】:
我有以下 php 表单。
我正在尝试这样做,以便在加载表单时,将为这些值分配适当的检查变量。此变量将包含“checked”或“”。如果包含已选中,则它与 html 一起显示的方式应该会导致相关复选框被选中。
事实上,变量似乎没有被传递。当我从 submitinfo 分支中回显 $deleted 或 $notice 时,它们是空白的。此外,没有任何内容被插入到数据库中,并且我没有收到任何数据库错误。我该如何检查?
<?php
if (isset($_GET["cmd"]))
$cmd = $_GET["cmd"]; else
if (isset($_POST["cmd"]))
$cmd = $_POST["cmd"]; else
die("Invalid URL");
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","password", "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 STATUS where ARTICLE_NO = '$pk'");
$checkDeleted = "";
$checkNotice = "";
while ($row = mysqli_fetch_assoc($getformdata)) {
$checkDeleted = $row['deleted'];
$checkNotice = $row['notice'];
}
if($cmd=="submitinfo") {
$statusQuery = "INSERT INTO STATUS VALUES (?, ?)";
if ($statusInfo = $con->prepare($statusQuery)) {
$statusInfo->bind_param("ss", $deleted, $notice);
$statusInfo->execute();
$statusInfo->close();
echo "true";
} else {
echo "false";
}
print_r($con->error);
}
if($cmd=="EditStatusData") {
echo "<form name=\"statusForm\" action=\"test.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." />
<br />
Abmahnung:
<input type=\"checkbox\" name=\"notice\" value=\"checked\" ".$checkNotice." />
<br />
<input type=\"hidden\" name=\"cmd\" value=\"submitinfo\" />
<input name=\"Submit\" type=\"submit\" value=\"submit\" />
</form>";
} else {
print_r($con->error);
}
【问题讨论】:
-
试着把error_reporting(E_ALL);在脚本的顶部 - 可以让您了解正在发生的事情。
-
另外,您可能希望确保在将 $pk 回显到浏览器之前对其进行验证!
-
"select * from STATUS where ARTICLE_NO = '$pk'" 也很危险
-
代码减少了。真实物品上已进行了正确的消毒。