Живой поиск php и ajax

У меня проблемы с моим кодом, я хочу, чтобы он выполнял файл php всякий раз, когда я что-то ввожу, но он не работает

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
    function getStates(value) {
        $.post("search.php", {name:value},function(data)
            $("#results").html(data);
        }); 
    }
</script>
</head>
<input type="text" onkeyup="getStates(this.value)"/>
<br>
<div id="results"></div>
<body>
</body>
</html>

php

<?php
mysqli_connect("localhost", "#", "#") or die(mysqli_connect_errno());
mysql_select_db("#") or die(mysql_error());
$search = $_POST["name"];

$players = mysql_query("SELECT firstname FROM players WHERE firstname LIKE '%search%'");
while($player = mysql_fetch_array($players)) {
    echo "<div>" . $players["firstname"] . "</div>";
}

?>


person user3187651    schedule 15.01.2014    source источник
comment
Что не работает? Проверьте консоль браузера, чтобы получить представление (Ctrl+Shirt+I в Chrome и Firefox).   -  person Sergio A.    schedule 15.01.2014
comment
Почему вы объединяете mysqli_connect и mysql_select_db? Вы хотите использовать mysql или mysqli? (надеюсь, вы не будете использовать mysql)   -  person Aycan Yaşıt    schedule 15.01.2014
comment
Строка 9 вызывает синтаксическую ошибку, и я понятия не имею, почему   -  person user3187651    schedule 15.01.2014


Ответы (4)


Из того, что я вижу, вы должны изменить это

  '%search%' 

to

  '%{$search}%'

in

  $players = mysql_query("SELECT firstname FROM players WHERE firstname LIKE '%search%'");

ИЗМЕНИТЬ

@user3187651 user3187651 Если вы все сделали правильно на стороне сервера. Измените свой javascript на:

function getStates(value) {
    $.post("search.php", {name:value},function(data){
        $("#results").html(data);
    }
    ); 
}

Это должно избавиться от ошибки на стороне клиента.

person phpcoderx    schedule 15.01.2014
comment
@Aljie Вместо использования переменной $ search он использовал термин «поиск», и да, это не может быть единственно правильным ответом, поскольку в его коде много дефектов, подобных тому, что упомянул Айкан Яшит. - person phpcoderx; 15.01.2014

Вам не хватает {. Просто делать:

function xyx(name) {
    $.post("search.php", { name: value }, function(data) {
        $("#results").html(data);
    });
}
person debasish    schedule 13.05.2015

В вашем коде чего-то не хватает:

  <!doctype html>
<html>
<head>
 <meta charset="UTF-8">
 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> //ur getting the jquery via online
 <script>
 $(document).ready(function(){
    $("#textBoxId").change(function() //triggers when you change the value in your textbox
    {
       var value = $(this).val(); //gets the value of your textbox
       $.post("search.php", {id:value},function(data)
           $("#results").append(data);
        }); 
    }
 });
</script>
</head>
<body>
 <input type="text" id="textBoxId"/>
<br>
<div id="results"></div>
</body>
</html>

И в вашем php:

<?php
mysqli_connect("localhost", "#", "#") or die(mysqli_connect_errno());
mysql_select_db("#") or die(mysql_error());
$search = $_POST['id'];
$returnData = ""; 
$players = mysql_query("SELECT firstname FROM players WHERE firstname LIKE '%search%'");
while($player = mysql_fetch_array($players)) {
    $returnData .= "<div>" . $players["firstname"] . "</div>";
}
echo $returnData; 
person Aljie    schedule 15.01.2014
comment
Выдает мне синтаксическую ошибку в строке 12 в моем блокноте, и консоль Chrome говорит то же самое: Uncaught SyntaxError: Unexpected идентификатор - person user3187651; 15.01.2014
comment
попробуйте еще раз мой обновленный код. ваше текстовое поле не было внутри вашего тега body, что не является правильной структурой. - person Aljie; 15.01.2014
comment
Я наткнулся на этот ответ, когда искал что-то в Google. Так же, как OP находится в опубликованном коде, вы смешиваете API-интерфейсы MySQL с функциями mysqli_ и mysql_, которые не смешиваются друг с другом и должны были быть переданы OP. - person Funk Forty Niner; 27.12.2014

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

<?php

$host = 'localhost';
$user = 'root';
$password = '';
$database = 'dev_testing';

$mysqli = new mysqli($host, $user, $password, $database);

$username = $_GET['username'];

$username = trim(htmlspecialchars($username));

$like = '%' . strtolower($username) . '%';
$statement = $mysqli -> prepare('
    SELECT name, picture, description 
    FROM users 
    WHERE lower(name) LIKE ?  
    ORDER BY INSTR(title, ?), title
    LIMIT 20'
);

if (
    $statement &&
    $statement -> bind_param('ss', $like, $username) &&
    $statement -> execute() &&
    $statement -> store_result() &&
    $statement -> bind_result($name, $picture, $description)
) {
    $array = [];
    while ($statement -> fetch()) {
        $array[] = [
            'name' => $name,
            'picture' => $picture,
            'description' => $description
        ];
    }
    echo json_encode($array);
    exit();
}

Преимущества кода

  • Предотвращает SQL-инъекцию
  • Заказы результаты наилучшего совпадения
  • Отправляет ответ JSON (JSON облегченный)

Полное руководство: Живой поиск с использованием AJAX, PHP и MYSQL

person Supun Kavinda    schedule 25.05.2018