Attempting to write a livesearch script

╄→гoц情女王★ 提交于 2019-12-20 06:03:52

问题


I am attempting a bit of ajax for the first time. I'm trying to write a live search where on every character entered a search of a MySQL database is run.

This is my code so far:

<!doctype html>
<html lang="en">
    <meta charset="utf-8">

    <script type="text/javascript">
        function getStates(value){
            $.post(
                    "getstates.php",
                    {partialState:value},
                    function(data){
                        $("#results").html(data);
                    });
        }
    </script>


</head>

<body>
    <input type="text" name="input" onkeyup="getStates(this.value)" /><br />
    <div id="results"></div>
</body>
</html>

getStates.php

//test the connection
try{
    //connect to the database
    $dbh = new PDO("mysql:host=127.0.0.1;dbname=livesearch","root", "usbw");

//if there is an error catch it here
} catch( PDOException $e ) {
    //display the error
    echo $e->getMessage();
}


$partialState = $_POST['partialState'];     
$query = $dbh->prepare("SELECT state_name FROM tbl_state WHERE state_name LIKE '%$partialSate%'");      
$query->execute();      
$result = $query->fetchAll();

foreach($result AS $state){

    echo '<div>'.$state['state_name'].'</div>';
}

The mySQL database is constructed correctly using the correct table names etc.

Why is it not returning the resulting states from the database?


回答1:


The problem is that you have made a typo in your query:

$query = $dbh->prepare("SELECT state_name 
                        FROM tbl_state 
                        WHERE state_name 
                        LIKE '%$partialSate%'");
                                       ^^^^Missing t

Should be

$query = $dbh->prepare("SELECT state_name 
                        FROM tbl_state 
                        WHERE state_name 
                        LIKE '%$partialState%'");

But you should also use prepared query's correctly: Fixed code:

<?php
if(isset($_POST['partialState'])){

    //test the connection
    try{
        //connect to the database
        $dbh = new PDO("mysql:host=127.0.0.1;dbname=livesearch","root", "usbw");
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);

        //if there is an error catch it here
    } catch( PDOException $e ) {
        //display the error
        echo $e->getMessage();
    }

    $query = $dbh->prepare("SELECT state_name
                            FROM tbl_state
                            WHERE state_name
                            LIKE :like");

    $query->execute(array(':like'=>'%'.$_POST['partialState'].'%'));

    $result = $query->fetchAll();

    foreach($result AS $state){
        echo '<div>'.$state['state_name'].'</div>';
    }
    die();
}
?>

<!doctype html>
<html lang="en">
    <meta charset="utf-8">
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript">
    function getStates(value){
        $.post("index.php", { "partialState":value },
        function(data){
            $("#results").html(data);
        });
    }
    </script>
</head>

<body>
<input type="text" name="input" onkeyup="getStates(this.value)" /><br />
<div id="results"></div>
</body>
</html>


来源:https://stackoverflow.com/questions/19682200/attempting-to-write-a-livesearch-script

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!