Я работаю над скриптом, который, по сути, имеет функцию «друг друга», но я пытаюсь найти лучший способ захвата и обработки данных.
Например:
Я показываю 5 пар полей, запрашивающих имя и адрес электронной почты, каждая из которых равна $ friend_name1 / $ friend_email1, $ friend_name2 / $ friend_email2 и т. Д., Что позволяет отправлять по электронной почте 5 друзей за раз?
Я показываю одну пару и использую JavaScript, чтобы позволить пользователю добавлять больше друзей, используя соглашение об именах переменных как # 1?
Я отображу их, как предложено в # 1 или # 2, но затем отправьте массив, например $ friend_email [] / $ friend_name [], и т. Д.
Каков наилучший способ захвата данных?
И тогда, что лучший способ обработки данных?
Если вы получаете массив, например, в # 3, вы затем перебираете каждый $ friend_name $ _POST? Вы сохраняете его в другом массиве? Как вы гарантируете, что правильная комбинация имени / электронной почты остается вместе, если, например, пользователь не добавил «имя» для третьего друга?
Как большинство людей это делает, чтобы они могли оставаться гибкими во время захвата и точности во время обработки? Я действительно ищу логику здесь, хотя образец кода очень ценится.
Одна из вещей, которую я отслеживаю, – это кто имеет в виду кого. Например, если A означает, что B и B что-то покупают, A выиграет. Поэтому точность и безопасность очень важны для меня.
Спасибо, Райан
Я бы рекомендовал массив. Вы можете сделать javascript или иначе, но убедитесь, что в конце обработки можно увидеть, сколько рефералов есть. Чтобы убедиться, что правильная электронная почта и имя остаются вместе, попробуйте что-то вроде
<input type="text" name="friend_name[0]" /> <input type="text" name="friend_email[0]" /> <input type="text" name="friend_name[1]" /> <input type="text" name="friend_email[1]" />
и так далее. Оттуда ваш PHP-скрипт будет просто соответствовать индексам массива в переменной $ _POST. Например, если эта форма была отправлена (как указано выше) с некоторыми произвольными данными, она будет форматироваться следующим образом (это данные print_r ($ _ POST))
Array ( [friend_name] => Array ( [0] => test_name [1] => test_name2 ) [friend_email] => Array ( [0] => email@something.com [1] => email@two.com ) )
Идея о прохождении через них (если вы внедрили javascript с потенциалом для «бесконечного» числа рефералов) было бы использовать count (); функция. Реализация будет выглядеть примерно так:
for($i=0;$i<count($_POST['friend_name']);++$i) { if($_POST['friend_email'][$i] == NULL) continue; // Ignore NULL e-mails // Process data blah }
Или, если те имена, которые выходят из строя, функция foreach () PHP очень хороша и может выполнить одно и то же (что, вероятно, более эффективно для проверки этого типа ошибок)
foreach($_POST['friend_name'] as $key => $val) { if($_POST['friend_email'][$key] == NULL) continue; // Ignore NULL e-mails // Process $val and $_POST['friend_email'][$key] }
Надеюсь это поможет! Удачи!
Деннис М.
Это вопросы пользовательского интерфейса, и ответ – это любой пользовательский интерфейс, который, по вашему мнению, лучше всего подходит для вашего сайта. У вас может быть дизайн, где фиксированное количество полей подходит лучше, или у вас может быть демографическая ситуация, когда кнопка «добавить другое поле» слишком запутанна. В любом случае код, обрабатывающий форму, не должен быть связан с тем, как вы представляете пользовательский интерфейс.
Что касается того, что ваши поля остаются связанными, если вы называете их как массив, укажите сами индексы, а не используйте открытые скобки, и у вас не будет этой проблемы.
<input type="text" name="name[0]" value="First Friend's Name" /> <input type="text" name="email[0]" value="First Friend's E-mail" /> <input type="text" name="name[1]" value="Second Friend's Name" /> <input type="text" name="email[1]" value="Second Friend's E-mail" />
Затем в вашем коде,
foreach ($_POST['email'] as $index => $value) { $name = $POST['name'][$index]; $email = $_POST['email'][$index]; }
Внутри цикла, $name
и $email
будут из одного и того же набора полей в форме, хотя они все еще могут быть пустыми.