在我的编辑表单的一部分,我有复选框。我可以提交表单,价值以逗号分隔的值存储在数据库中。所以苹果,微软等工作正常,但当我回到编辑表格时,不会选中复选框。如果符合以下条件,我试图回复检查:
<input name="software[]" type="checkbox" value="Ortho trac" <?php if(isset($_POST['software'])) echo "checked"; ?>> Ortho trac
但上面的代码不起作用。我不知道如何在laravel中做到这一点。 当我尝试更新值时,数据库中的先前值也会消失
视图
<div class="form-group mtop-20">
<label for="temp_software_experience">Software Experience:</label><br>
<label class="checkbox-inline">
<input name="software[]" type="checkbox" class="input-sm" value="Practiceworks"> Practiceworks
</label>
<label class="checkbox-inline">
<input name="software[]" type="checkbox" value="Softdent"> Softdent
</label>
<label class="checkbox-inline">
<input name="software[]" type="checkbox" value="Ortho trac" <?php if (isset($_POST['software'])) echo "checked"; ?>> Ortho trac
</label>
<label class="checkbox-inline">
<input name="software[]" type="checkbox" value="Dentrix"> Dentrix
</label>
<label class="checkbox-inline">
<input name="software[]" type="checkbox" value="Easy Dental"> Easy Dental
</label>
<label class="checkbox-inline">
<input name="software[]" type="checkbox" value="Practiceworks"> Eaglesoft
</label>
<label class="checkbox-inline">
<input type="checkbox" id="temp_software_experience" value="Other"> Other
</label>
</div><!-- end .form-group -->
控制器
public function update($id)
{
// validate
// read more on validation at http://laravel.com/docs/validation
$rules = array(
'firstname' => 'required|min:3|alpha',
'lastname' => 'required|min:3|alpha',
'zipcode' => 'required|min:5|numeric',
'temp_experience' => 'required|min:1|max:50|numeric',
'temp_travel' => 'required|numeric',
'temp_hourly_rate' => 'required|numeric|min:10',
);
$validator = Validator::make(Input::all(), $rules);
// process the login
if ($validator->fails()) {
return Redirect::to('user/profile/' . $id . '/edit')
->withErrors($validator)
->withInput();
} else {
$software_checked = Input::get('software');
if(is_array($software_checked))
{
$implade_software = implode(',', $software_checked);
}
// store
$user = User::find($id);
$user->firstname = Input::get('firstname');
$user->lastname = Input::get('lastname');
$user->zipcode = Input::get('zipcode');
$user->temp_experience = Input::get('temp_experience');
$user->temp_travel = Input::get('temp_travel');
$user->temp_hourly_rate = Input::get('temp_hourly_rate');
$user->temp_software_experience = $implade_software;
$user->save();
// redirect
Session::flash('message', 'Successfully updated profile!!');
return Redirect::to('user/profile/'.$id.'');
}
}
答案 0 :(得分:0)
更新后,您将重定向,从而清除POST
数据。
// redirect
Session::flash('message', 'Successfully updated profile!!');
return Redirect::to('user/profile/'.$id.'');
要访问此数据,您需要从存储方法(本例中为数据库)中获取数据,而不是您的POST
数据,因为它不包含任何数据。
所以条件应该是这样的:
<?php if(!empty($user->software)) echo "checked"; ?>
注意:您甚至应该在视图中使用Input::get()
,使用$_POST
时没有意义。
您丢失数据的原因是您在对数据执行条件检查之前首先需要explode()
数据。
说你选择:
[x] Apple
[ ] Orange
[x] Banana
在您的专栏中,它看起来像apple,banana
。
执行条件检查时,它看起来与此类似:
if ('apple,banana' == 'apple') echo 'checked';
您需要检查该逗号分隔列表中的元素是否存在。因此,首先尝试将其爆炸,然后再进行检查。这应该是一个很好的起点。
$software = explode(',', $user->temp_software_experience);
然后对每个输入:
if (in_array("Practiceworks", $software)) echo "checked";
以下是in_array()的文档。
希望清除一些事情。