Hello I want to add comments dynamically with AJAX but I have a problem. When I click submit I get error: "Failed to load resource: http://localhost:888/blog/public/comment/add the server responded with a status of 500 (Internal Server Error)" Here is my code: View:
{{ Form::open(array('method'=>'post','class'=> 'col-md-6','url' => '/comment/add', 'id'=>'comment')) }}
<input type="hidden" name="post_id" value="{{$id}}">
<div class="row">
<div class="inner col-xs-12 col-sm-12 col-md-11 form-group">
{{Form::label('name', 'Imię')}}
{{Form::text('username', null, array('class'=>'form-control', 'id'=>'name', 'name'=>'name'))}}
</div>
<div class="inner col-xs-12 col-sm-12 col-md-12 form-group">
{{Form::label('message', 'Wiadomość')}}
{{Form::textarea('message', null, array('class'=>'form-control', 'id'=>'message', 'name'=>'message', 'rows'=>'5'))}}
</div>
</div>
<div class="row">
<div class="col-xs-12 col-md-12 submit form-group">
{{Form::submit('Wyślij', array('name'=>'submit', 'class'=>'btn btn-orange'))}}
</div>
</div>
{{ Form::close() }}
Route:
Route::post('/comment/add', 'CommentController@addComment');
Controller:
public function addComment()
{
$this->layout = null;
//check if its our form
if ( Request::ajax() ) {
$name = Input::get( 'name' );
$content = Input::get( 'message' );
$comment = new Comment();
$comment->author = $name;
$comment->comment_content = $content;
$comment->save();
$postComment = new CommentPost();
$postComment->post_id = Input::get('post_id');
$postComment->comment_id = Comment::max('id');
$postComment->save();
$response = array(
'status' => 'success',
'msg' => 'Setting created successfully',
);
return Response::json( $response );
}
}
AJAX:
jQuery( document ).ready( function( $ ) {
$( '#comment' ).on( 'submit', function() {
// get the form data
// there are many ways to get this data using jQuery (you can use the class or id also)
var formData = {
'name' : $('#name').val(),
'message' : $('message').val()
};
// process the form
$.ajax({
type : 'POST', // define the type of HTTP verb we want to use (POST for our form)
url : host + '/comment/add', // the url where we want to POST
data : formData, // our data object
dataType : 'json', // what type of data do we expect back from the server
encode : true,
error: function(xhr, textStatus, thrownError) {
alert('Something went to wrong.Please Try again later...');
}
})
// using the done promise callback
.done(function(data) {
// log data to the console so we can see
console.log(data);
// here we will handle errors and validation messages
});
// stop the form from submitting the normal way and refreshing the page
event.preventDefault();
} );
});
The stack trace in your laravel.log
(found in app/storage/log/
) should help you find the origin of the error. If not, post the last stack trace (not the whole log file) here. Maybe we can help.
I am new in Laravel so I will put it here:
[2014-12-07 17:02:53] production.ERROR: exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'author' cannot be null' in /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Connection.php:344
Stack trace:
#0 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Connection.php(344): PDOStatement->execute(Array)
#1 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Connection.php(592): Illuminate\Database\Connection->Illuminate\Database\{closure}(Object(Illuminate\Database\MySqlConnection), 'insert into `bl...', Array)
#2 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Connection.php(556): Illuminate\Database\Connection->runQueryCallback('insert into `bl...', Array, Object(Closure))
#3 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Connection.php(345): Illuminate\Database\Connection->run('insert into `bl...', Array, Object(Closure))
#4 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Connection.php(302): Illuminate\Database\Connection->statement('insert into `bl...', Array)
#5 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php(30): Illuminate\Database\Connection->insert('insert into `bl...', Array)
#6 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(1855): Illuminate\Database\Query\Processors\Processor->processInsertGetId(Object(Illuminate\Database\Query\Builder), 'insert into `bl...', Array, 'id')
#7 [internal function]: Illuminate\Database\Query\Builder->insertGetId(Array, 'id')
#8 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(913): call_user_func_array(Array, Array)
#9 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1517): Illuminate\Database\Eloquent\Builder->__call('insertGetId', Array)
#10 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1517): Illuminate\Database\Eloquent\Builder->insertGetId(Array, 'id')
#11 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1487): Illuminate\Database\Eloquent\Model->insertAndSetId(Object(Illuminate\Database\Eloquent\Builder), Array)
#12 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1395): Illuminate\Database\Eloquent\Model->performInsert(Object(Illuminate\Database\Eloquent\Builder))
#13 /Applications/MAMP/htdocs/blog/app/controllers/CommentController.php(31): Illuminate\Database\Eloquent\Model->save()
#14 [internal function]: CommentController->addComment()
#15 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(231): call_user_func_array(Array, Array)
#16 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(93): Illuminate\Routing\Controller->callAction('addComment', Array)
#17 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(62): Illuminate\Routing\ControllerDispatcher->call(Object(CommentController), Object(Illuminate\Routing\Route), 'addComment')
#18 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/Router.php(962): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'CommentControll...', 'addComment')
#19 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#20 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/Route.php(109): call_user_func_array(Object(Closure), Array)
#21 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/Router.php(1028): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
#22 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/Router.php(996): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#23 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(776): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#24 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(746): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#25 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Session/Middleware.php(72): Illuminate\Foundation\Application->handle(Object(Illuminate\Http\Request), 1, true)
#26 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Cookie/Queue.php(47): Illuminate\Session\Middleware->handle(Object(Illuminate\Http\Request), 1, true)
#27 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Cookie/Guard.php(51): Illuminate\Cookie\Queue->handle(Object(Illuminate\Http\Request), 1, true)
#28 /Applications/MAMP/htdocs/blog/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Illuminate\Cookie\Guard->handle(Object(Illuminate\Http\Request), 1, true)
#29 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(642): Stack\StackedHttpKernel->handle(Object(Illuminate\Http\Request))
#30 /Applications/MAMP/htdocs/blog/public/index.php(49): Illuminate\Foundation\Application->run()
#31 {main}
Next exception 'Illuminate\Database\QueryException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'author' cannot be null (SQL: insert into `blog_comments` (`author`, `comment_content`, `updated_at`, `created_at`) values (, , 2014-12-07 17:02:53, 2014-12-07 17:02:53))' in /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Connection.php:600
Stack trace:
#0 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Connection.php(556): Illuminate\Database\Connection->runQueryCallback('insert into `bl...', Array, Object(Closure))
#1 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Connection.php(345): Illuminate\Database\Connection->run('insert into `bl...', Array, Object(Closure))
#2 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Connection.php(302): Illuminate\Database\Connection->statement('insert into `bl...', Array)
#3 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php(30): Illuminate\Database\Connection->insert('insert into `bl...', Array)
#4 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(1855): Illuminate\Database\Query\Processors\Processor->processInsertGetId(Object(Illuminate\Database\Query\Builder), 'insert into `bl...', Array, 'id')
#5 [internal function]: Illuminate\Database\Query\Builder->insertGetId(Array, 'id')
#6 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(913): call_user_func_array(Array, Array)
#7 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1517): Illuminate\Database\Eloquent\Builder->__call('insertGetId', Array)
#8 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1517): Illuminate\Database\Eloquent\Builder->insertGetId(Array, 'id')
#9 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1487): Illuminate\Database\Eloquent\Model->insertAndSetId(Object(Illuminate\Database\Eloquent\Builder), Array)
#10 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1395): Illuminate\Database\Eloquent\Model->performInsert(Object(Illuminate\Database\Eloquent\Builder))
#11 /Applications/MAMP/htdocs/blog/app/controllers/CommentController.php(31): Illuminate\Database\Eloquent\Model->save()
#12 [internal function]: CommentController->addComment()
#13 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(231): call_user_func_array(Array, Array)
#14 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(93): Illuminate\Routing\Controller->callAction('addComment', Array)
#15 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(62): Illuminate\Routing\ControllerDispatcher->call(Object(CommentController), Object(Illuminate\Routing\Route), 'addComment')
#16 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/Router.php(962): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'CommentControll...', 'addComment')
#17 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#18 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/Route.php(109): call_user_func_array(Object(Closure), Array)
#19 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/Router.php(1028): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
#20 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/Router.php(996): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#21 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(776): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#22 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(746): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#23 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Session/Middleware.php(72): Illuminate\Foundation\Application->handle(Object(Illuminate\Http\Request), 1, true)
#24 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Cookie/Queue.php(47): Illuminate\Session\Middleware->handle(Object(Illuminate\Http\Request), 1, true)
#25 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Cookie/Guard.php(51): Illuminate\Cookie\Queue->handle(Object(Illuminate\Http\Request), 1, true)
#26 /Applications/MAMP/htdocs/blog/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Illuminate\Cookie\Guard->handle(Object(Illuminate\Http\Request), 1, true)
#27 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(642): Stack\StackedHttpKernel->handle(Object(Illuminate\Http\Request))
#28 /Applications/MAMP/htdocs/blog/public/index.php(49): Illuminate\Foundation\Application->run()
#29 {main} [] []
[2014-12-07 17:03:23] production.ERROR: exception 'Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException' in /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php:212
Stack trace:
#0 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php(198): Illuminate\Routing\RouteCollection->methodNotAllowed(Array)
#1 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php(145): Illuminate\Routing\RouteCollection->getOtherMethodsRoute(Object(Illuminate\Http\Request), Array)
#2 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/Router.php(1049): Illuminate\Routing\RouteCollection->match(Object(Illuminate\Http\Request))
#3 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/Router.php(1017): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request))
#4 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Routing/Router.php(996): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#5 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(776): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#6 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(746): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#7 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Session/Middleware.php(72): Illuminate\Foundation\Application->handle(Object(Illuminate\Http\Request), 1, true)
#8 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Cookie/Queue.php(47): Illuminate\Session\Middleware->handle(Object(Illuminate\Http\Request), 1, true)
#9 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Cookie/Guard.php(51): Illuminate\Cookie\Queue->handle(Object(Illuminate\Http\Request), 1, true)
#10 /Applications/MAMP/htdocs/blog/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Illuminate\Cookie\Guard->handle(Object(Illuminate\Http\Request), 1, true)
#11 /Applications/MAMP/htdocs/blog/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(642): Stack\StackedHttpKernel->handle(Object(Illuminate\Http\Request))
#12 /Applications/MAMP/htdocs/blog/public/index.php(49): Illuminate\Foundation\Application->run()
#13 {main} [] []
Looks like the field auther
doesn't get filled out in your controller. I think it's because of this line:
{{Form::text('username', null, array('class'=>'form-control', 'id'=>'name', 'name'=>'name'))}}
Here you create a text field. The first parameter (username
in your case) already is the name
given to the text field. That means adding 'name'=>'name'
has no effect. Change that line to
{{Form::text('name', null, array('class'=>'form-control', 'id'=>'name'))}}
And see if it changes things.
If your comments can only belong to one post, you can add the post_id
directly into your comments
table and don't have to use an extra CommentPost
model ;)
Sign in to participate in this thread!
The Laravel portal for problem solving, knowledge sharing and community building.
The community