2015-07-15 1 views
0

Я использую Bootstrap с Laravel 4.2. Всякий раз, когда я пытаюсь добавить более 1 текстовое поле в моей форме, я получаю следующее сообщение об ошибке:Больше, чем одно текстовое поле, дающее мне проблемы

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'comment' cannot be null

Я изолировали проблему в том, что в зависимости от того TextArea я позволяю не быть первым, независимо от того, что имя переменной Даю это или как я пытаюсь сохранить его, только первое содержание текстового поля будет сохранено, а другие получают «нуль», когда я пытаюсь прочитать его в 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(); 

Мне просто интересно, знает ли кто-нибудь об этом или знает об этом? Заранее спасибо.

+1

Не могли бы вы предоставить образец вашего кода (например, вашу форму и где вы пытаетесь сохранить регистр)? – lhoppe

+0

Пожалуйста, прочтите следующее: http://stackoverflow.com/help/how-to-ask –

ответ

1

Проблема в том, у вас есть вложенные формы.

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

Вы должны избавиться от всех тех, кто <form role="form">...</form>. Они ничего не делают, и они нарушают стандарт HTML. Ваш браузер запутался и отправляет только один из них за раз. Следовательно, вы получаете null в не представленных. Вы можете иметь несколько форм на странице, но они не должны быть вложенными.

От html5 docs:

4.10.3 The form element

Content model:

Flow content, but with no form element descendants.

+0

Спасибо Javi - как-то я пропустил, увидев ваш ответ этим утром и разместил свой собственный, но я принял твое, когда увидел, что он был опубликован 10 часов назад! Еще раз спасибо. – user3089840

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(); 
+0

замените этот код. Допустим, вы не допустили нулевого значения в своих соответствующих полях. –

+0

Спасибо jigs, но проблема в том, что текст, который вводится в текстовое поле, не считывается Input :: get ('assignments_comment', false); или Input :: get («Предпосылки_коммента», false); только первый получает текстовый ввод из формы успешно. Второе два получает нуль, даже когда я ввожу текст в текстовое поле! – user3089840

+1

Вы пытаетесь определить с помощью массива типа , , . в вашем контроллере $ dataArray = $ _POST ['data']; –

0

Итак ... после того, как много боли, я просто понял ответ на свой вопрос. Надеюсь, это поможет кому-то другому, кто совершит ту же ошибку. В коде я первоначально размещен, вы будете видеть, что я обернул каждый из моих прокручиваемых в своей собственном <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 от получения чтения , Я удивлен, что первое текстовое поле стало читать. Удаление дополнительных оберток позволило мне отправить более одного текстового поля. Для формы должно быть только 1 обертка. Я скопировал и вставил этот код непосредственно из w3c, поэтому мне потребовалось некоторое время, чтобы реализовать несколько копий части кода, что вызовет у меня ошибку.

Смежные вопросы