За последние 24 часа нас посетил 18961 программист и 1657 роботов. Сейчас ищут 1179 программистов ...

ошибка оператора LIKE

Тема в разделе "PHP для новичков", создана пользователем VladimirEIS, 27 апр 2020.

  1. VladimirEIS

    VladimirEIS Новичок

    С нами с:
    21 апр 2020
    Сообщения:
    13
    Симпатии:
    0
    Добрый день.

    Прошу помощи!

    Возникли трудности с оператором LIKE.

    Задача кода заключается в выводе строк из базы данных которые содержат слово вводимое в поисковою строку на странице сайта.

    Но в моем коде что-то не так.

    Все данные по таблице в скриншотах во вложении.

    А вот сам код:
    PHP:
    1. <?php
    2. $link = mysqli_connect('localhost', 'root', '', 'eisvbd');
    3.  
    4. if (!$link) {
    5.     die('Ошибка подключения (' . mysqli_connect_errno() . ') '
    6.             . mysqli_connect_error());
    7. }
    8.  
    9. echo 'Соединение установлено... ' . mysqli_get_host_info($link) . "\n";
    10. ?>
    11. </br>
    12.  
    13. <!DOCTYPE html>
    14. <html>
    15. <head>
    16.   <meta charset="utf-8">
    17.   <title>PHP searching</title>
    18. </head>
    19.  
    20.   <body>
    21.   <form method="post">
    22.    <input type="text" name="search" class="search">
    23.    <input type="submit" name="submit" value="поиск">
    24.   </form>
    25.   <hr>
    26. <?php
    27.     if(isset($_POST['submit'])){
    28.         $search = $_POST['search'];
    29.         $sql = mysqli_query($link, 'SELECT `ID`, `arteisv`, `nametovar` FROM `eisvtable` WHERE `arteisv` LIKE '%$search%' OR `nametovar` LIKE '%$search%'');
    30.     while ($result = mysqli_fetch_array($sql))
    31.     echo "{$result['arteisv']}: {$result['nametovar']} <br>";
    32.     }
    33.  
    34.     ?>
    35.    </body>
    36. </html>
     

    Вложения:

    • 0001.jpg
      0001.jpg
      Размер файла:
      142,8 КБ
      Просмотров:
      7
    • 0002.jpg
      0002.jpg
      Размер файла:
      96,3 КБ
      Просмотров:
      7
    • 0003.jpg
      0003.jpg
      Размер файла:
      60,5 КБ
      Просмотров:
      7
    #1 VladimirEIS, 27 апр 2020
    Последнее редактирование модератором: 27 апр 2020
  2. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @VladimirEIS, LIKE это не хорошо. Для поиска есть родной полнотекстовый поиск MySQL, есть сфинкс, есть эластик.
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.759
    @Valick, иногда его достаточно, тем не менее.

    @VladimirEIS. Пользуйтесь кнопкой </> для кода, сделал за вас первый и последний раз. Ваш код не соответствует приведённым сообщениям об ошибке
     
  4. VladimirEIS

    VladimirEIS Новичок

    С нами с:
    21 апр 2020
    Сообщения:
    13
    Симпатии:
    0
    Если в коде '%$search%' поменять кавычки на `%$search%` то выдает совсем другую ошибку.

    Скиншот во вложении.

    Может кто-то сталкивался с такой ошибкой?
     

    Вложения:

    • 0004.jpg
      0004.jpg
      Размер файла:
      25,6 КБ
      Просмотров:
      3
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.759
    @VladimirEIS. Аааа.. не заметил. Прочитайте ещё раз, когда какие кавычки используются в php, и когда какие в mysql.
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.853
    Симпатии:
    748
    Адрес:
    Татарстан
    PHP:
    1. $sql = mysqli_query($link, "SELECT `ID`, `arteisv`, `nametovar` FROM `eisvtable` WHERE `arteisv` LIKE '%$search%' OR `nametovar` LIKE '%$search%'");
    но!
    у вас не проверяются и не экранируются данные от пользователя - и соответственно будет 100% успех при SQL инъекциях
    то есть можно в поле поиска ввести такую строку, которая например уничтожит вашу БД )

    P.S ` - это не кавычка, а обратный апостроф так то
     
  7. VladimirEIS

    VladimirEIS Новичок

    С нами с:
    21 апр 2020
    Сообщения:
    13
    Симпатии:
    0
    Да, спасибо.

    Я про это тоже читал. Буду разбираться. От этого форума, похоже, нет ни какого толку. Или задача слишком сложная.
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.759
    У вас нашли ошибку на форуме, а оказывается никакого толку. Что вы ожидали? Что за вас решат задачу?
     
  9. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @VladimirEIS, это так не работает. Надо быть совсем слабоумным, чтобы брать участников форума на слабо и считать глупее себя тех к кому обращаешься за помощью.
    Тебе уже сказали про кавычки в запросе, а ты в упор не видишь о каких кавычках речь, потому, что отсутствуют базовые знания. Ну и экранирование должно быть. Давно бы уже переписал код с исправлениями по замечаниям из топика.
     
  10. VladimirEIS

    VladimirEIS Новичок

    С нами с:
    21 апр 2020
    Сообщения:
    13
    Симпатии:
    0
    Я не беру на слабо и никого не считаю глупее себя. PHP и MYSQL изучаю 4 день. И отвечая на вопрос администратора - да, конечно я ожидал что кто-то поможет в решении задачи. Зачем тогда нужен форум? И тему в разделе выбрал соответствующую.
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.759
    Ну я вам намекнул, что у вас кавычки неправильные. Дальше - ваша работа. А вообще, на четвёртый день нельзя такое писать. Особенно если опыта в программировании нету. Сначала надо теорию выучить
     
  12. VladimirEIS

    VladimirEIS Новичок

    С нами с:
    21 апр 2020
    Сообщения:
    13
    Симпатии:
    0
    Спасибо. Поиск по одному слову сделал. Все работает. Вот теперь по нескольким словам уже сложнее. Похоже сегодня придется изучить сфинкс и использовать его.
     
  13. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Обязательно фильтруй % и _ при запросе, иначе логическая уязвимость.
    Можешь добавить выбор пользователю, где необходимо искать 1 и 2 вариант соответственно.