Так почему бы не сделать нечеткий поиск? Когда вы взорвете данные, сделайте что-то вроде этого:
$name = $_POST['name'] // John Michael Smith
$first_name = substr($name, 0, strrpos($name, ' ')); //Returns everything before last space, ie John Michael
$last_name = strstr($name, ' '); //Returns everything after first space, ie John Michael
Теперь вы просто запускаете запрос mysql, но настраиваете его на поиск всего, что содержит вышеуказанные значения (поиск по подстроке), с помощью LOCATE:
$results = mysql_query("SELECT * FROM names
WHERE LOCATE(firstname, '$first_name') > 0 OR
LOCATE(lastname, '$last_name') > 0
ORDER BY lastname
Полагаю, вы знаете, что делать с результатами.
Быстрое обновление, если вы беспокоитесь о пользователях, вводящих фамилию, имя, отчество, или что у вас есть, вы всегда можете использовать вышеперечисленное, но найти всю строку:
$results = mysql_query("SELECT * FROM names
WHERE LOCATE(firstname, '$name') > 0 OR
LOCATE(lastname, '$name') > 0
ORDER BY lastname
Это проверит оба столбца на наличие каких-либо экземпляров строки. Вы, вероятно, должны (после очистки строки, как уже было правильно предложено) также удалить любые запятые (но не дефисы) в случае, если кто-то вводит последний, первый или что у вас есть. замените их пробелами, а затем сократите все мульти-пробелы до одного пробела, чтобы быть уверенным в двойном.
Извините за это. Вот способ разделить имена (по пробелам). Там как проблема с моим substr
синтаксисом:
$name = $_POST['name'] // John Michael Smith
$first_name = substr($name, 0, strrpos($name, ' ')); //Returns everything before last space, ie John Michael
$last_name = strstr($name, ' '); //Returns everything after first space, ie John Michael