kohana parse $ _POST data - PullRequest
       23

kohana parse $ _POST data

0 голосов
/ 16 июня 2011

У меня есть приложение Kohana, и у меня есть форма с несколькими флажками, и пользователь должен проверить свои предпочтения там в форме.поэтому у меня есть отношение 1: n между пользовательской таблицей и таблицей предпочтений.Моя проблема в том, что я хочу сохранить эти настройки, выбранные в форме, и я не знаю, как.

У меня есть форма:

   <form id="address" method="POST" action="<?= Route::url('Save user preferences' , array('user_id' => $user));?>">
   <? foreach ($prefered_products as $pp): ?>
   <input type="checkbox" name="user_preferences_preference[]" value="<?= $pp ?>" /><?= $pp->product; ?><br />

   <? endforeach; ?>
            <button type="submit">Salveaza preferintele tale</button>
   </form>

, и я сохраняю данные:

  foreach ($_POST['user_preferences_preference'] as $up)  {
     $user_preferences->prefered = $up;
     $user_preferences->user = $this->user;
     $user_preferences->save();

    }
$this->view->message = __('Thank you for your feedback!');

, но похоже, что способ, которым я разбираю настройки, неверен, я получаю: ErrorException [Предупреждение]: неверный аргумент, предоставленный для foreach ()

любая идея о том, как ядолжен получить несколько параметров $ _post?спасибо!

Ответы [ 2 ]

1 голос
/ 17 июня 2011

У меня есть немного другой способ сделать это.

Когда я создаю флажок, я также создаю идентичное скрытое поле с нулевым значением

<input type="hidden" name="my_check" value="0" />
<input type="checkbox" name="my_check" value="$value" />

Флажок, если отмечен, переопределит скрытое значение. Таким образом, когда вы отправляете форму, вы получаете $ _POST ['checkbox] = 1 или 0, но она всегда существует в $ _POST.

Хорошая особенность этого метода в том, что вы можете расширить помощник Form :: checkbox, чтобы он всегда присутствовал, и вам не приходилось беспокоиться об этом для каждой формы / контроллера.

p.s. В приведенном выше примере вы, вероятно, захотите сделать это так:

<input type="hidden" name="user_preferences_preference[$pp->id]" value="0" />
<input type="checkbox" name="user_preferences_preference[$pp->id]" value="<?= $pp ?>" />
<?= $pp->product; ?><br />

Или используйте значение $ key вместо $ pp-> id.

0 голосов
/ 17 июня 2011

Проблема заключается в том, что флажок будет публиковать данные только после установки. Вы должны проверить значения в обратном порядке. Т.е.;

  • Получить все предпочтения (идентификаторы) из базы данных
  • Проверьте, найдено ли значение в переменной $ _POST
  • Если нет, обновите значение false (или 0 или что-то еще) в дБ, если установлено, считайте значение.
...