Member 14028652 Ответов: 2

Как выполнить живой поиск с помощью ajax, PHP и mysql


Я пытаюсь выполнить живой поиск с помощью Ajax,PHP и MYSQL. Код, который у меня есть, работает. Однако главная проблема заключается в том, что я не могу перенаправить пользователя на страницу его профиля, как только нашел его в базе данных. Я проверил консоль.войдите в систему, и у него есть ссылка на страницу их профиля. Вот такие результаты https://imgur.com/a/I8tXMvH

HTML
<div class="inner-addon left-addon">
          
          <input class="form-control" type ="text" id ="search"  placeholder="Search for employees..." onkeyup="search(this.value)">
          <div id ="results"></div>
      </div


AJAX-код
      function search(value) {
      if(value.length == 0) 
      {
        $("#results").html("");
      } else {

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


PHP-код
    $search = $_POST['search'];
  $query =" SELECT * FROM employees WHERE firstName LIKE '%$search%' OR lastName LIKE '%$search%'";
   $query = mysqli_query($connect,$query);
  while($row= mysqli_fetch_array($query)){
    echo "<div>";
    echo $row['firstName']."  ".$row['lastName'];
    echo "<a href='profile.php?userId=" . $row["id"] . "'>"; //this is not working
    echo "</div>";

}


Код профиля пользователя
<?php
 $userId = ($_GET['userId']);
    
$query = "SELECT firstName, lastName, middleName, gender, ssn, dob, organization, department, iden, position, salary,health, dental,vision, addressOne, addressTwo, apt, city, _state, zipcode, phone, email FROM employees WHERE id = {$userId}";
$results = mysqli_query($connect, $query);

   while($row = mysqli_fetch_array($results)) {
       $firstName = $row['firstName'];
       $lasttName = $row['lastName'];
       $middletName = $row['middleName'];
       $gender = $row['gender'];     
?>


Что я уже пробовал:

Я перепробовал все, и я просто не могу понять это.

2 Ответов

Рейтинг:
4

Richard Deeming

У вас есть пустой <a> элемент, на который пользователь не сможет нажать.

Переместите открывающий тег перед именем и добавьте закрывающий тег:

echo "<div>";
echo "<a href='profile.php?userId=" . htmlspecialchars($row["id"]) . "'>";
echo htmlspecialchars($row['firstName'])."  ".htmlspecialchars($row['lastName']);
echo "</a>";
echo "</div>";

NB: Воспользуйся htmlspecialchars[^] во избежание постоянные атаки межсайтового скриптинга (XSS) [^].

И не игнорируйте уязвимости SQL-инъекций, о которых упоминала Патрис.


Member 14028652

Огромное спасибо. Я понял это через несколько часов.

Рейтинг:
2

Patrice T

$query =" SELECT * FROM employees WHERE firstName LIKE '%$search%' OR lastName LIKE '%$search%'";

Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Member 14028652

Может быть, это и есть причина моей проблемы?

Patrice T

у вас есть 6 ссылок в конце решения, имейте хорошее чтение.