риск внедрения SQL
Если вы когда-либо используете значение из отправленной формы при взаимодействии с базой данных, вам следует экранировать содержимое, прежде чем делать это. В MySQL лучшая функция для этого - mysql_real_escape_string()
Руководство по PHP
$sql="SELECT ID, First_Name, Last_Name FROM contact WHERE First_Name LIKE '" . mysql_real_escape_string( $name ) . "%' OR Last_Name LIKE '" . mysql_real_escape_string( $name ) ."%'";
Добавление полей для поиска
Если вы хотите добавить дополнительное поле, например «Отдел», к поисковому запросу, у вас просто есть поле в соответствующей форме поиска, а затем адаптируйте свой SQL-поиск, чтобы включить его в WHERE
пункт:
$sql="SELECT ID, First_Name, Last_Name
FROM contact
WHERE ( First_Name LIKE '" . mysql_real_escape_string( $name ) . "%'
OR Last_Name LIKE '" . mysql_real_escape_string( $name ) ."%' )
AND Department='" . mysql_real_escape_string( $department ) ."'";
Использование одного поля для двух поисков
Если вы хотите использовать одно текстовое поле для выполнения вышеуказанного поиска, вам нужно будет выбрать какой-то префикс для пользователей, чтобы префикс этого значения для второго поля был установлен.
Например, если мы укажем « in: » в качестве префикса для обозначения Департамента, то поиск « John in: Radiology » будет искать любого человека с имя или фамилия, начинающиеся с " John ", но только те, которые находятся в отделе " Radiology ".
list( $name , $department ) = explode( ' in:' , $_POST['name'] , 2 );
вместо
$name = $_POST['name'];
LIKE Ограничение поиска
В данный момент ваш код будет искать только имена и / или фамилии, которые начинаются с введенного значения. Вы можете выполнить поиск, возвращая любое из полей, которые просто содержат (не только начинаются с) введенное значение, добавив еще один «%» в начале строки поиска:
$sql="SELECT ID, First_Name, Last_Name FROM contact WHERE First_Name LIKE '%" . $name . "%' OR Last_Name LIKE '%" . $name ."%'";
Полнотекстовый поиск
Возможно, вы захотите взглянуть на это руководство - Использование полнотекстового поиска MySQL . Он охватывает концепции полнотекстового поиска, позволяет находить одно или несколько слов, представленных через одно поле в нескольких полях базы данных.
Предел возвращаемых строк
Всегда хорошая идея ограничить количество строк, которые вы возвращаете для поиска, независимо от того, разбиты вы на страницы или просто показывает X строк. Если этого не сделать, злоумышленник, по сути, поцарапает всю базу данных, просто выполнив поиск по каждой букве алфавита.