如何使用以下方法从数据库中获取值:用户在<select>
函数中选择id(即1),然后数据显示在<p>
标记中
我有以下内容,我可以使用<p>
更改文本,但由于某种原因我无法从数据库中获取数据
选择代码
<p id="dbinfo" >Data comes here</p>
<select id='slct'>
<option value='empty'>select a number</option>
<option value='1'> 1</option>
<option value='2'>2</option>
<option value='3'>3</option>
<option value='4'>4</option>
<option value='5'>5</option>
</select>
<script>
document.getElementById("slct").onfocus = function()
{
alert(document.getElementById('slct').value);
var xmlhttp = new XMLHttpRequest();
var text = "";
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
var dbText = xmlhttp.responseText;
var obj = JSON.parse();
var text;
var i;
for(i =0; i < obj.records.length; i++)
{
text += "<option value='" +obj.records[i].id+ "'>" + obj.records[i].id + "</option>";
}
document.getElementById('dbinfo').innerHTML = dbText;
}
}
xmlhttp.open("POST", "http://localhost/somemaps/data.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send();
document.getElementById("slct").onchange = function(){
var id = this.children[this.selectedIndex].value;
document.getElementById("dbinfo").innerHTML = "text has changed: " +id;
xmlhttp1 = xmlhttpRequest();
xmlhttp.send("id="+id);
}
}
</script>
数据代码
<?php
//Haal de gegevens uit de database en echo ze naar dit scherm.
$servername = "localhost";
$username = "root";
$password = "";
$databasename = "blok-1-am1a";
if(isset($_POST['id']))
{
$extra = "WHERE ".$id. " = ".$_POST['id'];
}
else
{
$extra = "";
}
try
{
$connection = new PDO("mysql:host=".$servername.";dbname=".$databasename, $username, $password);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$statement = $connection->prepare("SELECT `id`, `firstname`, FROM `db-name` ".$extra);
$statement->execute();
$result = $statement->setFetchMode(PDO::FETCH_ASSOC);
$data = "";
foreach($statement->fetchAll() as $key => $value)
{
$data .= $value['id']." | ".$value['firstname'];
}
catch(PDOException $e)
{
echo "Dit is een PDO foutmelding, de volgende fout heeft plaatsgevonden : ".$e->getMessage();
}
echo $data;
?>
我在想我应该添加一个值来返回?但这似乎没有用,所以可能是什么问题?欢迎任何提示/小提示(:
修改的
在悬崖响应并将我的代码更改为他之后,这就是结果:
选择此项后:
所以说来自数据库的所有数据都显示而不是所选的id
答案 0 :(得分:2)
我在您的代码中发现了三个问题:
您发布的 PHP
代码 9 上有拼写错误:
我认为$extra ="WHERE ".$id=$_POST['id'];
应该$extra ="WHERE ".$id."=".$_POST['Id'];
注意用双引号括起的等号=
。
仍然在 PHP
代码$data .= $value['id']." | ".$value['firstname']";
中的 32 ,删除之前的最后双引号分号是这样的:
$data .= $value['id']." | ".$value['firstname'];
当用户在AJAX
中选择ID时,您正在寻找进行<select>
来电的活动是onchange
, jQuery .change()
即可。
所以,也可以在 JS
代码的 14 上听一下它的事件:代替onfocus
使用{{1像onchange
然后,由于您使用jQuery
标记了帖子,因此您可以使用更快速,更易于使用的AJAX
methods of jQuery。
我建议使用jQuery.ajax()
方法:
document.getElementById("slct").onchange = function()
答案 1 :(得分:0)
$sth = $connection->prepare("SELECT `id`, `firstname`, FROM `db-name` WHERE ".((isset($_POST['id'])) ? "`id`" : ":id")." = :id");
$sth->execute(array(":id" => (isset($_POST["id"])) ? $_POST["id"] : 0));
$result = $sth->fetchAll(PDO::FETCH_ASSOC);