2017-02-01 2 views
0

У меня есть форма, на которой вы можете заполнить несколько полей. Количество полей не фиксировано, но зависит от ввода пользователя.Комбинировать данные после отправки

Упрощенная форма:

<form method="POST" action="post.php"> 
    Field one: <input type="text" name="field[]" /><br /> 
    Field two: <input type="text" name="field[]" /><br /> 
    Field three: <input type="text" name="field[]" /><br /> 

    <br /><br /> 

    Checkbox one: <input type="checkbox" name="check[]" value="1" /><br /> 
    Checkbox two: <input type="checkbox" name="check[]" value="1" /><br /> 
    Checkbox three: <input type="checkbox" name="check[]" value="1" /><br /> 

    <br /><br /> 

    <input type="submit" value="Submit" /> 
</form> 

Проблема я столкнулся, что field one должны быть в паре с checkbox one, two с two и так далее. Это не звучит сложно, не так ли? Если все проверено и заполнены, это не так:

Array 
(
    [field] => Array 
     (
      [0] => one 
      [1] => two 
      [2] => three 
     ) 

    [check] => Array 
     (
      [0] => 1 
      [1] => 1 
      [2] => 1 
     ) 
) 

В PHP я мог бы просто связать индексы массива вместе и все хорошо. Проблема, с которой я столкнулся, - это когда вы не выбираете второй флажок. Если вы сделаете это, будет одна запись меньше в check post data:

Array 
(
    [field] => Array 
     (
      [0] => one 
      [1] => two 
      [2] => three 
     ) 

    [check] => Array 
     (
      [0] => 1 
      [1] => 1 
     ) 
) 

Что это лучший способ справиться с этой ситуацией? Представление Ajax не является вариантом, но JavaScript-манипуляция есть.

Я думал о некотором способе создания массивов в JS на элемент (один, два, три) и отправить эти данные. Вопрос в том, как мне это сделать, или есть лучший (более хороший) способ справиться с этой проблемой?

+0

возможно скрытое текстовое поле для флажков. если флажок установлен, скрытое поле получает значение, если нет, скрытое поле пусто. – Eugen

ответ

1

Вы должны соединить их с соответствующими индексами и установить скрытый ввод по умолчанию для флажка перед определением его:

Field one: <input type="text" name="field[0]" /><br /> 

       <input type="hidden" name="check[0]" value="0"> 
Checkbox one: <input type="checkbox" name="check[0]" value="1" /><br /> 

Итак, теперь вы всегда имеете check[0] соответствие с field[0], но она будет иметь значение 0 если не проверено.

+0

Я давно работаю над этим, это точно ... Конечно, добавление индекса - лучшее решение и будет работать. что я сам не думал об этом ... – Mathlight

+0

И спасибо, что придумали этот аккуратный маленький трюк для флажков ... Никогда не знал, что это возможно. – Mathlight

Смежные вопросы