Как я могу переформатировать ввод формы перед POST, используя Javascript (или Rails)? - PullRequest
0 голосов
/ 21 ноября 2008

В моей форме есть поле с именем "Имя", которое будет содержать как имя, так и фамилию.

Наш существующий динамический сервер (на который отправляется форма) ожидает два отдельных поля (имя, фамилия).

Могу ли я использовать Javascript для разделения пользовательского ввода на две отдельные переменные перед отправкой формы на сервер? Как бы я это сделал?

Ответы [ 5 ]

2 голосов
/ 21 ноября 2008

Вы не должны полагаться на синтаксический анализ на стороне клиента, когда это возможно. Если вы отправляете эту форму в приложение, которое вы не можете изменить, используйте метод Javascript, упомянутый выше, потому что у вас нет контроля над ним (но почему бы просто не иметь поля имени и фамилии). Но если вы управляете бэкенд-приложением, выполняйте там все ваши массажи и проверку данных.

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

Кроме того, при работе с именами имейте в виду все различные типы форматов, которые вы получите, например:

John Smith Jr
Dr John Smith
John Smith Esq.
John Smith IV
John A Smith

Так что будьте осторожны, массируя имена, это очень грязное дело, и публика будет вводить все, что хочет, по крайней мере, добавить небольшой ярлык и попросить их вводить только «имя и фамилию» и молиться за лучшее. 1008 *

0 голосов
/ 30 июня 2009

Для меня причина наличия единственного поля - в простоте формы, которая получит более высокие преобразования.

Заставить PHP разделить имя на имя и фамилию, а затем заставить PHP повторно отправить форму на другой сервер, может быть немного сложно ...

0 голосов
/ 21 ноября 2008

Я обработал бы это на стороне сервера, чтобы удостовериться, что переданные данные являются точными от того, что было опубликовано. Разделить имя программным способом относительно легко, но проблема в том, как определить разделитель. Большинство согласится разделить его везде, где есть пробелы, но что, если они введут имя из трех слов, такое как Don Juan DiMarco ? Если вы решите разделить имя на основе пробелов, вам придется определить, как назначить имя и фамилию.

$arrNames = preg_split('/\s+/', $_POST['name']);

Выше приведено (в PHP) массив значений, разделенных пробелами. Выполнение этого в строке Дон Хуан Димарко даст вам массив вроде:

Array([0] => "Don", [1] => "Juan", [2] => "DiMarco")

Оттуда вы должны определить, какие из них - это имя, а какие - середина, а какие - фамилия. Это становится еще сложнее, если у вас есть 4 или 5 имен, что вполне реально для определенных культур. Все это - догадки, поэтому я бы порекомендовал просто добавить поле ввода Фамилия на внешнем интерфейсе. Это исключило бы все предположения о том, какое имя является первым, а какое - фамилией.

0 голосов
/ 21 ноября 2008

Если это необходимо обработать на стороне клиента, используйте метод разделения Javascript для анализа значения поля имени. Затем добавьте два имени к URL-адресу формы или создайте пару скрытых полей.

0 голосов
/ 21 ноября 2008

Вы можете сделать что-то вроде этого:

var yourForm = document.getElementById('yourFormId');
yourform.onsubmit = new function()
{
    var nameBox = document.getElementById('nameBox');
    var fname = document.createElement('INPUT');
    var lname = document.createElement('INPUT');
    fname.type = 'HIDDEN';
    lname.type = 'HIDDEN';
    fname.name = 'fname';
    lname.name = 'lname';

    var tokens = nameBox.value.split(' ');

    // Note there are a million ways to break this parser, demonstration only
    fname.value = tokens[0];
    lname.value = tokens[1];

    yourForm.appendChild(fname);
    yourForm.appendChild(lname);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...