我有一個表單,我試圖用複選框顯示一個表單,然後在數據庫中插入是否檢查這些複選框。然後,每次調用該頁面時,檢查該值並將信息附加到html表單以適當地顯示該複選框是否被選中。php表單問題
我修改了下面的代碼示例以使其縮短,並且我知道我將所選值指定給'value',它不會執行任何操作。
的
<input type="checkbox" name="notice" value="checked" checked/>
的方法來顯示一個複選框作爲託運,而不是有效的HTML,工作在每一個瀏覽器,並且是基於例如here。我寧願堅持這種做法。
現在,我沒有看到我的代碼有什麼問題。
第一步應該是從數據庫中檢索值,其中onyl一行將被檢索,因爲article_no是主鍵。如果沒有檢索到任何內容,則將變量簡單地賦值爲「」,這會導致複選框未被選中。
當選中該值時,如果選中該值,則應將其插入數據庫中,並在下次查看頁面時顯示爲已選中狀態。
現在,這個代碼強制失敗。螢火蟲不顯示任何東西在控制檯發送或接收,沒有錯誤記錄與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 2009-05-18 11:03:19
您的代碼易受sql注入攻擊。在第一個選擇查詢中使用$ pk上的bind_param。它也容易受到xss注入的影響。將其嵌入到html中時,使用`htmlspecialchars()`逃避$ pk。 – troelskn 2009-05-18 14:11:16