Ajax Select,使用select从数据库中获取数据

时间:2015-06-19 12:47:56

标签: jquery mysql ajax

如何使用以下方法从数据库中获取值:用户在<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;


?>

我在想我应该添加一个值来返回?但这似乎没有用,所以可能是什么问题?欢迎任何提示/小提示(:

修改

在悬崖响应并将我的代码更改为他之后,这就是结果:

Page as is

选择此项后:

After select

所以说来自数据库的所有数据都显示而不是所选的id

2 个答案:

答案 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);