javascript - 从数据库中选择一个项目并使用 PHP JavaScript 和 AJAX 使用该特定选择的数据填充表单
问题描述
拜托,我坚持了一段时间。我一直在尝试使用 PHP、Javascript 和 Ajax 从我的数据库中创建一个包含现有作者的下拉选择。在此列表“onChange”作者选择中,我想用该特定选定作者的数据填充表单的值,但我找不到解决方法。希望你们能理解我想要达到的目标。谢谢!!
我有一个选择/选项下拉列表,其中填充了数据库中的作者姓名:
<?php // foreach - authors from the database for the drop down select list.
function getAuthor() {
$sth = $conn->prepare('SELECT AuthorID, Name, Surname FROM author');
$sth->execute();
$result = $sth-> fetchAll();
foreach( $result as $row ) {
echo '<option>' . $row["Name"] . '</option>';
}
}
?>
<form>
<fieldset>
<label>Existing author?</label>
<select onChange="myFunction(this.value)" id="sel"> onChange calling js function.
<option>Select Author</option>
<?php getAuthor();?>
</select>
<label>Name:</label>
<input type="text" name='name' autocomplete="off" value="<?php ?>" required>
<label>Surname:</label>
<input type="text" name='surname' autocomplete="off" value="<?php ?>" required>
<label>Nationality:</label>
<input type="text" name='nationality' autocomplete="off" value="<?php ?>" required>
</fieldset>
<input type="hidden" name="action_type" value="add">
<input id="btnaddbook" value="ADD BOOK AND AUTHOR" type="submit">
</form>
Javascript // 从作者列表中选择值并使用 Ajax 发送。我正在尝试使用“onChange”为每个选择更改发送值。
function myFunction() {
var authors = document.getElementById("sel").value;
var data = new XMLHttpRequest();
data.onreadystatechange = function () {
if (data.readyState == 4 && data.status == 200) {
document.innerHTML = data.responseText;
}
};
data.open("POST", "../pages/addbook.php", true);
data.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
data.send("mydata="+authors);
}
PHP 接收 Ajax。
<?php
require ("../../model/db.php");
if(isset($_POST['mydata'])){
$sth = $conn->prepare('SELECT AuthorID, Name FROM author WHERE author.AuthorID =' . $_POST['mydata']);
$sth->execute();
$row = $sth->fetch();
}
解决方案
1)
您不需要这部分代码var authors = document.getElementById("sel").value;
。您在调用函数时传递了一个值onChange="myFunction(this.value)"
。只需将您的函数签名从更改function myFunction()
为 eg function myFunction(author)
。现在您可以只使用author
.
2)
onchange
不是onChange
。_
3)
<option>
标签需要一个值。您只需给它一个标签(作者姓名)之类的东西。最后,您每次的选择都没有价值。
4)
作业:阅读准备好的语句(https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php),因为您当前的代码存在 SQL 注入漏洞。
我认为在这些更改之后它将起作用。如果没有,请随时提出更多问题。
推荐阅读
- java - AppCompatImageView 无法转换为 com.squareup.picasso.Target
- performance - 测试具有长时间运行查询且轮询状态的 http rest API
- web-component - “slotchange”事件不会在 iOS 11 上触发
- html - 为什么额外的垂直滚动条出现在 mat-tab-body-content 中,我需要使用 overflow-auto height 100%
- python - 如何在使用 pdfkit.from_string() 生成的 pdf 中添加换行符?
- java - 我如何模拟方法,从另一种方法调用一个方法?
- json - 需要通过 JSON Patch 在 JSON 中添加列表
- python - CSS Style 可以像 wxpython 框架那样实现 gui python 应用吗
- jquery - 如何使用jquery数据表对最后一项显示第一页最后一项的顺序进行排序?
- c - (PSET5 cs50)卸载链表数组时出现段错误