问题描述
|
我有一个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。