Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

me10071990's avatar

If condition is not working

I have many column and applied for file and image(featured) it's working but not for title and content

                    public function store(Request $request)
 {
    $this->validate($request, [

        'title' =>'required',
        'link'=>'required',
        'date_time'=>'required',
        'featured'=>'mimes:jpeg,pdf,docx,png:5000',
        'file'=>'mimes:jpeg,pdf,docx,png:5000',
        'content'=>'required',
        'category_id'=>'required',
    ]);

  
    $data = [

        //'link'=>$request->link,
        'title'=>$request->title,
        //'content'=>$request->content,
        'category_id'=>$request->category_id,
        'slug'=>str_slug($request->title),
        'date_time'=>Carbon::parse(strtotime($request->date_time))->format('Y-m-d'),
        ];

    if(request('link'))
    {
        $link=request('link');
        $data['link']=Post::create($data);
    }
    if(request('content'))
    {
        $link=request('content');
        $data['content']=Post::create($data);
    }

    if (request('featured'))
    {
        $featured = request('featured');
        $file_name = time() . $featured->getClientOriginalName();
        $featured->move('uploads/posts', $file_name);
        $data['featured'] = 'uploads/posts/'.$file_name;
    }
   
    if (request('file')) {
        $file = request('file');
        $file_name = time() . $file->getClientOriginalName();
        $file->move('uploads/posts', $file_name);
        $data['file'] = 'uploads/posts/'.$file_name;
    }
  
   $post = Post::create($data);
    Session::flash('success', 'New Blog has been Published on Website for Particular Menu');
    return redirect()->back();

}
0 likes
31 replies
Tray2's avatar

Not knowing what the hell you are doing in your code but if you want the file it's

if ($request->hasFile('photo')) {
    //
}

and you can access the file this way

$file = $request->file('photo');

$file = $request->photo;

exchange photo for the name you've given your file input-

slev1n's avatar

If condition works properly, you just make couple logical obvious mistakes:

// do like
if(request('link'))
{
    $data['link'] = $request->link;
}

// instead of
if(request('link'))
{
    $link=request('link');
    $data['link']=Post::create($data);
}

Same for your Content.

So your code will be like

public function store(Request $request)
{
    // Move your validate rules to Request class (php artisan make:request)
    $this->validate($request, [
        'title' => 'required',
        'link'  => 'required',
        'date_time' => 'required',
        'featured'  => 'mimes:jpeg,pdf,docx,png:5000',
        'file'      => 'mimes:jpeg,pdf,docx,png:5000',
        'content'   => 'required',
        'category_id'   => 'required',
    ]);

    // move your `create post` logic to Post model, for example
    $data = [
        'title' => $request->title,
        'slug'  => str_slug($request->title),
        'category_id'   => $request->category_id,
        'date_time' => Carbon::parse(strtotime($request->date_time))->format('Y-m-d'),
    ];
    
    if($request->has('link'))
        $data['link'] = $request->link;

    if($request->has('content'))
        $data['content'] = $request->content;
    
    if ($request->hasFile('featured')) {
        $featured = $request->file('featured');
        $file_name = time() . $featured->getClientOriginalName();
        $featured->move('uploads/posts', $file_name);
        $data['featured'] = 'uploads/posts/'.$file_name;
    }
       
    if ($request->hasFile('file')) {
        $file = $request->file('file');
        $file_name = time() . $file->getClientOriginalName();
        $file->move('uploads/posts', $file_name);
        $data['file'] = 'uploads/posts/'.$file_name;
    }
      
    Post::create($data);
    Session::flash('success', 'New Blog has been Published on Website for Particular Menu');
    
    return redirect()->back();
}

1 like
me10071990's avatar

@slev1n , it's still not doing same...still error

The link field is required. The content field is required.

me10071990's avatar

thanks I don't want to access the file , I just want to put the if condition for my link and for my content field column and for file and for image it's working

Tray2's avatar

Are you sure it passes the validation?

If it does not pass the validation it redirects and you if statement is never executed.

me10071990's avatar

Yes TRAY2 , then I got warning like

The link field is required. The content field is required.

Tray2's avatar

Then your request does not pass the validation rules.

Add a simple dd('Passed'); below the validation and if you don't see that message then your request does not pass validation. Or you can test by disabling the validation and see that you code is then executed.

me10071990's avatar

Thanks, Here is code for update

        public function update(Request $request, $id)
{
    $this->validate($request, [
        'title' => 'required',
        'content' => 'required',
        'category_id' => 'required',
        'link'=>'required',
        'date_time'=>'required'
    ]);

    $post = Post::find($id);


    if($request->has('link'))
    {
        $data['link']=$request->link;

    }
    if($request->has('content'))
    {
        $data['content']=$request->content;

    }
    if($request->hasFile('featured'))
    {
        $featured = $request->featured;
        $featured_new_name = time() . $featured->getClientOriginalName();
        $featured->move('uploads/posts', $featured_new_name);
        $post->featured = 'uploads/posts/'.$featured_new_name;

    }

    if($request->hasFile('file'))
    {
        $file = $request->file;
        $file_new = time() . $file->getClientOriginalName();
        $file->move('uploads/posts', $file_new);
        $post->file = 'uploads/posts/'.$file_new;

    }
    $post->link=$request->link;
    $post->date_time=$request->date_time;
    $post->content=$request->content;
    $post->title=$request->title;



    $post->category_id=$request->category_id;

    $post->save();

    Session::flash('success', 'Post updated successfully.');

    return redirect()->route('posts');

}
slev1n's avatar

@me10071990

public function update(Request $request, $id)
{
    // move validation to Request class
    $this->validate($request, [
        'title'    => ['required', 'string'],
        'link'     => ['required'],
        'content'        => ['required', 'string'],
        'category_id'    => ['required', 'integer'],
        'date_time'      => ['required']
    ]);

    $post = Post::findOrFail($id);

    // Will be nice move all model related logic to Post class, 
    // to keep your controller clear
    if($request->hasFile('featured'))
    {
        $featured = $request->featured;
        $featured_new_name = time() . $featured->getClientOriginalName();
        $featured->move('uploads/posts', $featured_new_name);
        $post->featured = 'uploads/posts/'.$featured_new_name;
    }
 
    if($request->hasFile('file'))
    {
        $file = $request->file;
        $file_new = time() . $file->getClientOriginalName();
        $file->move('uploads/posts', $file_new);
        $post->file = 'uploads/posts/'.$file_new;
    }

    $post->link = $request->link;
    $post->content = $request->content;
    $post->title = $request->title;
    $post->date_time = Carbon::parse(strtotime($request->date_time))->format('Y-m-d');
    $post->category_id = $request->category_id;

    $post->save();

    Session::flash('success', 'Post updated successfully.');

    return redirect()->route('posts');
}

You don't need If($request->has('something')) statements for required parameters. They will be in $request, otherwise your validation thrown exception!

Man, you can't understand your own code, it's not good..

@me10071990

upd:

    // return NotFound(404) if post not exists
    $post = Post::findOrFail($id);

    // Make right format before storing
    $post->date_time = Carbon::parse(strtotime($request->date_time))->format('Y-m-d');
slev1n's avatar

@me10071990

@tray2 right, be sure that your request pass all validation rules.

    // put this after $this->validate($request, [blah-blah]);
    dd($request);

Try to update some Post and browser must show you whole request object. If not, then your request does not pass rules.

AddWebContribution's avatar

You should try this:

public function store(Request $request)
 {
    $this->validate($request, [

        'title' =>'required',
        'link'=>'required',
        'date_time'=>'required',
        'featured'=>'mimes:jpeg,pdf,docx,png:5000',
        'file'=>'mimes:jpeg,pdf,docx,png:5000',
        'content'=>'required',
        'category_id'=>'required',
    ]);

  
    $data = [

        //'link'=>$request->link,
        'title'=>$request->title,
        //'content'=>$request->content,
        'category_id'=>$request->category_id,
        'slug'=>str_slug($request->title),
        'date_time'=>Carbon::parse(strtotime($request->date_time))->format('Y-m-d'),
        ];

    if($request->link)
    {
        $link=request('link');
        $data['link']=Post::create($data);
    }
    if($request->content)
    {
        $link=request('content');
        $data['content']=Post::create($data);
    }

    if ($request->featured)
    {
        $featured = request('featured');
        $file_name = time() . $featured->getClientOriginalName();
        $featured->move('uploads/posts', $file_name);
        $data['featured'] = 'uploads/posts/'.$file_name;
    }
   
    if ($request->hasFile('file')) {
        $file = $request->file('file');
        $file_name = time() . $file->getClientOriginalName();
        $file->move('uploads/posts', $file_name);
        $data['file'] = 'uploads/posts/'.$file_name;
    }
  
   $post = Post::create($data);
    Session::flash('success', 'New Blog has been Published on Website for Particular Menu');
    return redirect()->back();

}
me10071990's avatar

@tray2 , I passed like that you said and still it's message error

The link field is required. The content field is required.

Snapey's avatar

So you are not passing those fields in the request? Did you name your form fields?

Tray2's avatar

If you remove the validation does in give you an SQL error stating that link cannot be null?

me10071990's avatar

I tried with pass the value and also used dd($request), it passing the data like..

array:6 [ "token" => "eUe1FQ44CIxElhCjkDcoXVdJk9wcRaHckS2bcDXw" "category_id" => "5" "date_time" => "12/05/2019" "title" => "sd" "link" => null "content" => null ]

but when dd($request) not used it's said The link field is required. The content field is required.

Snapey's avatar

Well you've said they are required in your validation rules, but you are sending null

me10071990's avatar

@snapey , Yes , I have named from fields and I have passed the filed with request

me10071990's avatar

@snapey :) As, I did for my file and featured so implementing the same with link and content, however also tried with remove from validation rule, but same still

Snapey's avatar

What is your understanding of 'required '?

1 like
me10071990's avatar

Thanks... required to the form so it would not submit if the field is empty (that works in the browser)

Tray2's avatar

You have

$request->validate(['link' => 'required']);

in your controller that means that the field is required in your request and cannot be null.

You need to know what is serverside and what is client side.

<input type="text" required>

Tells the browser the field is required and then prevents the for from being submitted. This is all well and good but you do the same thing on the serverside and if it's null like you shown us it throws a validation error plain and simple.

If the field is nullable in the database remove the required from you validation rule if it is not allowed to be null make sure you submit all the needed fields from your form.

me10071990's avatar

@tray2 , I did and gone through it, and so that it's working for file and image coulumn not for file

Snapey's avatar

it's working for file and image coulumn not for file

?

me10071990's avatar

Sorry for my english @ , LOL, error code. make my brain uncode...Mean to say, For file column and for featured column IF() condition is working , but for another field it's not working

me10071990's avatar

@tray2 , I followed as you instructed , but nothing happend, here is my

database..

        public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->increments('id');

        /********
         *          @foreach($category->posts->sortByAsc('created_at')as $post)
         * opt_1 and opt2 is for name and date manualy create
         */
      
        $table->string('link')->default('');
        $table->text('title');
       
        $table->LONGTEXT('slug');
        $table->text('content')->nullable();
        $table->date('date_time');
        $table->unsignedInteger('category_id');


        // Optional Content

        $table->string('file')->nullable();
        $table->string('featured')->nullable();
    
        $table->softDeletes();
        $table->timestamps();

    });
}

then

    blade.php

                                                  <div class="modal-body">
                                        <form action="{{route('post.store')}}" method="post" enctype="multipart/form-data" class="form-bg1">
                                            {{csrf_field()}}
                                            <div class="form-body">
                                                <div class="row p-t-20">
                                                    <div class="form-group">
                                                        <input type="hidden"  name="category_id" id="category"  value="5">
                                                    </div>
                                                    <div class="col-md-6">
                                                        <div class="form-group">
                                                            <label class="control-label">Event Date</label>
                                                            <input type="text" name="date_time" class="form-control" placeholder="Select a date" id="mdate">
                                                            <small class="form-control-feedback"></small> </div>
                                                    </div>
                                                    <!--/span-->
                                                    <div class="col-md-6">
                                                        <div class="form-group">
                                                            <label class="control-label">Event Title </label>
                                                            <input type="text" name="title" class="form-control" placeholder="">
                                                            <small class="form-control-feedback"> </small>
                                                        </div>
                                                    </div>

                                                  
                                                    <div class="col-md-6">
                                                        <div class="form-group">
                                                            <label class="control-label">Form Link</label>
                                                            <input type="text" name=link class="form-control" placeholder="" id="mdate">
                                                            <small class="form-control-feedback"> </small>
                                                        </div>
                                                    </div>
                                                   <div class="row">
                                                <div class="col-lg-4 col-md-4">
                                                    <div class="card">
                                                        <div class="card-body">
                                                            <h4 class="card-title">Upload Doc/pdf file for Notice</h4>
                                                            <label for="input-file-now">Max file size 2 mb</label>
                                                            <input type="file" name="file" id="input-file-now" class="dropify" />
                                                        </div>
                                                    </div>
                                                </div>
                                                <div class="col-lg-4 col-md-4">
                                                    <div class="card">
                                                        <div class="card-body">
                                                            <h4 class="card-title">Upload Doc/pdf file for Form</h4>
                                                            <label for="input-file-now">Max file size 2 mb</label>
                                                            <input type="file"  name="featured" id="input-file-now" class="dropify" />
                                                        </div>
                                                    </div>
                                                </div>


                                                   <div class="modal-footer">
                                                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                                                <button type="submit" class="btn btn-success"><i class="fa fa-check"></i> Save</button>
                                            </div>
                                        </form>
Tray2's avatar
Tray2
Best Answer
Level 73

There are so many inconsistancies in your code so I don't even know where to begin.

  1. You have two columns in you migration file with the name title
 $table->text('title');
 $table->LONGTEXT('title');

Remove the second one.

  1. You have all capitals in your migration
$table->LONGTEXT('slug');

PHP is case sensitive so change to

$table->longText('slug');

  1. In your view you have missed quoting property values in several places among other
<input type="text" name=link class="form-control" placeholder="" id="mdate">

Change to

<input type="text" name="link" class="form-control" placeholder="" id="mdate">

So now if you want to validate the fields in your store method you need to do something like this

$request->validate([
    'title' => 'required',
    'date_time' => 'required|date'
    'category_id' => 'required|exits:categories',
    
]);

You will need to validate the other fields too except slug since you probably generates that from the title. Those fields should not have required rule.

The file you can use the 'mimes`validation for images it could look like this

'mimes:jpeg,bmp,png'

This is stuff you will learn by watching the free videos on this site.

All the conditions after you validation looks like gibberish to me and I have no clue of what you are trying to do.

Remove them and start over is my suggestion. Get a bare minimum to pass the validation and store it in the database.

Something like

public function store(Request $request)
{
    $request->validate([
        'title' => 'required',
        'date_time' => 'required|date'
        'category_id' => 'required|exits:categories',
    ]);

    $post = new Post();
    
    $post->title = $request->title;
    $post->date_time = $request->date_time;
    $post->category_id = $request->category_id;
    $post->slug = Str::slug($request->title);

    $post->save();
    
    return redirect('/posts')->with('status', 'Post saved!');
}

Then add field for field until you have everything in place.

2 likes
Next

Please or to participate in this conversation.