2 回答

TA貢獻1921條經驗 獲得超9個贊
我會將選項值設為作者 ID,更改此設置
echo '<option>' . $row['author'] . '</option>';
對此
echo '<option value="' . $row['id']. '">' . htmlspecialchars($row['author']) . '</option>';
現在,當提交此表單時,在服務器上您將在$_POST['author']變量中收到作者的 id ,因此您可以使用 id 而不是作者的姓名進行更新查詢。
$query = "update book set author_id = ? where title = ?";
$stmt = $con->prepare($query);
$stmt->bind_param("is", $_POST['author'], $_POST['title']);
$stmt->execute();
建議:
這個方案意味著你的關系是1:m(1個作者可以寫很多書,但是1本書必須只有1個作者寫),這是不正確的,因為很多書是由很多作者寫的,所以你需要使用第三個連接表來表示多對多關系
m:m
默認情況下,MySQL 上的搜索不區分大小寫,但是最好
<select>
為書籍創建 a而不是將書籍<input>
的 ID 分配給<option>
s 而不是鍵入標題(除非您有太多書籍無法放入選擇中),因此,當您需要填寫表格以將作者分配給一本書時,請確保避免在書名中出現任何拼寫錯誤

TA貢獻1845條經驗 獲得超8個贊
最簡單的方法是
<?php $stmt = $conn->prepare("SELECT * from book")
$stmt->execute();
foreach($stmt as $row){
$id = $row['author'];
$stmt = $conn->prepare("SELECT * from author WHERE id='$id'")
$stmt->execute();
foreach($stmt as $row){
$name = $row['author'];
?><option value="<?php echo $name;?>"><?php echo $name;?></option>
}
}
復雜方法是
$stmt = $conn->prepare("SELECT *, book.author AS bookauthor FROM book LEFT JOIN author ON author.id=book.id");
$stmt->execute();
foreach ($stmt as $row) {
?><option value="<?php echo $row['bookauthor'];?>"><?php echo $row['bookauthor'];?></option>
}
- 2 回答
- 0 關注
- 197 瀏覽
添加回答
舉報