как «разделить» слова, введенные в текстовое поле в форме, и запросить каждое слово в базе данных - PullRequest
1 голос
/ 10 января 2012

В index.php у меня есть форма, а в форме текстовое поле:

<form name="UserSearch" action="petSearch.php" method="GET">
     <input type="text" name="petWish" value="" />
</form>

, где пользователь вводит, каких домашних животных он хочет в текстовое поле (разделенных запятыми), например, собака, кошка, рыба, змея

В petSearch.php я использую следующую функцию для создания допустимой строки SQL, которая может использоваться в операторе SQL:

<?php    
    $userPetWish = mysqli_real_escape_string($link, $_GET["petWish"]);
?>

Затем я создаю инструкцию SQL и запрашиваю базу данных MySQL:

<?php
    $query="SELECT petType, name, age FROM pets WHERE petType LIKE '%".$userPetWish."%'";
    $result = mysqli_query($link, $query);

      if($result)
      {
          while($row = mysqli_fetch_array($result))
          {
             echo "From the pets you entered we have" . $row[petType] . "," . $row[name] . "," . $row[age];
          }
      }
      else
      {
         echo "Sorry we do not have any of your chosen pets in store";
      }
?>

Итак, мой вопрос:

1) Чтобы найти каждого отдельного питомца в базе данных, можно 'разделить' питомцев, которых пользователь вводил запятыми, и затем запросить таблицу питомцев в базе данных, используя НРАВИТСЯ "функция? Если да, можете ли вы сказать мне, как это структурировать?

2) Если после выполнения поиска по базе данных в магазине есть собака, кошка и рыба, но нет змеи. Как мне заставить его отобразить это, показать petType, имя и возраст, которые они имеют из трех домашних животных, но не змея? (Я не уверен, правильно ли я структурировал это в цикле while)

Ответы [ 2 ]

1 голос
/ 10 января 2012

Вы можете использовать

explode( ',', $userPetWish )

чтобы разбить слова на части.

Также примечание я бы использовал

echo 'From the pets you entered we have' . $row['petType'] . ',' . $row['name'] .
    ',' . $row['age'];

Вместо кавычек в строке $;

Также вам лучше убрать косые черты strip_slashes ($ userPetWish), если вы используете LIKE, в противном случае вы собираетесь получить косые черты в запросе и можете разбить его (может быть неправильно, только то, что я испытал)

0 голосов
/ 01 марта 2016

1.Вы можете попробовать использовать запрос MATCH AGAINST.

$petArray = explode(',', $userPetWish);
$query = "SELECT petType, name, age FROM pets MATCH (petType) AGAINST ('".implode("','", $petArray)."')";
$result = mysqli_query(....

Результат запроса должен выглядеть следующим образом:

SELECT petType, name, age FROM pets MATCH (petType) AGAINST ('cat', 'dog', 'fish')

Обратите внимание, что для этого необходимо создать индекс FULLTEXT.на вашем столбце petType.( подробнее здесь )

2.Еще один способ сделать это - поиск LIKE, с которым вы знакомы

$petArray = explode(',', $userPetWish);

$query = "SELECT petType, name, age FROM pets WHERE ";
$queryTemp = "";

foreach ($petArray as $pet) {
    if($queryTemp!=''){
        $queryTemp += ' OR '; 
    }
    $queryTemp += " petType LIKE '%".$pet."%' ";
}

$query += $queryTemp;
$result = mysqli_query(....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...