jquery 验证不适用于我的 Laravel 项目

时间:2021-07-02 11:02:00

标签: jquery laravel

因此,当我应用 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');
    }


```

3 个答案:

答案 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()); 时我得到了这个;

但如果我不输入详细信息,则显示另一列不能为空

相关问题