Laravel 4如何在提交表单后检查复选框

时间:2013-11-28 16:23:43

标签: php laravel-4

在我的编辑表单的一部分,我有复选框。我可以提交表单,价值以逗号分隔的值存储在数据库中。所以苹果,微软等工作正常,但当我回到编辑表格时,不会选中复选框。如果符合以下条件,我试图回复检查:

<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.'');
    }

}

1 个答案:

答案 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()的文档。

希望清除一些事情。