kohana解析$ _POST数据

问题描述

| 我有一个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偏好的任何想法? 谢谢!     

解决方法

        问题在于,复选框仅在设置后才会发布数据。您应该反向检查这些值。即 从数据库中获取所有首选项(ID) 检查是否在$ _POST变量中找到一个值 如果不是,则更新db中的false(或0或其他值)(如果已设置),则读出该值。     ,        我有一个稍微不同的方式来执行此操作。 创建复选框时,我还会创建一个相同的隐藏字段,将其设置为零
<input type=\"hidden\" name=\"my_check\" value=\"0\" />
<input type=\"checkbox\" name=\"my_check\" value=\"$value\" />
如果选中该复选框,它将覆盖隐藏值。这样,当您发送表单时,您最终会得到$ _POST [\'checkbox] = 1或0,但它始终存在于$ _POST中。 这种方法的好处是,您可以扩展Form :: checkbox helper,使其始终存在,而不必为每个表单/控制器担心它。 ps。在上面的示例中,您可能想要这样做:
<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。