私は、フォームをチェックボックスで表示し、そのチェックボックスがチェックされているかどうかにかかわらずデータベースに挿入しようとするフォームを持っています。次に、ページが呼び出されるたびに、値をチェックして情報をHTMLフォームに追加し、チェックボックスをチェックして適切に表示します。PHPフォームの問題
以下のコード例を簡潔にするように変更しました。チェックされた値を 'value'に割り当てていることに気付きましたが、これは何も行いません。チェックするよう
<input type="checkbox" name="notice" value="checked" checked/>
のアプローチが有効でないHTMLながら、すべてのブラウザで動作し、かつ例hereに基づいて、チェックボックスを表示します。私はこのアプローチにこだわりたい。
ここで、自分のコードに何が間違っているかわかりません。
最初の手順は、article_noが主キーであるため、データベースから値を取得し、そのうちの1行が取得されるようにします。何も検索されない場合、変数には単に ""が割り当てられ、チェックボックスはチェックされません。
値が選択されている場合は、これをデータベースに挿入し、次のページの表示時にチェックされた状態で表示されます。
今のところ、このコードは強制的に失敗します。 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>";
実際のフォーム/ページでは、適切な衛生化を行っています。
大きな問題は、データベースに何も挿入されておらず、エラーがまったく返されていないことです。
PHPで入力サニタイズを追加する - クライアント側のサニタイズをオフにすることができます... – Alnitak
あなたのコードはSQLインジェクションに脆弱です。最初の選択クエリで$ pkにbind_paramを使用します。それはまた、xss-注射に脆弱です。 htmlにembeddingするとき、 'htmlspecialchars()'で$ pkをエスケープします。 – troelskn