因此,当我应用 Laravel 内置验证时,它运行良好。但是当我应用 jquery 验证不起作用并给我一个错误“SQLSTATE[HY000]:一般错误:1364字段'profile_img'没有默认值”
**home.blade.php**
这是我的主页,其中包含用于创建学生详细信息的表单。
```
<div class="jumbotron">
<form name="form" id="frm" action="{{ url('/addStud') }}" method="POST" class="col-md-4 d-flex flex-column justify-content-center">
@csrf
<div class="form-group ">
<label for="name">NAME</label>
<input type="text" class="form-control" name="name">
<span class="text-danger">@error('name'){{$message}}@enderror</span>
</div>
<div class="form-group">
<label for="rollno">ROLL NO</label>
<input type="text" class="form-control" name="rollno">
<span class="text-danger">@error('rollno'){{$message}}@enderror</span>
</div>
<div class="form-group">
<label for="address">Email </label>
<input type="email" class="form-control" name="email">
<span class="text-danger">@error('email'){{$message}}@enderror</span>
</div>
<div class="form-group">
<label for="phone">PHONE NO</label>
<input type="tel" class="form-control" name="phoneno">
<span class="text-danger">@error('phoneno'){{$message}}@enderror</span>
</div>
<div class="form-group">
<label for="dob">DOB</label>
<input type="date" class="form-control" name="dob">
<span class="text-danger">@error('dob'){{$message}}@enderror</span>
</div>
<div class="form-group">
<label for="dob">COURSE</label>
<input type="text" class="form-control" name="course">
<span class="text-danger">@error('course'){{$message}}@enderror</span>
</div>
<div class="form-group mb-2">
<input type="file" class="form-control" name="profile_img">
<span class="text-danger">@error('profile_img'){{$message}}@enderror</span>
</div>
<div>
<button type="submit" class="btn btn-primary text-uppercase">create</button>
<a href="/list" class="btn btn-secondary text-uppercase">view list</a>
</div>
</form>
</div>
<!-- jquery validation before form submit -->
<script>
// $.validator.addMethod('filesize', function(value, element, param) {
// return this.optional(element) || (element.files[0].size <= param)
// });
$("form[name = 'form']").validate({
rules: {
name: {
required: true,
},
rollno: {
required: true,
},
email: {
required: true,
email: true,
},
phoneno: {
required: true,
digits: 10,
},
dob: {
required: true,
date: true
},
course: {
required: true,
},
profile_img: {
required: true,
extension: "png|jpg|PNG|JPEG",
filesize: 1048576,
},
},
messages: {
name: {
required: 'name is required',
},
rollno: {
required: 'roll no is required',
},
email: {
required: 'email is required',
},
phoneno: {
required: 'phone no is required',
},
dob: {
required: 'dob is required',
},
course: {
required: 'course is required',
},
profile_img: {
required: 'image is required',
},
}
})
</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.3/jquery.validate.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.3/dist/jquery.validate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.3/additional-methods.min.js"></script>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<!-- <script src="../js/validations.js"></script> -->
@endsection
这是我的控制器,我在其中评论了运行良好的内置 Laravel 验证。
**StudentController.php**
```
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Student;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
class StudentController extends Controller
{
// public function index()
// {
// return view('');
// }
public function create(Request $req)
{
$student = new Student;
$student->name = $req->name;
$student->rollno = $req->rollno;
$student->email = $req->email;
$student->phoneno = $req->phoneno;
$student->dob = $req->dob;
$student->course = $req->course;
// $student->profile_img = $req->profile_img;
if ($req->hasFile('profile_img')) {
$file = $req->file('profile_img');
$extension = $file->getClientOriginalExtension();
$filename = time() . '.' . $extension;
$file->move('uploads/students/', $filename);
$student->profile_img = $filename;
}
// $req->validate([
// 'name' => 'required|regex:/^[\p{L}\s-]+$/|max:255',
// 'rollno' => 'required',
// 'email' => 'required|email',
// 'phoneno' => 'required|digits:10',
// 'dob' => 'required',
// 'course' => 'required|string',
// // 'profile_img' => 'required|mimetypes:image/jpeg,image/png,image/bmp,image/svg',
// ]);
$student->save();
return redire`enter code here`ct('list');
}
```
答案 0 :(得分:1)
使用 HTML,您必须指定表单使用
发送文件到服务器enctype="multipart/form-data"
所以将其添加到您的标签中
您遇到的问题是因为您的文件已上传到输入中,因此 jQuery 验证它是否存在,但是当您将数据发送到服务器时,您的请求不包含该输入,因此它崩溃了
答案 1 :(得分:0)
profile_img
表中的此列名称更新您的列 by_default
null
那么你就不会得到这个错误。
我希望你得到你的解决方案。
答案 2 :(得分:0)
array:8 [▼
"_token" => "WyygV0eze9aCO2WQlZMVQyJsSxe6JwFUtSptF6IS"
"name" => "Tia"
"rollno" => "1234567"
"email" => "tia.tee123@gmail.com"
"phoneno" => "9854678955"
"dob" => "2021-07-16"
"course" => "BA English"
"profile_img" => Illuminate\Http\UploadedFile {#295 ▼
-test: false
-originalName: "ten.png"
-mimeType: "image/png"
-error: 0
#hashName: null
path: "C:\xampp\tmp"
filename: "php8E0D.tmp"
basename: "php8E0D.tmp"
pathname: "C:\xampp\tmp\php8E0D.tmp"
extension: "tmp"
realPath: false
writable: false
readable: false
executable: false
file: false
dir: false
link: false
}
所以在输入详细信息后,当我返回 dd($req->all()); 时我得到了这个;
但如果我不输入详细信息,则显示另一列不能为空