1 回答

TA貢獻1942條經驗 獲得超3個贊
您的問題不清楚,因為您未能隔離您的代碼究竟在哪里失敗,并且沒有告訴我們您收到了什么錯誤。(直到改變,我不能贊成你的問題)
不過,您的問題很清楚預期的效果。我編寫了一個未經測試的腳本,我認為它應該可以按要求工作。
<?php
$config = ['localhost', 'root', '', 'dbname'];
if (!$con = new mysqli(...$config)) {
die("MySQL Connection Error: <b>Check config values</b>"); // $con->connect_error
}
$query = "SELECT cat.CategoryName, cat.id,
writ.Writter, writ.writterdescription,
writ.PostingDate, writ.UpdationDate, writ.WritterId
FROM tblwritter AS writ
JOIN tblcategory AS cat ON writ.CategoryId = cat.id
WHERE writ.Is_Active = 1
AND writ.WritterId = ?"
if (!$stmt = $con->prepare($query)) {
echo "Prepare Error: "; // $con->error
} elseif (!$stmt->bind_param("i", $_GET['scid']) ||
!$stmt->execute() ||
!$stmt->bind_result($catname,
$catid,
$writtername,
$writterdescription,
$writterpostingdate,
$writterupdationdate,
$writterid)) {
echo "Statement Error: "; // $stmt->error
} elseif (!$stmt->fetch()) {
echo "[No qualifying row found]";
}
$stmt->close();
$catid = $catid ?? 0;
$query = "SELECT id, CategoryName
FROM tblcategory
WHERE Is_Active = 1
AND id != ?";
if (!$stmt = $con->prepare($query)) {
echo "Prepare Error: "; // $con->error
} elseif (!$stmt->bind_param("i", $catid) ||
!$stmt->execute() ||
!$stmt->bind_result($id, $name)) {
echo "Statement Error: "; // $stmt->error
} else { ?>
<div class="form-group">
<label class="col-md-2 control-label">Category</label>
<div class="col-md-10">
<select class="form-control" name="category" required>
<?php
if ($catid) {
echo '<option value=' , $catid , '>' , htmlentities($catname) , '</option>';
}
while ($stmt->fetch()) {
echo '<option value=' , $id , '>' , htmlentities($name) , '</option>';
}
?>
</select>
</div>
</div> <?php
}
維護面向對象的 mysqli 語法而不是混合語法。OO 是我的推薦,因為它比程序更簡潔。
我已經標記了我的代碼段,使其全部適合 Stack Overflow 代碼段框,而無需水平滾動。
在查詢中寫入 MySQL 關鍵字時使用全部大寫 - 這將提高可讀性。
使用短表別名(如“cat”和“writ”,這樣您的查詢就不會因字符而變得臃腫
我在流程中包含了一堆檢查點,以幫助您診斷可能出現的任何問題。永遠不要向最終用戶顯示原始錯誤消息——出于安全考慮。
我沒有檢查是否
$_GET['scid']
存在,我假設您在其他地方這樣做。如果由于某種原因提交的 scid 值不返回任何符合條件的行,則將其默認為零。這將允許下一個查詢一致地工作。我更改了您的第二個查詢,以便它不會在選擇字段中再次提供 scid 值。
如果在數據庫中找到 $catid,它將在選擇字段中顯示為第一個選項。
只要數據庫列是 INT 數據類型(它應該是),就
value
不需要在選項標簽中作為屬性寫入的整數值htmlentities()
。我還刪除了整數上的雙引號,因為它們不是必需的。
- 1 回答
- 0 關注
- 162 瀏覽
添加回答
舉報