0

I'm working with Forms on Laravel, and I'm still learning. I thought I had it all figured out already, but I've been alted by an issue:

When I have enctype="multipart/form-data", I can't get the input values. The file I upload still gets uploaded to the disk, but the rest of the values are not printed. If I remove enctype="multipart/form-data", I do get the values.

Form:

<form id="forms" method="POST" action="alteracaocomissao" enctype="multipart/form-data">

  {{ csrf_field() }}

  <div class="form-row">
    <div class="form-group col-md-6">
      <label for="nomeentidade">Nome:</label>
      <input type="text" class="form-control" id="nome1" name="nome1" placeholder="Nome entidade" required>

    </div>
    <div class="form-group col-md-6">
      <label for="numentidade">Nº:</label>
      <input type="text" class="form-control" id="num1" name="num1" placeholder="Número" required>
    </div>
  </div>

  <div class="form-row">
    <div class="form-group col-md-6 mb-3">
<label for="conta">Conta:</label>
      <input type="text" class="form-control" id="conta" name="conta" placeholder="Conta" required>
    </div>

    <div class="form-group col-md-3 mb-3">
        <label for="balcao">Local:</label>
            <select class="form-control" id="local1" name="local1" required>
    <option value="">Escolher...</option>
    <option value="1">Local</option>
    <option value="2">Local1</option>
            </select>
    </div>

    <div class="form-group col-md-3 mb-3">
      <label for="atleracao">Tipo de alteração:</label>
        <select class="form-control" id="alteracao" name="alteracao" required>
    <option value="">Escolher...</option>
    <option value="1">Alterar1</option>
    <option value="2">Alterar2</option>
        </select>
    </div>
  </div>

    <hr>

  <div class="form-row" id="buildyourform">
    <div class="form-group col-md-4">
      <label for="comissao">TEST:</label>
      <select class="form-control" id="TEST1" name="TEST1" required>
        <option value="">Escolher...</option>
        <option value="1">TEST</option>
        <option value="2">TEST1</option>
            </select>
    </div>

    <div class="form-group col-md-2">
      <label for="desconto">Desconto solicitado:</label>
      <div class="input-group">
      <input type="text" class="form-control" id="desconto" name="desconto" placeholder="Número" required>
      <span class=input-group-addon>%</span>
    </div>
    </div>

        <div class="form-group col-md-2">
    <label for="add"> &nbsp </label>
    <input type="button" value="Adicionar campos" class="form-control btn btn-light" id="add" />
    </div>

    <div class="form-group col-md-1" id="2field">
      <label for="remove"> &nbsp </label>
      <input type="button" value="Remover" class="form-control btn btn-light" id="remove" />
    </div>

    <div class="form-group col-md-2">
    </div>
  </div>

  <hr>

  <div class="form-row">

    <div class="form-group col-md-12">
      <label for="fundamentacao">Fundamentação:</label>
      <textarea type="text" class="form-control" id="fundamentacao" name="fundamentacao" placeholder="Fundamentação do pedido" required></textarea>
    </div>

  </div>

  <div class="form-row">
    <div class="form-group col-md-2">
        <label for="file2">Anexo:</label>
            <input type="file" name="file2" id="file2" required>

    </div>
  </div>

  <hr>

  <button type="submit" class="btn btn-primary">Enviar</button>
</form>

Controller:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{

    public function AltComiss(Request $request)
    {
        session_start();

        $array1 = $request -> all();
        $path = $request->file('file2')->store('altComiss');

        $arrayRm1 = array_shift($array1);

        $_SESSION["testPostSection1"] = $array1;   

        return redirect('alteracaocomissao');

    }
}

Route:

Route::post('alteracaocomissao', 'PostController@AltComiss');

Testing code:

@php

session_start();

  if (isset($_SESSION["testPostSection1"])) {

    echo '<pre>'; print_r($_SESSION["testPostSection1"]); echo '</pre>';

  }

@endphp

I do have SESSION there to test if the values are getting saved, because I still havn't set up the database, and until I do I'm using SESSION to test. Obviously once I set the database up I will switch from SESSION to inserting the values into the database.

Thanks in advance!

3
  • I think if you try application/x-www-form-urlencoded instead for your enctype, it might work. i vaguely recall reading about this a while ago. Commented Nov 8, 2018 at 10:56
  • 2
    @noid — That's the default, so is what they were using when they removed the enctype attribute. The form includes an input with type=file. That is incompatible with application/x-www-form-urlencoded Commented Nov 8, 2018 at 11:03
  • Yes, as mentioned, I did use the default and I was getting the data saved and shown in the SESSION. But doing that, I do not get the uploaded file. While if I change to multipart, I do get the file but I don't get the SESSION data. Commented Nov 8, 2018 at 11:10

1 Answer 1

1

I think it's will help you

use Illuminate\Http\Request;

//use these For Start your session and Store file 
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Storage;


class PostController extends Controller{
   public function AltComiss(Request $request){
     $array1 = $request->all();

     if ($request->hasFile('file2')) {
        $file = $request->file('file2');
        $destinationPath = 'altComiss';
        $file->move($destinationPath,$file->getClientOriginalName());
     }

     $arrayRm1 = array_shift($array1);

     Session::flash('allInput',$arrayRm1);
     return redirect('alteracaocomissao');
  }

}

On your view file for get the session data just use

@if (Session::has('allInput'))
    <?php 
      echo '<pre>';
          print_r(Session::get('allInput'));
      echo '</pre>';
    ?>
@endif
Sign up to request clarification or add additional context in comments.

11 Comments

This reads more like a game of spot-the-difference than an answer. What did you change? Why should it solve the problem?
I do see a couple of things there that I was also trying to accomplish. Thanks, I'm sure this will help. While testing I did get an error here "$file->move($destinationPath,$file->getClientOriginalName(););", I removed the ";" after OriginalName and the error was removed. The thing is, the files are not being saved, and I'm not getting the session data either.(its my first time using session flash, should I also echo $_SESSION['allInput']? I did do it and still not data)
I changed the "move" on that line that I was getting an error to "storeAs", and now I do get the file saved(which is great). But still, not SESSION data tho, so the problem remains unfortunatly
I have just updated my code . Please let me know whats happend now. Please create a folder on your project root "altComiss" for store your file
Your answer did help me get to the right path, altho it was conceived more in the comments. I will accept, and hopefully if someone looks for this they will check the comments. I still have to figure out how to make sure I get the data from all inputs the user might add, but I'll figure that one out. Thanks again! Cheers
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.