Тема: [PHP] обрабока "больших" форм

Ответить в теме
Показано с 1 по 10 из 10
  1. Вверх #1

    По умолчанию [PHP] обработка "больших" форм

    Добрые сутки.

    Есть форма, в ней ~ 1700 полей, в основном текстовых, сервер не принимает новые динамически добавленные поля.

    Добавление с помощью js в тело формы. Т.е. при редактировании уже существующей формы - все ок, но добавленные поля она на сервер не отправляет (или он не забирает).

    С чем это может быть связано?
    Последний раз редактировалось SooR; 21.12.2011 в 22:44.
    Сделай, чтобы было. Затем — чтобы было красиво. Затем — чтобы было быстро


  2. Вверх #2
    Добрый вечер! Проблема скорее всего заключается в том,что Вы динамически добавляете поля за пределы формы...код в студию...

  3. Вверх #3
    100500 раз проверял, первая мысль такой и была.

    Firebug показывает что внутри.

    Код:

    Код:
        <form action="action" method="post" id="form">
          <table class="form">
            <tr><td colspan="2">Dynamic Form</td></tr>
            <?php if ($items) { ?>
            <tbody id="items">
              <?php foreach ($items as $key => $item) { ?>
              <tr id="item_row<?php echo $key; ?>">
                <td><?php echo $key; ?></td>
                <td>
                  <div id="item<?php echo $key; ?>">
                    <a onclick="addField(<?php echo $key; ?>);">Add field</a>
                    <?php $item_row = 0; ?>
                    <?php foreach ($item['items'] as $key_item => $item) { ?>
                    <p>
                      <input type="text" size="2" name="item[<?php echo $key; ?>][item][<?php echo $key_item; ?>][item]" value="<?php echo $item['item']; ?>" /> %
                      <input type="text" size="4" name="item[<?php echo $key; ?>][item][<?php echo $key_item; ?>][item]" value="<?php echo $item['item']; ?>" /> &mdash;
                      <input type="text" size="4" name="item[<?php echo $key; ?>][item][<?php echo $key_item; ?>][item]" value="<?php echo $item['item']; ?>" />
                      <a onclick="$(this).parent().remove();" class="button red">Удалить</a>
                    </p>
                    <?php $item_row = $key_item+1; ?>
                    <?php } ?>
                  </div>
                </td>
              </tr>
              <?php } ?>
            </tbody>
            <?php } else { ?>
              <?php $item_row = 0; ?>
            <?php } ?>
          </table>
        </form>
      </div>
    </div>
    <script type="text/javascript"><!--
    
    $('input[name=\'item_id[]\']').click(function() {
    
      var item_row = this.value;
    
      if ($(this).attr('checked') == true) {
    
        var text = $('#cat-name' + item_row).text();
        var html = '  <tr id="item_row' + item_row + '">';
            html  += '  <td>&nbsp;</td>';
            html  += '  <td id="item' + item_row + '">';
            html  += '    <a onclick="addItem(' + item_row + ');">Добавить</a>';
            html  += '  </td>';
            html  += '</tr>';
      } else {
        $('#item_row' + item_row).remove();
      }
    
    	$('#items').append(html);
    
    });
    
    var item_row = <?php echo $item_row; ?>;
    
    function addField(item_row) {
    
      var html = ' <p>';
          html += ' <input type="text" size="2" name="item[' + item_row + '][item][' + item_row + '][item]" value="" /> % ';
          html += ' <input type="text" size="4" name="item[' + item_row + '][item][' + item_row + '][item]" value="" /> &mdash; ';
          html += ' <input type="text" size="4" name="item[' + item_row + '][item][' + item_row + '][item]" value="" /> ';
          html += ' <a onclick="$(this).parent().remove();">Удалить</a>';
          html += '</p>';
    
    	$('#item' + item_row).append(html);
    
    	item_row++;
    }
    //--></script>
    Сделай, чтобы было. Затем — чтобы было красиво. Затем — чтобы было быстро

  4. Вверх #4
    у Вас инпуты с одинаковыми неймами, соответственно, передается значение последнего инпута в строке
    Код HTML:
    <p>
    <input type="text" size="2" name="item[0][item][0][item]" value="1"> %
    <input type="text" size="4" name="item[0][item][0][item]" value="1"><input type="text" size="4" name="item[0][item][0][item]" value="1">
    <a onclick="$(this).parent().remove();" class="button red">Удалить</a>
    </p>
    если хотите принимать всю инфу, нужно сделать как-то так
    Код HTML:
    <p>
    <input type="text" size="2" name="item[0][item][0][item][]" value="1"> %
    <input type="text" size="4" name="item[0][item][0][item][]" value="1"><input type="text" size="4" name="item[0][item][0][item][]" value="1">
    <a onclick="$(this).parent().remove();" class="button red">Удалить</a>
    </p>
    странно,что организовываете такую вложенность, неужели нельзя обойтись двумерным массивом?

  5. Вверх #5
    ®odman-9, эм нет, это "макет", в проекте разные индексы.

    Вложенность нужна. Иерархия данных.

    Эта же форма отлично работает с объектом более "мелким".

    Вопрос вот в чем, существуют ли какие-то ограничения по количеству полей в форме?

    php.ini настроен как надо.. не могу понять в чем дело.
    Сделай, чтобы было. Затем — чтобы было красиво. Затем — чтобы было быстро

  6. Вверх #6
    Отправил эту же форму с помощью $.post(), форма парсится вся, а вот сервер отдает только уже существующие поля, новые не хочет. Значит проблема не в количестве полей для html.
    Сделай, чтобы было. Затем — чтобы было красиво. Затем — чтобы было быстро

  7. Вверх #7
    ну раз так (хотя в коде Вашего "макета" индексы одинаковые как в коде php так и js, просто выкладывая такие измененные макеты, вводите в заблуждение), то возможно стоит попробовать увеличить post_max_size, memory_limit. Почитал в гугле, люди сталкивались с такими проблемами, некоторые советуют форме прописать encription='multipart/form-data'
    Последний раз редактировалось ®odman-9; 22.12.2011 в 11:01.

  8. Вверх #8
    ®odman-9, спасибо большое, знаем, плавали (:

    encription='multipart/form-data' нужна для type="file", но не суть важно, проблему решил, оказывается есть такая фишка - Suhosin - расширение php, аля комплексный защитник от всяких атак, инъекций.

    Прописал в suhosin.ini

    Код:
    suhosin.post.max_array_depth = 10000
    suhosin.post.max_array_index_length = 10000
    suhosin.post.max_name_length = 10000
    suhosin.post.max_totalname_length = 10000
    suhosin.post.max_value_length = 1000000
    suhosin.post.max_vars = 10000
    ;suhosin.post.disallow_nul = on
    suhosin.request.max_array_depth = 10000
    suhosin.request.max_array_index_length = 10000
    suhosin.request.max_totalname_length = 10000
    suhosin.request.max_value_length = 1000000
    suhosin.request.max_vars = 10000
    suhosin.request.max_varname_length = 10000
    ;suhosin.request.disallow_nul = on
    и заработало.
    Сделай, чтобы было. Затем — чтобы было красиво. Затем — чтобы было быстро

  9. Вверх #9
    читал про неё, но ни разу на практике не встречал =) про multipart/form-data я в курсе, что для file, просто наткнулся на такое высказывание "Если Вы хотите сэкономить траффик и если полей у Вас немного, но они длинные, можно подумать о том, чтобы применить метод кодирования multipart/form-data.", хотя странно как-то %\

  10. Вверх #10
    Да вот и я не встречал, а хостер обезопасился лишний раз.
    Сделай, чтобы было. Затем — чтобы было красиво. Затем — чтобы было быстро


Ответить в теме

Похожие темы

  1. 22 июля: Synth Gothic Party "Note From a Decadence"
    от Dimiz в разделе Музыка
    Ответов: 16
    Последнее сообщение: 27.07.2015, 15:53
  2. 06.05.2005 Gothic-party "Серый сон", концерт "
    от Оборотень в разделе Музыка
    Ответов: 4
    Последнее сообщение: 15.03.2014, 11:48
  3. Кто-нибудь сталкивался с фирмой "Портал" (ЧП "
    от OTM в разделе Основной форум
    Ответов: 2
    Последнее сообщение: 08.04.2004, 09:37

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения