我有以下PHP表单,它回发到mysql数据库。我的问题是更新查询似乎工作,但总是被“已检查”覆盖。我想要做的是check是从数据库中获取当前值,然后如果post中有值,请改为获取。现在......为什么这不起作用?检查它是否在_POST中时是否需要有else子句?如果是这种情况,我是否需要使用$ checkDeleted =“”来初始化变量;?
<?php
error_reporting(E_ALL);
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"];
}
$checkDeleted = "";
$con = mysqli_connect("localhost","user","pw", "db");
$getformdata = $con->query("select ARTICLE_NO, deleted from STATUS where ARTICLE_NO = '$pk'");
while ($row = mysqli_fetch_assoc($getformdata)) {
$ARTICLE_NO = $row['ARTICLE_NO'];
$checkDeleted = $row['deleted'];
}
$checkboxes = (isset($_POST['checkboxes'])? $_POST['checkboxes'] : array());
if (in_array('deleted', $checkboxes)) $checkDeleted = 'checked';
if($cmd=="submitinfo") {
if ($ARTICLE_NO == null) {
$statusQuery = "INSERT INTO STATUS VALUES (?, ?)";
if ($statusInfo = $con->prepare($statusQuery)) {
$statusInfo->bind_param("ss", $pk, $checkDeleted);
$statusInfo->execute();
$statusInfo->close();
} else {
print_r($con->error);
}
} else if ($ARTICLE_NO == $pk) {
$statusQuery = "UPDATE STATUS SET deleted = ? WHERE ARTICLE_NO = ?";
if ($statusInfo = $con->prepare($statusQuery)) {
$statusInfo->bind_param("ss", $checkDeleted, $pk);
$statusInfo->execute();
$statusInfo->close();
} else {
print_r($con->error);
}
}
}
if($cmd=="EditStatusData") {
echo "<form name=\"statusForm\" action=\"test.php?pk=".$pk."\" method=\"post\" enctype=\"multipart/form-data\">
<input type=\"checkbox\" name=\"checkboxes[]\" value=\"deleted\" ".$checkDeleted." />
<label for=\"deleted\">Delete</label>
<input type=\"hidden\" name=\"cmd\" value=\"submitinfo\" />
<input name=\"Submit\" type=\"submit\" value=\"submit\" />
</form>";
}
?>
我尝试更改该行以将checkDeleted设置为以下内容,这没有任何区别......尽管如此?
if (in_array('deleted', $checkboxes)) {
$checkDeleted = 'checked';
} else {
$checkDeleted = '';
}
编辑:好的,我已经设法让它工作,但只有在更改为
之后$ checkDeleted = in_array('已删除',$复选框)? 'checked':'';
根据下面的答案,但这仍然无效。为了使它工作,我不得不删除数据库查询,并将其替换为submitinfo分支中的一个,以及EditStatusData分支中的一个...为什么?为什么不能只有一个查询?
if($cmd=="submitinfo") {
$getformdata = $con->query("select ARTICLE_NO from STATUS where ARTICLE_NO = '$pk'");
while ($row = mysqli_fetch_assoc($getformdata)) {
$ARTICLE_NO = $row['ARTICLE_NO'];
}
if ($ARTICLE_NO == null) { etc
和
if($cmd=="EditStatusData") {
$getformdata = $con->query("select deleted from STATUS where ARTICLE_NO = '$pk'");
while ($row = mysqli_fetch_assoc($getformdata)) {
$checkDeleted = $row['deleted'];
} etc
答案 0 :(得分:1)
这与您的其他问题非常相似
mysql not updating from php form
代码没有任何问题,它完全符合您的要求
我想要做的是从数据库中获取当前值,然后如果post中有值,请改为获取。
案例1:没有勾选的html表格
案例2.带刻度的html表单
所以无论你是否勾选,一旦你将数据库值改为检查,那么就无法改变它
我将假设您要做的是始终使用勾选框设置为覆盖数据库值,在这种情况下
替换此行
if (in_array('deleted', $checkboxes)) $checkDeleted = 'checked';
用这个
$checkDeleted = in_array('deleted', $checkboxes) ? 'checked' : '';
答案 1 :(得分:0)
只有在您获取数据时才会有效:
$getformdata = $con->query("select ARTICLE_NO, deleted from STATUS where ARTICLE_NO = '$pk'");
在您的代码中,如果您的请求是POST,则不会设置$ pk。您还应该转义此行中的$ pk变量,因为用户可以在$ _GET ['pk']中放置他们喜欢的任何数据,这可能会破坏您的SQL查询。