0

I have a distance education site developed with Laravel. It gives an error when filtering some pages. For example, when you click Library -> Homework Library on the student screen, the page opens. However, when I filter Select teacher on the page, it gives an error. Error code "ErrorException Undefined variable: videos ". Controller page is attached. I will be glad if you can help. Displays first error in line 49

<?php

namespace App\Http\Controllers;

use App\Classes;
use App\Gains;
use App\SylllabussFiles;
use App\Task;
use App\TaskFiles;
use App\User;
use Illuminate\Http\Request;
use App\Lesson;

class LessonController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        if($request->get('name')!=''){
        $lessons = New Lesson;
        if($request->get('name')!=''){
            $lessons = $lessons->where('name','LIKE','%'.$request->get('name').'%');
        }
        $lessons=$lessons->get();
        }else{
            $lessons = Lesson::orderBy('name', 'asc')->paginate(25);
        }
        $lessoncount=$lessons->count();

            return view('lesson.index', compact(['lessons','lessoncount']));
    }

    public function library(Request $request)
    {
        if($request->get('type')==1){
            $videos = New SylllabussFiles;
        }elseif($request->get('type')==2){
            $videos = New TaskFiles;
        }  
        if ($request->get('date') != '' || $request->get('lesson_id') != '' || $request->get('classes_id') != ''|| $request->get('teacher_id') != '') { 
            if ($request->get('date') != '') {
                $videos = $videos->where('start_date', 'LIKE', '%' . $request->get('date') . '%');
            }
            if ($request->get('teacher_id') != '') {
                $videos = $videos->where('teacher_id', $request->get('teacher_id'));
            }

            $videos = $videos->get();
        } else {
            if($request->get('type')==1){
                $videos =SylllabussFiles::orderBy('id', 'desc')->get();
            }elseif($request->get('type')==2) {
                $videos = TaskFiles::orderBy('id', 'desc')->get();
            }
        }
        $lessoncount=$videos->count();
        $teacher = User::where('type', 1)->orderBy('name', 'asc')->pluck('name', 'id');

        return view('lesson.library', compact(['videos','lessoncount','teacher']));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
           return view('lesson.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $create = Lesson::create($request->all());
        if ($create) {
                notify()->success('İşleminiz başarıyla gerçekleşti','Kayıt Başarılı');
                return redirect()->route('lesson.index');

            } else {
                notify()->error('Maalesef Hata Oluştu','Kayıt Başarısız');
                return redirect()->back();
            }
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        return view('lesson.import');
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
       $lesson = Lesson::find($id);
        return view('lesson.edit', compact(['lesson']));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
       $update = Lesson::find($id)->update($request->all());
            if ($update) {
                notify()->success('İşleminiz başarıyla gerçekleşti','Kayıt Düzenlendi');
                return redirect()->route('lesson.index');
            } else {
                notify()->error('Maalesef Hata Oluştu','Düzenleme Başarısız');
                return redirect()->back();
            }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
         $delete = Lesson::find($id)->delete();
            if ($delete) {
                notify()->success('İşleminiz başarıyla gerçekleşti','Kayıt Silindi');
            } else {
                notify()->error('Maalesef Hata Oluştu','Silme Başarısız');
            }
            return redirect()->route('lesson.index');
    }
    function getIdByPoints(Request $request){
        $id=$request->get("id");
        $names = Lesson::where('id',$id)->first();
        return $names->point;
    }
}

Cuma Abak
  • 11
  • 1

1 Answers1

1

You have the following code in your library function:

if($request->get('type')==1){
    $videos = New SylllabussFiles;
}elseif($request->get('type')==2){
    $videos = New TaskFiles;
} 

There is no else statement, therefore, if the type is different than 1 and 2, $videos will never be set.

So, when it reaches this part:

$videos = $videos->where('start_date', 'LIKE', '%' . $request->get('date') . '%');

$videos has not been set.

What I suggest to you is to set an else statement and put something 'empty' in $videos or set it $videos = null; and check for nulls later on the code. Something like this:

if ($request->get('type')==1) {
    $videos = New SylllabussFiles;
} else if($request->get('type')==2) {
    $videos = New TaskFiles;
} else {
    $videos = null;
}

And then, check for null:

if ($request->get('date') != '' || $request->get('lesson_id') != '' || $request->get('classes_id') != ''|| $request->get('teacher_id') != '') { 

    if ($videos !== null) {

        if ($request->get('date') != '') {
            $videos = $videos->where('start_date', 'LIKE', '%' . $request->get('date') . '%');
        }
        if ($request->get('teacher_id') != '') {
            $videos = $videos->where('teacher_id', $request->get('teacher_id'));
        }

        $videos = $videos->get();
    }
} else {
    //else stuff
}

Another thing you can do is to set $videos = [];. This way you can even count it and/or use it in a foreach in your blade template.

Laerte
  • 7,013
  • 3
  • 32
  • 50
  • 1
    if($request->get('type')==1){ $videos = New SylllabussFiles; }elseif($request->get('type')==2){ $videos = New TaskFiles; } else{$videos = null; } like this? – Cuma Abak Dec 14 '20 at 21:19
  • Yes, exactly like this! But be aware that you have to check for null after that. I'll edit the post with a dummy code for that. – Laerte Dec 15 '20 at 12:58