2012-06-22 2 views
0

Я, наверное, глупый, потому что в пятницу днем, но я просто не могу с этим справиться.

Я хочу иметь форму, в которой пользователи могут добавлять бесконечные «записи». Для этого нажмите кнопку «добавить запись». Это запускает javascript, который добавляет новую строку (tr) в таблицу в пределах <form>.

Эта новая строка имеет три поля ввода.

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

$_POST['record'] = array(
    array(
     "input1" => "value", 
     "input2" => "value", 
     "input3" => "value" 
    ), 
    array(
     "input1" => "value", 
     "input2" => "value", 
     "input3" => "value" 
    ), 
    array(
     "input1" => "value", 
     "input2" => "value", 
     "input3" => "value" 
    ), 
); 

Я знаю, вы можете получить массивы, используя такое имя:

<input type="text" name="record[]" /> 

Но это только 1 элемент ввода. Есть ли способ получить структуру, как показано выше, с тремя элементами?

спасибо.

ответ

1

Вы не можете легко получить то, что вы ищете именно, но вы можете использовать name="record[input1][]"input2 и т.д.), и результат:

$_POST['record'] = array(
    "input1"=>array(
     "value", "value", "value" 
    ), 
    "input2"=>array(
     "value", "value", "value" 
    ), 
    "input3"=>array(
     "value", "value", "value" 
    ) 
); 

Вы могли бы затем преобразовать его в нужный формат, как так:

$out = Array(); 
foreach(array_keys($_POST['record']['input1']) as $i) { 
    foreach($_POST['record'] as $k=>$v) { 
     $out[$i][$k] = $v[$i]; 
    } 
} 
+0

это похоже на лучший способ сделать это –

+0

Спасибо за помощь. :) Могу ли я гарантировать порядок полей? Это порядок в HTML? –

+0

Да, поля отправляются в том порядке, в котором они отображаются в HTML-форме. –

1

Я думаю, что вы на правильном пути. используя name=record[]. Вы получите что-то вроде

$_POST['record'] = array(
    "record" => array(
     "value", 
     "value", 
     "value" 
    ), 
    "field2" => array(
     "value", 
     "value", 
     "value" 
    ), 
    "field3" => array(
     "value", 
     "value", 
     "value" 
    ) 
); 

Таким образом, чтобы получить каждую строку, вы будете использовать

$cnt = count($theArray['record']); 
for ($x=0; $x<$cnt; $x++){ 
    echo $theArray['record'][$x]; 
    echo $theArray['field2'][$x]; 
    echo $theArray['field3'][$x]; 
} 
+0

Да, спасибо ... это, кажется, что единственный способ сделать то, что мне нужно. Могу ли я гарантировать порядок полей в массиве? Это порядок, который они имеют в моем HTML? Спасибо –

+0

Они будут в том же порядке, что и внутри HTML. Если вам это нужно в определенном порядке, вам нужно будет отобразить их таким образом или вручную отредактировать результаты. – Dutchie432

0

Я просто попытался -

<form action="" method="post"> 
<input type="text" name="record['set1'][]" /> 
<input type="text" name="record['set1'][]" /> 
<input type="text" name="record['set1'][]" /> 
<input type="text" name="record['set2'][]" /> 
<input type="text" name="record['set2'][]" /> 
<input type="text" name="record['set2'][]" /> 
<input type="text" name="record['set3'][]" /> 
<input type="text" name="record['set3'][]" /> 
<input type="text" name="record['set3'][]" /> 
<input type="submit" value="submit" /> 
</form> 

Выход -

Array 
(
    [record] => Array 
     (
      ['set1'] => Array 
       (
        [0] => 1 
        [1] => 2 
        [2] => 3 
       ) 

      ['set2'] => Array 
       (
        [0] => 4 
        [1] => 5 
        [2] => 6 
       ) 

      ['set3'] => Array 
       (
        [0] => 7 
        [1] => 8 
        [2] => 9 
       ) 

     ) 

) 

Является ли это, как вы этого хотели?

+0

Я могу работать с этим, я думаю. То, что я хотел, было наоборот: '', но с этим вы получите 'record [0] ['input1']' и 'record [1] ['input2']'. :/Я могу просто сделать это вручную. :) –

0

Я думаю, что это будет более ясно для вас,

$record = array(); 
foreach($_POST['record'] as $val){ 
    $record[] = $val; 
} 
print_r($record); 
Смежные вопросы