不止一个textarea给我带来了问题

时间:2015-07-15 04:05:18

标签: php html forms twitter-bootstrap laravel

我正在使用Bootstrap与 Laravel 4.2。每当我尝试在表单中添加超过1个textarea时,我都会收到以下错误:

  

SQLSTATE [23000]:完整性约束违规:1048列“评论”   不能为空

我已经把问题分离出来,无论我允许哪个textarea是第一个,无论我给它的变量名称或我如何保存它,只有第一个textarea内容得到保存而其他内容得到“null”时我尝试使用Input::get('my_textarea_name');

阅读它

这是我的表格:

{{ Form::open(array('url' => 'course_review', 'id'=>'clearForm'))}}
       <div class="row">
    <form role="form">
        <div class="form-group">
            <label for="course_comment">How can students succeed in this course?</label>
            <textarea class="form-control" rows="5" id="course_comment" name="course_comment"></textarea>
        </div>
    </form>
</div>
<hr>

<div class="row">
    <form role="form">
        <div class="form-group">
            <label for="assignments_comment">What kind of assignments and tests did this course have?</label>
            <textarea class="form-control" rows="5" id="assignments_comment" name="assignments_comment"></textarea>
        </div>
    </form>
</div>
<hr>

<div class="row">
    <form role="form">
        <div class="form-group">
            <label for="prerequisites_comment">What skills and prerequisites are required for this course?</label>
            <textarea class="form-control" rows="5" id="prerequisites_comment" name="prerequisites_comment"></textarea>
        </div>
    </form>
</div>
    <hr>
    <div class="row">
        <div class="col-xs-12">
            <button type="submit" class="btn btn-info ladda-button" data-style="zoom-out" id="create_or_edit_button"><span class="ladda-label">
            <span class="glyphicon glyphicon-plus"></span> Add this review</span>
            </button>
        </div>
    </div>
</div>
{{ Form::close() }}

这是我的模型中的剪辑:

$review = new Review();
$review->course_comment = Input::get('course_comment');
$review->assignments_comment = Input::get('assignments_comment');
$review->prerequisites_comment = Input::get('prerequisites_comment');
$review->save();

我只是想知道是否有人知道这一点或知道解决方法?提前谢谢。

3 个答案:

答案 0 :(得分:1)

问题是你有嵌套表格。

{{ Form::open(...)}}
    <form role="form">
    ...
    </form>
    <form role="form">
    ...
    </form>
{{ Form::close() }}

你应该摆脱所有<form role="form">...</form>。他们什么都不做,他们打破了HTML标准。您的浏览器感到困惑,并且一次只提交其中一个。因此,您在未提交的内容中获得null。您可以在页面中包含多个表单,但不应嵌套它们。

来自html5 docs

  

4.10.3 form元素

     

内容模型:

     

流内容,但没有表单元素后代。

答案 1 :(得分:0)

您正尝试在表格的comment字段中插入空值。 只是确保它不是空的。

很明显,此错误的原因是comment

的空值
$review = new Review();
$review->course_comment = Input::get('course_comment' ,false);
$review->assignments_comment = Input::get('assignments_comment', false);
$review->prerequisites_comment = Input::get('prerequisites_comment', false);
$review->save();

答案 2 :(得分:0)

所以...在经历了很多痛苦之后,我只想出了自己问题的答案。希望这会帮助那些犯同样错误的人。在我最初发布的代码中,您将看到我将每个textareas包装在自己的<form role="form">包装器中:

<div class="row">
    <form role="form">
        <div class="form-group">
            <label for="assignments_comment">What kind of assignments and tests did this course have?</label>
            <textarea class="form-control" rows="5" id="assignments_comment" name="assignments_comment"></textarea>
        </div>
    </form>
</div>
<hr>

这是问题的根源,因为它阻止了textareas#2和#3被阅读。事实上,我很惊讶第一个textarea正在阅读。删除额外的包装器使我能够成功提交多个textarea。表单应该只有一个包装器。我直接从w3c复制并粘贴了这段代码,所以我花了一段时间才意识到部分代码的多个副本会导致错误。