2016-12-02 9 views
1

元従業員が作成した100%正しく機能していないWebアプリケーションのトラブルシューティングを試みています。私はPHPの初心者の理解があります。Laravel web appが間違ったデータベースエントリを表示しています

これは過去の試験ファイルを表示するが、公開されている比較的シンプルなアプリケーションです。サンプルの応答ファイルで起こっている奇妙なことを除いて、ほとんどの部分が正しく機能しています。すべての試験にサンプルの回答ファイルがあるわけではありません。 1つもないものは空白にしてください。しかし、何が起こっているのは、対応する回答ファイルを持たない試験ファイルの中には、他の試験のための試験ファイル用のボタンが表示されていることです。

enter image description here

あなたは1997年春からの最初の試験は正しいサンプルの回答のために空白が表示されていることを、この画像から見ることができます。次の3回の試験でも正しい回答ファイルが表示されているという点で正しいですが、最後の3回の試験では実際にデータベースにサンプル回答ファイルがありませんが、最後のファイルを繰り返すような春のサンプル回答が表示されます特定の順序である名前。

私が考えているのは、対応する応答ファイルがない場合、空白領域をレンダリングするコードには特に何も言われていませんが、実際にそうであるかどうかはわかりません。これはindex.blade.phpのコードです:

<div class="row"> 

<h4>Browse past exams</h4> 
<form class="form-inline"> 
<div class="form-group"> 
    <label class="col-sm-2">Course</label> 
    <div class="col-sm-4"> 
     {{ Form::select('course', $courses, Input::get('course', ''), array('class' => 'form-control')) }} 
    </div> 
</div> 


<div class="form-group"> 
    <label class="col-sm-2">Faculty</label> 
    <div class="col-sm-4"> 
     {{ Form::select('faculty', $faculties, Input::get('faculty', ''), array('class' => 'form-control')) }} 
    </div> 
    </div> 


<div class="form-group"> 
    <div class="col-sm-4"> 
     {{ Form::submit('Submit', array('class' => 'btn btn-primary')) }} 
    </div> 
</div> 
{{ Form::close() }} 
</form> 
    @if(PastExamsPublicController::isAdmin()) 
    <div class="col-md-10 col-md-offset-1" style="margin-top: 25px; margin-bottom: 25px;"> 
     <div class="btn-group" role="group"> 
      <a href="{{ route('past-exams.utlaw.admin.exams.create') }}" class="btn btn-primary"> 
       Add exam 
      </a> 

      <a href="{{ route('past-exams.utlaw.admin.faculty.index') }}" class="btn btn-primary"> 
       Manage faculty 
      </a> 
      <a href="{{ route('past-exams.utlaw.admin.course.index') }}" class="btn btn-primary"> 
       Manage courses 
      </a> 
     </div> 
    </div> 
@endif 

<hr> 
</div> 


<div class="row"> 
<div class="col-md-10 col-md-offset-1 col-xs-12"> 
    <table class="table table-hover" id="past-exams-table" class="sort"> 
     <thead> 
     <tr> 
      <th class='sort-default'>Course</th> 
      <th>Session/year</th> 
      <th>Faculty</th> 
      <th class='no-sort'>Exam</th> 
      <th class='no-sort'>Sample Answers</th> 
     </tr> 
     </thead> 

     <tbody> 
     @foreach($exams as $exam) 
      <tr> 
       <td>{{ $exam->course->name }}</td> 
       <td data-sort="{{ $exam->year . $exam->session->name }}" > 
        {{ $exam->session->name . '/' . $exam->year }} 
       </td> 
       <td>{{ $exam->faculty->last_name . ', ' . $exam->faculty->first_name }}</td> 

       <?php 
       foreach($exam->files as $file) { 
        if($file->type == 'a') { 
         $answers = $file->filename; 
        } 
        else{ 
         $examf = $file->filename; 
        } 
       } 
       ?> 

       <td> 
        <a href="{{ asset('files/' . $examf) }}" class="btn btn-warning"> 
         <span class="glyphicon glyphicon-download" aria-hidden="true"></span> Exam 
        </a> 
       </td> 
       <td> 
        @if(isset($answers)) 
         <a href="{{ asset('files/' . $answers) }}" class="btn btn-primary"> 
          <span class="glyphicon glyphicon-download" aria-hidden="true"></span> Sample Answers 
         </a> 
        @endif 
       </td> 
      </tr> 
     @endforeach 
     </tbody> 

    </table> 
</div> 
</div> 

エラーの起源を私に指摘してくれてありがとうございます。

+0

画像に説明を追加する必要がありますが、画像の説明を入力するには、アプリのスクリーンショットへのリンクが必要です。 – deebs

答えて

2

あなたの問題がここに存在します:

foreach($exam->files as $file) { 
    if($file->type == 'a') { 
     $answers = $file->filename; 
    } 
    else{ 
     $examf = $file->filename; 
    } 
} 

これがそのように、各試験のために実行しますforeachループ内に収容されています。検査タイプが「a」の場合、$answers変数が設定されますが、設定されていない場合は、検査タイプをクリアするものはありません。ループの前にnullにそれを初期化勧め:

$answers = null; 
$examf = null; 
foreach($exam->files as $file) { 
    if($file->type == 'a') { 
     $answers = $file->filename; 
    } 
    else{ 
     $examf = $file->filename; 
    } 
} 

EDITを:@ mopo922で指摘したように、あなたは私が上記の追加$examf、と同じことを行うことになるでしょう。

+1

おそらく '$ examf'でも同じことをします。私は、一般的に「foreach」が好きではありません。おそらく、その目的を達成するためのより良い方法があります。 – mopo922

+0

ジェレミーとMopo922、うまくいった!ありがとうsoooo! – deebs

関連する問題