我使用Bootstrap与Laravel 4.2。每当我尝试添加超过1个文本区域到我的表单,我得到以下错误:
SQLSTATE[23000]:完整性约束违反:1048 Column 'comment'不能为空
我已经隔离的问题是,无论哪个文本区域我允许是第一,无论什么变量名称我给它或我如何试图保存它,只有第一个文本区域的内容得到保存和其他得到"空"当我试图在使用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();
我只是想知道是否有人意识到这一点或知道一种绕过它的方法?
问题是你有嵌套的表单。
{{ Form::open(...)}}
<form role="form">
...
</form>
<form role="form">
...
</form>
{{ Form::close() }}
你应该去掉所有的<form role="form">...</form>
。他们什么也没做,他们破坏了HTML标准。您的浏览器会感到困惑,一次只提交其中一个。因此,您在未提交的内容中获得null
。你可以在一个页面中有多个表单,但它们不应该嵌套。
从html5文档:
4.10.3form
元素内容模型:
流内容,但没有表单元素的后代。
您正在尝试将空值插入表的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();
所以…在经历了很多痛苦之后,我终于找到了自己问题的答案。希望这能帮助那些犯同样错误的人。在我最初发布的代码中,您将看到我在自己的<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>
这就是问题的根源,因为它阻止了文本区域#2和#3被读取。事实上,我很惊讶第一个文本区域被读取了。删除额外的包装器使我能够成功提交多个文本区域。一个表单应该只有一个包装器。我直接从w3c复制并粘贴了这段代码,所以我花了一段时间才意识到部分代码的多个副本会导致我出错。