我有一个联系表单,提交后将成功进入数据库。问题是,当我检查网页上的验证时,使用Larvael $ error验证可以正确显示错误,问题是出现错误时我的网页总是重定向回首页,而不是页面保持静止并显示错误。我必须继续向下滚动到联系表格所在的位置才能看到错误;这对我将来的用户来说很烦。如果出现错误,如何使页面保持原样?注意:当表单有效并提交时,我的页面可以正确重定向,这不是问题。注意2:我创建了一个单页网页,导航链接将您带到该网页,没有重定向。而是一个HTML页面。
Web.php
Route::get('/', 'HomeController@index')->name('home');
Route::post('/contact/submit', 'MessagesController@submit');
MessagesController.php
namespace App\Http\Controllers;
use App\Message;
use Illuminate\Http\Request;
class MessagesController extends Controller
{
public function submit(Request $request)
{
$validatedData = $request->validate([
'name' => 'required|min:2',
'email' => 'required|max:255',
'phonenumber' => 'required|min:10|max:10',
'message' => 'required|min:5',
]);
Message::create($validatedData);
return redirect('/')->with('success', 'Your message has been
successfully sent. We will reach out to you soon');
}
}
contact.blade.php
{{--CONTACT FORM--}}
<section id="contact">
<div class="container-fluid padding">
<div class="row text-center padding">
<div class="col-12">
<h2 class="lead display-3">Contact Us</h2>
<hr class="my-4">
<form action="/contact/submit" method="POST">
@csrf
<div class="field">
<label for="name" class="label">Name</label>
<div class="control">
<input type="text" class="input {{$errors->has('name') ? 'is-danger' : 'is-success'}}"
name="name" placeholder="Project Title" value="{{old('name')}}">
</div>
</div>
<div class="field">
<label for="name" class="label">Email</label>
<div class="control">
<input type="text" class="input {{$errors->has('email') ? 'is-danger' : 'is-success'}}"
name="email" placeholder="Project Title" value="{{old('email')}}">
</div>
</div>
<div class="field">
<label for="name" class="label">Phone Number</label>
<div class="control">
<input type="text"
class="input {{$errors->has('phonenumber') ? 'is-danger' : 'is-success'}}"
name="phonenumber" placeholder="Project Title" value="{{old('phonenumber')}}">
</div>
</div>
<div class="field">
<label for="message" class="label">Message</label>
<div class="control">
<textarea name="message"
class="textarea {{$errors->has('message') ? 'is-danger' : 'is-success'}}"
placeholder="Project description">{{old('message')}}</textarea>
</div>
</div>
<div class="field">
<div class="control">
<button type="submit" class="button is-link">Create Project</button>
</div>
</div>
<!--Errors variable used from form validation -->
@if($errors->any())
<div class="notification is-danger">
<ul>
@foreach($errors->all() as $error)
<li>{{$error}}</li>
@endforeach
</ul>
</div>
@endif
</form>
</div>
</div>
</div>
</section>
答案 0 :(得分:2)
首先,将错误移至表单顶部,以便您查看它们。
<?php
include 'DatabaseConfig.php';
$machine = mysqli_connect($HostName,$HostUser,$HostPass,$DatabaseName);
$nis = $_POST['nis'];
$namaDepan = $_POST['namaDepan'];
$namaBelakang = $_POST['namaBelakang'];
$tglLahir = $_POST['tglLahir'];
$tglGabung = $_POST['tglGabung'];
$alamat =' $_POST['alamat'];'
$statusIzin = 'dipondok';
$SQLQuery = "INSERT INTO `santri` (`nis`,`Nama_Depan`,`nama_belakang`,`tanggal_lahir`,`tanggal_bergabung`,`alamat`,`status_izin`) VALUES ('$nis','$namaDepan','$namaBelakang','$tglLahir','$tglGabung','$alamat','$statusIzin')";
if(mysqli_query($machine,$SQLQuery)){
echo 'Data Berhasil Disimpan';
}else{
echo 'try Again';
}
?>
处理验证的更好方法是使用表单请求将其分开。
<form action="/contact/submit" method="POST">
@csrf
@if($errors->any())
<div class="notification is-danger">
<ul>
@foreach($errors->all() as $error)
<li>{{$error}}</li>
@endforeach
</ul>
</div>
@endif
php artisan make:request SendMessageRequest
如果验证失败,将自动生成重定向响应,以将用户发送回其先前的位置。
现在更新您的控制器。
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class SendMessageRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|min:2',
'email' => 'required|max:255',
'phonenumber' => 'required|min:10|max:10',
'message' => 'required|min:5',
];
}
}
或者,您可以使用namespace App\Http\Controllers;
use App\Http\Requests\SendMessageRequest;
use App\Message;
class MessagesController extends Controller
{
public function submit(SendMessageRequest $request)
{
Message::create($request->validated());
return redirect('/')->with('success', 'Your message has been
successfully sent. We will reach out to you soon');
}
}
和Validator
重定向将验证保留在控制器中,但第一种方法是更好的方法。
back()
答案 1 :(得分:2)
您需要创建一个手动验证器,以便在验证失败时控制重定向(我认为这是您遇到的问题)。
public function submit(Request $request)
{
$validator = Validator::make($request->all(),[
'name' => 'required|min:2',
'email' => 'required|max:255',
'phonenumber' => 'required|min:10|max:10',
'message' => 'required|min:5',
]);
if ($validator->fails()) {
return redirect(url()->previous() .'#contact')
->withErrors($validator)
->withInput();
}
Message::create($request->all());
return redirect('/')->with('success', 'Your message has been
successfully sent. We will reach out to you soon');
}