我正在制作一个简单的注册表单,然后将数据提交到我的数据库。但是,我遇到的问题是应该将信息提交到数据库的代码不起作用。
这是我使用Twitter Bootstrap
制作的表格<!DOCTYPE html>
<html>
<body>
<div class="modal-body">
<div class="well">
<div id="myTabContent" class="tab-content">
<div class="tab-pane active in" id="login">
<form method="POST" action='/adding_to_table' class="form-horizontal">
<fieldset>
<div id="legend">
<legend class="">Create Your Account</legend>
</div>
<div class="control-group">
<!-- Username -->
<label class="control-label" for="firstname">First Name</label>
<div class="controls">
<input type="text" id="first_name" name="firstname" placeholder="" class="input-xlarge">
</div>
</div>
<div class="control-group">
<!-- Username -->
<label class="control-label" for="lastname">Last Name</label>
<div class="controls">
<input type="text" id="last_name" name="lastname" placeholder="" class="input-xlarge">
</div>
</div>
<div class="control-group">
<!-- Username -->
<label class="control-label" for="email">E-mail</label>
<div class="controls">
<input type="text" id="e_mail" name="email" placeholder="" class="input-xlarge">
</div>
</div>
<div class="control-group">
<!-- Username -->
<label class="control-label" for="username">Username</label>
<div class="controls">
<input type="text" id="username" name="username" placeholder="" class="input-xlarge">
</div>
</div>
<div class="control-group">
<!-- Password-->
<label class="control-label" for="password">Password</label>
<div class="controls">
<input type="password" id="password" name="password" placeholder="" class="input-xlarge">
</div>
</div>
<div class="control-group">
<!-- Button -->
<div class="controls">
<button class="btn btn-primary">Submit</button>
</div>
</div>
</fieldset>
</form>
</div>
</div>
</div>
</div>
<script class="cssdeck" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script class="cssdeck" src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script>
</body>
<html>
这是我在表单中传递给action字段的路径:
Route::get('/adding_to_table', function()
{
return View::make('create');
});
这是应该加载路由(上面)的create.php文件 数据库提交
DB::table('user_info')->insert(
array("First_name" => Input::post('firstname'),
"Last_name" => Input::post("lastname"),
"E-mail" => Input::post("email"),
"Username" => Input::post("username"),
"Password" => Input::post("password"),
)
);
echo "Successfully entered user information into data table";
然而,Laravel并不喜欢这样,并向我抛出这个错误: Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException 打开:/Users/brendanbusey/Desktop/php_site/laravelSite/bootstrap/compiled.php
}))->bind($request);
} else {
$this->methodNotAllowed($others);
}
}
protected function methodNotAllowed(array $others)
{
throw new MethodNotAllowedHttpException($others);
}
protected function check(array $routes, $request, $includingMethod = true)
我已经进行了双重和三重检查,以确保在我通过POST发送数据以及我的所有列中的所有名称时,我使用的是html表单中的名称而不是id。数据库匹配我的代码中的数据库。任何帮助将不胜感激!
答案 0 :(得分:6)
您需要定义两条路线,一条用于GET,另一条用于POST。如果你想使用相同的adds_to_table网址,它应该像
Route::get('/adding_to_table', function() {
// code to display your form initially
});
Route::post('/adding_to_table', function() {
// code to process the form submission
});
也许我没有正确理解你,但看起来你正在使用View::make()
来尝试运行你的数据库插入代码。我相信View::make()
只是为了渲染刀片模板,所以我认为这不会起作用。相反,你可以将这种类型的东西放入控制器方法,甚至可以直接放入后期封闭。要访问提交的值,您应该使用Input::get('firstname')
等。在laravel docs here中,它解释了
您无需担心用于请求的HTTP谓词,如 对所有动词都以相同的方式访问输入。
答案 1 :(得分:0)
您需要将HTML中的表单开头行更改为:
<form method="POST" action='adding_to_table' class="form-horizontal">
在routes.php
文件中,您需要拥有以下内容:
Route::get('adding_to_table', function()
{
return View::make('create');
});
Route::post('adding_to_table', function()
{
DB::table('user_info')->insert(
array("First_name" => Input::get('firstname'),
"Last_name" => Input::get("lastname"),
"E-mail" => Input::get("email"),
"Username" => Input::get("username"),
"Password" => Input::get("password"),
)
);
});
答案 2 :(得分:0)
更改
Input::post() to Input::get()
检索输入。
答案 3 :(得分:-1)
只需在表单下方添加{{ csrf_field() }}
,就像这样:
<form method="POST" action='/adding_to_table' class="form-horizontal">
{{ csrf_field() }}
答案 4 :(得分:-1)
在Create.blade.php中
{!! Form::open(array('route' => 'ControllerName.store','method' => 'POST','files' => true)) !!}
控制器中的: -
public function store(Request $request)
{
$this->validate($request, [
'first_name' =>'required',
'last_name' => 'required',
'e_mail' =>'required',
'username' => 'required',
'password' =>'required',
]);
ModelName::create($request->all());
return route->(ControllerName.index);
注意:检查所有字段的模型是否可填写。