次のPHPフォームがあります。これはmysqlデータベースにポストバックしています。私の問題は、更新クエリが機能するようですが、常に "checked"で上書きされることです。私がしたいのは、データベースから現在の値を取得することです。それからポストに値がある場合は、その値を取得します。今...なぜこれは動作していないのですか?それが_POSTにあるかどうかをチェックするときにelse節を持つ必要がありますか?その場合、$ checkDeleted = "";で変数を初期化する必要がありますか?mysqlデータベースの更新ロジックに問題があります
<?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ブランチ内のものと置き換えなければなりません...なぜですか? 1つのクエリしか持てないのはなぜですか?
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リクエストの場合にのみtrueです。 – gacrux
また、ページは常にpkパラメータで呼び出されるので、pkは常にGETを介して設定されます。 –