База данных PHP ajax не обновляется

#php #jquery #ajax #pdo

#php #jquery #ajax #pdo

Вопрос:

Некоторое время назад я создал функцию поиска с помощью ajax и php. Вы можете заполнить текстовое поле текстом, и оно попытается найти совпадение среди всех стран, хранящихся в базе данных. Сейчас я уточняю код и делаю его PDO, но я что-то сломал, и я не могу выяснить, что.

это мой обычный HTML

 <head>
    <title>Ajax</title>
    <link href="style/style.css" rel="stylesheet" type="text/css" />
    <link rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript" src="scripts/Javascript.js"></script>
</head>

<body>
    <div id="main">
            <h1 class="title">Enter your country please</h1>

        <input type="text" id="search" autocomplete="off" onchange="">
            <h4 id="results-text">Showing results for: <b id="search-string">Array</b></h4>

        <ul id="results"></ul>
    </div>
</body>
  

вот мой Jquery и javascript. обратите внимание, что я ничего не изменил ни в HTML, ни в javascript, поэтому это не может быть ошибкой типа.

 $(document).ready(function() {
alert('asdf');

function search() {
    var query_value = $('input#search').val();
    $('b#search-string').html(query_value);

    if(query_value !== ''){
        $.ajax({
            type: "POST",
            url: "search.php",
            data: { query: query_value },
            cache: false,
            success: function(html){
                $("ul#results").html(html);
            }
        });
    }

    return false;
}

$("input#search").live("keyup", function(e) {
    clearTimeout($.data(this, 'timer'));
    var search_string = $(this).val();

    if (search_string == '') {
        $("ul#results").fadeOut();
        $('h4#results-text').fadeOut();
    }

    else {
        $("ul#results").fadeIn();
        $('h4#results-text').fadeIn();
        $(this).data('timer', setTimeout(search, 100));
        };
    });
});
  

И вот мой Search.PHP

 <?php
class SearchEngine{

    private $html;

    public function __construct($conn){

        $this->html = '<li class="result">
                            <h3>NameReplace</h3>
                            <a target="_blank" href="ULRReplace"></a>
                        </li>';

        if (isset($_POST["query"])) {
            $search_string = mysql_real_escape_string($search_string);
        }

        else{
            $search_string = 'b';
        }

        if (strlen($search_string) >= 1 amp;amp; $search_string !== ' ') {

            $query = 'SELECT * FROM country WHERE name LIKE "%' . $search_string . '%"';
            $result = $conn->prepare($query);
            $result->execute();
            $result_array = $result->fetchAll();

                foreach ($result_array as $result) {
                    $display_name = preg_replace("/" . $search_string . "/i", "<b>" . $search_string . "</b>", $result['name']);
                    $display_url = 'sadf';

                    $output = str_replace('NameReplace', $display_name, $this->html);
                    $output = str_replace('ULRReplace', $display_url, $output);
                    echo($output);
                }
        }
    }

    }
?>
  

Проблемы:

  1. запрос Post никогда не создается, для этого я создал isset so на данный момент, когда Post-запрос не создан. Это создаст Post-запрос со значением «B».

  2. Я думаю, что страница никогда не обновляется, но я не могу быть уверен на 100%, поскольку сообщение никогда не создается, поэтому запрос никогда не обновляется. И по какой-то причине результаты не помещаются в правильное место.

Любая помощь будет высоко оценена. Пожалуйста, будьте осторожны, я новичок в Ajax, и я скорее хочу понять, чем иметь решение. Спасибо

Комментарии:

1. если вы var_dump($_POST); — что-нибудь отображается? Что произойдет, если вы попытаетесь вручную перейти на страницу PHP, которая обновила SQL?

2. Я не могу var_Dump post, потому что он никогда не создается. Я протестировал javascript.js и функции внутри вызываются, но не делают того, что они должны делать. и что вы имеете в виду под ручным переходом на страницу PHP?

3. @KrijnvanderBurg вам все еще нужна помощь с этим вопросом?

4. Я снова задал этот вопрос 10 минут, и он был решен. но теперь у меня другая проблема. что он возвращает HTML дважды. Но в вашем ответе есть несколько других недостатков, в которых упоминается мой код, поэтому я рассмотрю его.

Ответ №1:

Вы действительно отправляете свою строку поиска в класс PHP?

Это не так, как это работает, вам нужно создать экземпляр этого класса и использовать его.

Создайте отдельный php-файл для этого класса и включите его в search.php

У вас может быть простой класс, выглядящий следующим образом:

search_engine.php

 <?php
class SearchEngine{

    private $conn;

    function __construct($conn){
        $this->conn = $conn;
    }

    function get_search_results($search_string){
        $query = 'SELECT * FROM country WHERE name LIKE :search';
        $result = $this->conn->prepare($query);
        $result->execute(array(':search'=>'%'.$search_string.'%'));
        $result_array = $result->fetchAll();

        return $result_array;   
    }
}
?>
  

search.php

 if (isset($_POST["query"])) {
    $search_string = $_POST["query"];
    if(strlen($search_string) >= 1 amp;amp; $search_string !== ' ') {
        include 'search_engine.php'
        $engine = new SearchEngine($conn);
        $results = $engine->get_search_results($search_string);
        foreach($results as $result){
          //do something
        }
    }
}