kohana解析$ _POST数据

时间:2011-06-16 14:17:12

标签: php forms post kohana

我有一个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 个答案:

答案 0 :(得分:1)

我的方法略有不同。

当我创建一个复选框时,我也会创建一个相同的隐藏字段设置为零

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

勾选该复选框将覆盖隐藏值。这样当您发送表单时,最终会使用$ _POST ['复选框] = 1或0,但它始终存在于$ _POST中。

这个方法的好处是你可以扩展Form ::复选框帮助程序,使它始终存在,你不必为每个表单/控制器担心它。

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-&gt; id。

答案 1 :(得分:0)

问题是复选框只会在设置时发布数据。您应该反向检查值。即;

  • 从数据库中获取所有首选项(id)
  • 检查$ _POST var
  • 中是否找到了值
  • 如果没有,请在db中更新为false(或0或其他),如果设置,则读出该值。