我有一个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偏好的任何想法? 谢谢!
答案 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)
问题是复选框只会在设置时发布数据。您应该反向检查值。即;