array_map(): Аргумент #2 ($array) должен иметь тип array, заданный int

#laravel

Вопрос:

Я пытаюсь вставить данные в Laravel с помощью БД

код:

web.php

 <?php

use IlluminateSupportFacadesRoute;
use AppHttpControllersExamController;

Route::get('/', [ExamController::class, 'Index']);
Route::post('/exam-sub', [ExamController::class, 'Insertexam'])->name('sub')
 

welcome.blade.php

 <!DOCTYPE html>   
<html>
<head>
    <link rel="stylesheet" type="text/css" href="{{ URL::asset('css/test.css') }}" />
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-eOJMYsd53ii scO/bJGFsiCZc 5NDVN2yr8 0RDqr0Ql0h rP48ckxlpbzKgwra6" crossorigin="anonymous">
    <title>Quiz app</title> 
</head>

<body bgcolor="green">
    <form action="{{ route('sub') }}" method="post">
        @csrf 
        <div class="container mb-3">
            @if(Session::has('exam_submitted'))
                <div class="alert alert-success">
                    {{ Session::get('exam_submitted') }}
                </div>
            @endif

            <div class="form-outline">
                <label class="form-label" for="form3Example1">First name</label>
                <input type="text" id="form3Example1" class="form-control" name="first_name"/>
                @error('first_name')
                    <span class="text-danger">{{ $message }}</span>
                @enderror
            </div>

            <div class="form-outline">
                <label class="form-label" for="form3Example1">SEC NAME</label>
                <input type="text" id="form3Example1" class="form-control" name="sec_name"/>
                @error('sec_name')
                    <span class="text-danger">{{ $message }}</span>
                @enderror
            </div>  

            <div class="form-outline">
                <label class="form-label" for="form3Example1">EMAIL</label>
                <input type="text" id="form3Example1" class="form-control" name="email"/>
                @error('email')
                    <span class="text-danger">{{ $message }}</span>
                @enderror
            </div>  

            <div class="form-outline">
                <label class="form-label" for="form3Example1">PASSWORD</label>
                <input type="password" id="form3Example1" class="form-control" name="password"/>
                @error('password')
                    <span class="text-danger">{{ $message }}</span>
                @enderror
            </div>

            <h1 class="color-grey">test</h1>
            <hr style="width: 30%; font-weight: 700; height:3px; background-color:black;">

            <div class="form-outline">
                <label class="form-label" for="form3Example1">24x90</label>
                <input type="text" id="form3Example1" class="form-control" name="question1"/>
                @error('question-1')
                    <span class="text-danger">{{ $message }}</span>
                @enderror
            </div>

            <div class="form-outline">
                <label class="form-label" for="form3Example1">45x80</label>
                <input type="text" id="form3Example1" class="form-control" name="question2" />
                @error('question-2')
                    <span class="text-danger">{{ $message }}</span>
                @enderror
            </div>

            <div class="form-outline">
                <label class="form-label" for="form3Example1">100x10</label>
                <input type="text" id="form3Example1" class="form-control" name="question3"/>
                @error('question-3')
                    <span class="text-danger">{{ $message }}</span>
                @enderror
            </div>

            <div class="form-outline">
                <label class="form-label" for="form3Example1">10x10</label>
                <input type="text" id="form3Example1" class="form-control" name="question4"/>
                @error('question-4')
                    <span class="text-danger">{{ $message }}</span>
                @enderror
            </div>

            <br>
            <button class="btn btn-outline-primary btn-block btn-lg">Submit test</button>
        </div>
    </form>
       
    <div class="btn"></div>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/js/bootstrap.bundle.min.js" integrity="sha384-JEW9xMcG8R pH31jmWH6WWP0WintQrMb4s7ZOdauHnUtxwoG2vI5DkLtS3qm9Ekf" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.1/dist/umd/popper.min.js" integrity="sha384-SR1sx49pcuLnqZUnnPwx6FCym0wLsk5JZuNx2bPPENzswTNFaQU1RDvt3wT4gWFG" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/js/bootstrap.min.js" integrity="sha384-j0CNLUeiqtyaRmlzUHCPZ Gy5fQu0dQ6eZ/xAww941Ai1SxSY 0EQqNXNE6DZiVc" crossorigin="anonymous"></script>

</body>
</html>
 

Контролер экзамена

  <?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use IlluminateSupportFacadesDB;

class ExamController extends Controller
{
    public function Index() {
        return view('welcome');
    }

    public function Insertexam(Request $request) {
        $validatedata = $request->validate([
            'id' => mt_rand(1, 1000),
            'first_name' => 'required',
            'sec_name' => 'required',
            'email'=> 'required|email',
            'password' => 'required|min:8|max:24',
            'question-1' => 'required|int',
            'question-2' => 'required|int',
            'question-3' => 'required|int',
            'question-4' => 'required|int',
        ]);

        DB::table('exam')->insert([
            'Firstname' => $request->first_name,
            'Secondname' => $request->body,
            'email' => $request->email,
            'password' => $request->password,
            'question1' => $request->question1,
            'question2' => $request->question2,
            'question3' => $request->question3,
            'question4' => $request->question4,
        ]);

        return back()->with('exam_submitted','Exam submitted successfully contact you mr for the results good luck');
    }
}
 

Проблема в том, что при вставке данных это показывает следующее:
array_map(): Argument #2 ($array) must be of type array, int given

Ответ №1:

Проблема в том, что этот «идентификатор» = > mt_rand(1, 1000), попробуйте удалить его.

 $validatedata = $request->validate([
               'id' => mt_rand(1, 1000),
                'first_name'=> 'required',
                'sec_name'=>'required',
                'email'=> 'required|email',
                'password'         => 'required|min:8|max:24',
                'question-1' => 'required|int',
                'question-2' => 'required|int',
                'question-3' => 'required|int',
                'question-4' => 'required|int',
            ]);
 

Комментарии:

1. спасибо, я забыл, что это большая ошибка с моей стороны

2. объясните ему проблему, ваш ответ требует образовательного объяснения

3. @CoderMoataz — Проблема в том, что метод проверки принимает массив с правилами проверки, которые будут применены к входным параметрам из запроса. mt_rand(1,1000) не является правилом проверки. Пожалуйста, проверьте: laravel.com/docs/8.x/validation