다음 PHP 폼이 있는데, mysql 데이터베이스에 다시 게시됩니다. 내 문제는 업데이트 쿼리가 작동하지만 항상 "checked"로 덮어 쓰게된다는 것입니다. 내가하고 싶은 일은 데이터베이스에서 현재 값을 가져 오는 것입니다. 그런 다음 게시물에 값이 있으면 대신 가져옵니다. 자 ... 왜이게 효과가없는거야? _POST에 있는지 검사 할 때 else 절이 있어야합니까? 그렇다면 $ checkDeleted = "";를 사용하여 변수를 초기화해야합니까?mysql db에 대한 업데이트 로직에 문제가 있습니다
<?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 = '';
}
편집 : OK, 나는이 일을 얻는 것을 처리했다,하지만
$ 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
와
를 대체 할 경우
에 항상 확인란이 설정되어 어떤과 데이터베이스 값을 덮어 쓰게됩니다 싶지 ? –
'(isset ($ _ GET [ "pk"]))'행은 GET 요청 인 경우에만 유효합니다. – gacrux
또한 항상 pk 매개 변수로 페이지가 호출되므로 pk는 항상 GET을 통해 설정됩니다. sanitisation 언급이 필요합니다 .. –