Лучший способ обработки произвольных параметров контактной информации - PullRequest
0 голосов
/ 19 июля 2011

У меня есть форма, которая содержит контактную информацию.У каждого есть тип, а затем и сама контактная информация.Например:

Type    | Contact
-------------------------------
cell    | 555-555-5555
home    | 444-444-4444
email   | abc@def.com

Это функциональное требование, чтобы пользователи могли добавлять / удалять контакты из формы с помощью jQuery (показывая только существующую контактную информацию, т.е. это не статическая форма контакта).

Поскольку пользователи могут добавлять / удалять любые строки в форме, которые им нравятся, это создает параметры HTTP, аналогичные приведенным ниже (с числами, которые не являются последовательными и могут не быть непрерывными):

contact_ty3=cell
contact3=555-555-5555

contact_ty994=home
contact994=444-444-4444

contact_ty45=email
contact45=abc@def.com

Следовательночисла после параметров contact и contact_ty являются произвольными, за исключением того, что они служат для сопоставления типа с соответствующей контактной информацией.

Итак, на принимающей стороне в PHP какэффективно обрабатывать параметры, используя числа для сопоставления типов и контактов?Я думаю, что лучший способ сделать это - использовать регулярные выражения, но самая простая функция, которую я могу придумать, перебирает весь массив $ _REQUEST, отбирает параметры, которые начинаются с contact и идут оттуда.

Есть ли более эффективный способ?Похоже, я пишу ручной метод анализа строк / параметров, когда, возможно, есть функция для этого, о которой я просто не знаю.Поскольку я не буду заранее знать точные имена параметров формы, я не могу полагаться на предположение, что будут contact1, contact2 и т. Д.

Ответы [ 2 ]

1 голос
/ 19 июля 2011

С некоторыми умными именами вы можете легко сопоставить их в сообщении:

<select name="contact[3][type]">...</select>
<input  name="contact[3][value]" ..>
<select name="contact[994][type]">...</select>
<input  name="contact[994][value]" ..>
<select name="contact[45][type]">...</select>
<input  name="contact[45][value]" ..>

И в PHP

<?php
    foreach($_POST['contact'] as $id => $data){
        echo "$id => type is {$data['type']}, value is {$data['value']}";
    }
0 голосов
/ 19 июля 2011

Итерация $ _POST или $ _GET - хорошая идея, а не $ _REQUEST, поскольку она может содержать файлы cookie. Однако лучше не использовать регулярные выражения. Вы можете использовать substr для этой цели. Наблюдайте

foreach($_GET as $k=>$v) {
     if(strpos($Haystack, "contact") === 0) {
          //process $k
     }
}
...