Как определить место в пост-метод при обработке формы? - PullRequest
1 голос
/ 01 апреля 2012

Я получаю текстовое поле из формы, в которой клиент вводит свое полное имя.

Так что это FirstName и LastName. Теперь, когда он вводит свое имя в текстовое поле, значение отправляется через $_POST и сохраняется в переменной $name.

Теперь у меня есть два поля в моей базе данных, одно из которых first_name, а другое last_name.

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

Например: это не может быть Doe Doe, это должно быть только Doe.

Где, как в поле first_name, разрешены пробелы, например, имя пользователя может быть John или John Mennon.

Поэтому мы можем сказать, что у нас есть first_name в поле таблицы mysql John Mennon и last_name be Doe.

Теперь, когда пользователь вводит это значение как John Mennon Doe, я хочу получить последнее значение после пробелов как мой last_name, т.е. Doe и оставить все, чтобы оно было first_name, т.е.

Как я могу получить эти два значения из переданного значения, хранящегося в переменной с именем $name?

Как и после получения этих значений, я сопоставлю их оба отдельно из базы данных mysql и позволю пользователю выполнять другую работу.

Ответы [ 4 ]

6 голосов
/ 01 апреля 2012
$parts = explode(' ', trim($_POST['name']));
$lastName = array_pop($parts);
$firstName = implode(' ', $parts);
2 голосов
/ 01 апреля 2012

Хотя другие ответы дают правильные технические решения вашей проблемы, никто не упоминает лучшие практики.

Лучшие практики - это избегать предположений об именах людей .Что если бы меня звали "Винсент Ван Гог"?Как вы скажете, как меня зовут и как меня зовут?Ну ... ты не можешь.Меня также можно назвать «Принц» (художник), который поднимает ту же проблему ...

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

Не имеет значения для поиска (используете ли вы полнотекстовый поиск MySQL или Solr), и если вы хотите отобразить псевдоним для пользователя, просто спросите ихза одного!

1 голос
/ 01 апреля 2012

Должен любить регулярные выражения:

if (preg_match("~^((\w+\s*)+)\s+(\w+)$~", trim($_POST["name"]), $match))
{
    $firstName = $match[1];
    $lastName = $match[3];
}
else
    ; // invalid input format

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

Просто для забавы я добавил какое-то определение префикса имени:

if (preg_match("~^(([A-Z]\w+\s+)+)(([a-z]+\s+)?\w+)$~", trim($_POST["name"]), $match))
{
    $firstName = trim($match[1]);
    $lastName = $match[3];
}
else
    // invalid input format

Я предполагал, что такие префиксы, как "van", будут написаны строчными буквами.Таким образом, любая из частей имени непосредственно перед фамилией, начинающаяся с буквы в нижнем регистре, считается префиксом и будет включена в фамилию.

Например, Denise Monique van Outen будет разбит на Denise Monique иvan Outen.

1 голос
/ 01 апреля 2012

Вы можете использовать strrpos для получения последнего индекса пробела в вашей строке, а затем использовать substr для получения first_name и last_name

Хорошим примером strrpos является http://php.net/manual/en/function.strrpos.php

...