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 关注
- 208 浏览
添加回答
举报