Я хочу, чтобы в моем поиске отображались только результаты с соответствующими значениями полей. Как это сделать?

0

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

У меня есть два поля поиска:

'search' и 'search term'

имена полей в моей базе данных

имя Фамилия электронная почта

Итак, например:

Если я ищу

'mike' в 'search' и 'smith' в 'search term', единственные результаты, которые я хочу показать, - это результаты, которые соответствуют "mike smith", не показывающие результаты, такие как "mike harris"

Как это достигается?

Спасибо!

Джеймс

 <?php

$conn = mysql_connect("", "", "");



if (!$conn) {
echo "Unable to connect to DB: " . mysql_error();
exit;
}

$search = addcslashes($search,'%_');
$searchterm = addcslashes($searchterm,'%_');

  $search = "%" . $_POST["search"] . "%";
$searchterm = "%" . $_POST["searchterm"] . "%";



if (!mysql_select_db("")) {
echo "Unable to select mydbname: " . mysql_error();
exit;
}

$search = $_POST['search'];
$searchterm = $_POST['searchterm'];
$sql = "SELECT name,lastname,email
FROM   test_mysql
WHERE  name LIKE '%". mysql_real_escape_string($search) ."%'";
$result = mysql_query($sql);


if (!$result) {
echo "Could not successfully run query ($sql) from DB: " . mysql_error();
exit;
}

if(empty($_GET['search'])){ // or whatever your field name is
  echo 'no results';
}else{
  performSearch(); // do what you're doing right now
}

if (mysql_num_rows($result) == 0) {
echo "No rows found, nothing to print so am exiting";
exit;
}


while ($row = mysql_fetch_assoc($result)) {
echo '<br><br><div class="data1">';
echo htmlentities($row["name"]);
echo '</div><br><div class="data2">';
echo htmlentities($row["lastname"]);
echo '</div><br><div class="data3">';
echo htmlentities($row["email"]);
echo '</div>';
}

mysql_free_result($result);

?>
  • 0
    Этот вопрос звучит смешно, поскольку ваш пример ничего не делает с $ searchterm. Я полагаю, вы уже пробовали простое утверждение AND? "WHERE name LIKE '%". $ Search. "%' AND name LIKE '%". $ Searchterm. "%'" - что делает оба слова обязательными.
  • 0
    Извините, я очень новичок в MySQL, я только начал вчера. Как мне это согласовать с mysql_real_escape_string ($ search)? Я изучаю синтаксис, и я не уверен, как разметить то, что вы только что сказали?
Теги:
search

3 ответа

2
Лучший ответ

Изменить:

WHERE  name LIKE '%". mysql_real_escape_string($search) ."%'";

To:

WHERE  name LIKE '%". mysql_real_escape_string($search) ."%' AND lastname LIKE '%". mysql_real_escape_string($search) ."%'";
  • 0
    Спасибо, что я искал! Как я могу остановить поиск, возвращающий все результаты базы данных при отправке пустого запроса?
  • 0
    Перед запуском кода вы должны проверить переменные $ search и $ searchterm: if($search === '' && $searchterm === '') { ... do something here ... } else { run query } . Имейте в виду, что люди могут отправить символ%, который также будет соответствовать всему, не знаю, является ли это проблемой для вас.
Показать ещё 6 комментариев
1

Изменить:

$search = addcslashes($search,'%_');
$searchterm = addcslashes($searchterm,'%_');

$search = "%" . $_POST["search"] . "%";
$searchterm = "%" . $_POST["searchterm"] . "%";

To:

$search = "%" . addcslashes($_POST["search"],'%_'). "%";
$searchterm = "%" . addcslashes($_POST["searchterm"],'%_'). "%";
  • 0
    Спасибо Ариэль! Я очень ценю вашу помощь. Пожалуйста, проверьте weezy.co.uk/newresults.php поиск «%» в поле поиска. Почему исчезает правая колонка?
  • 0
    Потому что вы выполнили «Строки не найдены, ничего не печатается, поэтому я завершаю работу», т. Е. Вы вышли, вместо того чтобы пропустить отображение строки, но продолжили.
Показать ещё 3 комментария
1
$sql = "SELECT name,lastname,email
FROM   test_mysql
WHERE  name LIKE '%". mysql_real_escape_string($search) ."%'
AND name LIKE '%". mysql_real_escape_string($searchterm) ."%'";

Кроме того, когда я просматриваю ваш запрос, вы можете также рассмотреть возможность сопоставления с именем. В вашем примере предлагается, что вы можете искать имя и фамилию, но запрос только сравнивает имя.

Я часто создаю поле под названием "поиск" в моих таблицах с возможностью поиска, а затем устанавливаю их как полный текстовый индекс, поэтому я могу использовать mysql MATCH AGAINST для более надежного поиска.

http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

Это было некоторое время в моей разработке php, прежде чем я узнал о совпадении. Конечно, было бы полезно знать рано. Надеюсь, что это поможет.

  • 0
    Просто ответ мне нужен! Как я могу остановить поиск, возвращающий все результаты базы данных при отправке пустого запроса?
  • 0
    условный оператор перед обработкой. if (! empty ($ _ POST ['search'])) {ваш код здесь} ... но вы можете захотеть сделать его более сложным, например, используя php trim ($ _ POST ['search']), чтобы убедиться, что он не просто белый пространство. или strlen ($ _ POST ['search']), чтобы убедиться, что это более одного символа. и т.п.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню