70508


タイトルの通りですが、laravelのindex.blade.phpファイル上で、csvファイルをアップロードすると、そのcsvファイルの中身の結果を集計して表示してくれるシステムが作りたいです。

同じ画面上で、ファイルアップロードした後に、ファイルの中身が空でなければファイルの結果を表示するにはどうしたらいいでしょうか？  
index画面の表示にはGETメソッドを使用し、ファイルアップロードにはPOSTメソッドを使用しております。

以下がコードです。

TotalizationController.php

[code]

    public function index(Request $request)
    {
       return view('totalization.index');
    }
    public function store(Request $request)
    {
       // setlocaleを設定
       setlocale(LC_ALL, 'ja_JP.UTF-8');
      // アップロードしたファイルを取得
       // 'csv_file' はCSVファイルインポート画面の inputタグのname属性
       $uploaded_file = $request->file('file');
    
       // アップロードしたファイルの絶対パスを取得
       $file_path = $request->file('file')->path($uploaded_file);
    
       // function csv_to_array($file_path) {
    
       $file = new \SplFileObject($file_path);
    
       $file->setFlags(\SplFileObject::READ_CSV);
    
       $row_count = 1;
    
       foreach ($file as $row)
       {
           // 1行目のヘッダーは取り込まない
           if ($row_count > 1)
           {
               //各値を取得する
               $id = mb_convert_encoding($row[0],"UTF-8", array("ASCII","JIS","UTF-8","EUC-JP","SJIS"));
    
               $question1 = mb_convert_encoding($row[6], "UTF-8", array("ASCII","JIS","UTF-8","EUC-JP","SJIS"));
    
               $answer1 = mb_convert_encoding($row[7],"UTF-8", array("ASCII","JIS","UTF-8","EUC-JP","SJIS"));
    
               $question2 = mb_convert_encoding($row[8], "UTF-8", array("ASCII","JIS","UTF-8","EUC-JP","SJIS"));
    
               $answer2 = mb_convert_encoding($row[9], "UTF-8", array("ASCII","JIS","UTF-8","EUC-JP","SJIS"));
    
               $question3 = mb_convert_encoding($row[10], "UTF-8", array("ASCII","JIS","UTF-8","EUC-JP","SJIS"));
    
               $answer3 = mb_convert_encoding($row[11], "UTF-8", array("ASCII","JIS","UTF-8","EUC-JP","SJIS"));
    
               $out_arr1[] = $answer1;
    
               $out_arr2[] = $answer2;
    
               $out_arr3[] = $answer3;
    
           }
           $row_count++;
       }
           $count1 = count($out_arr1);
    
           $values1 = array_count_values($out_arr1);
    
           $key1 = array_keys($out_arr1);
    
           $count2 = count($out_arr2);
    
           $values2 = array_count_values($out_arr2);
    
           $count3 = count($out_arr3);
    
           $values3 = array_count_values($out_arr3);
    
           return view('totalization.index')->with([
               "question1"=> $question1,
               "question2"=> $question2,
               "question3"=> $question3,
               "out_arr1" => $out_arr1,
               "out_arr2" => $out_arr2,
               "out_arr3" => $out_arr3,
               "count1"   => $count1,
               "count2"   => $count2,
               "count3"   => $count3,
               "values1"  => $values1,
               "values2"  => $values2,
               "values3"  => $values3,
           ]);
    }
    
[/code]

index.blade.php

[code]

    @if($_POST){
    result();
    }else{
    upload();
    }
    @endif
    <section id="upload">
        <div id="main-in">
            <div id="main-visual">
                <ul>
                    <li>①CSVファイルのアップロード</li>
                    <p>CSVファイルを選択してください</p>
                    {{ Form::open(['url' => url('csv-imports/csv'), 'method' => 'POST', 'class' => '', 'files' => true]) }}
                    <div class="form-group">
                        <input type="file" class="" name="file" value="">
                    </div>
                    <button type="submit">csv読み込み</button>
                    {{ Form::close() }}
                </ul>
            </div>
        </div>
    </sectuon>
    <section id= "result" class= "result">
        <div id="main-in">
            <div id="main-visual">
                <ul>
                    <li>②集計画面の表示</li>
                        @foreach($values1 as $v1)
                            <p>{{$v1}}</p>
                            <div class="progress">
                                <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="{{$count1}}" aria-valuemin="0" aria-valuemax="100" style="width: {{$count1}}%">
                                </div>
                            </div>
                        @endforeach
                        @foreach($values2 as $v2)
                            <p>{{$v2}}</p>
                            <div class="progress">
                                <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="{{$count2}}" aria-valuemin="0" aria-valuemax="100" style="width: {{$count2}}%">{{$v2}}
                                </div>
                            </div>
                        @endforeach
                        @foreach($values3 as $v3)
                            <p>{{$v3}}</p>
                            <div class="progress">
                                <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="{{$count2}}" aria-valuemin="0" aria-valuemax="100" style="width: {{$count2}}%">{{$v2}}
                            </div>
                            </div>
                        @endforeach
                    }
                </ul>
            </div>
        </div>
    </section>
    
[/code]

個人的には、index.blade.phpの、以下の部分に不足したところがあるのではないかと思いますが、どこが間違っているのかさっぱりわかりません。

[code]

    @if($_POST){
    result();
    }else{
    upload();
    }
    @endif
    
[/code]


CC BY-SA 4.0
2020-09-17T10:07:48.230
70493
2020-09-18T03:13:15.930
2020-09-17T15:50:41.183
3060
41667
question
php laravel
同じ画面上で、アップロードしたファイルの中身を表示する方法を知りたいです(laravel)


**参考までに、javascriptで、指定されたファイルをチェックする例を**

[code]

    let file1 = document.getElementById("file");
    file1.addEventListener('change', function(ev) {
        //26214400 25m
        let size = file1.files[0].size;
        if(size > 26214400){
            alert('２５Ｍ以下のファイルを指定して下さい。');
        }
    }, false);
    
[/code]


CC BY-SA 4.0
2020-09-18T03:13:15.930
70508
2020-09-18T03:13:15.930
22793
70493
answer