我正在尝试解决由前员工构建的100%无法正常运行的网络应用。我对PHP有一个新手的理解。
这是一个相对简单的应用程序,显示过去的考试文件,但是被锁定为公众。它在大多数情况下都能正常工作,除了样本答案文件发生的奇怪事情。并非每个考试都有一个示例答案文件。那些没有的人应该是空白的。然而,正在发生的是,一些没有相应答案文件的考试文件正在显示其他考试的考试文件按钮。
从这张图片中可以看出,1997年春季的第一次考试显示了一个空白的样本答案,这是正确的。接下来的三个考试也是正确的,因为他们正在显示正确的答案文件,但是,最后三个考试实际上并没有数据库中的示例答案文件,而是显示2004春季的示例答案,就像他们重复最后一个文件具有特定顺序的名称。
我认为正在发生的事情是,如果没有相应的答案文件,代码中没有任何内容专门用来表示空格,但我不知道是否确实如此。这是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 :(得分:2)
您的问题存在于此处:
foreach($exam->files as $file) {
if($file->type == 'a') {
$answers = $file->filename;
}
else{
$examf = $file->filename;
}
}
这包含在foreach
循环中,因此每次考试都会运行。如果考试类型为&#34; a&#34;,$answers
变量将被设置,但如果未设置,则没有任何内容可以清除它。建议在循环之前将其初始化为null
:
$answers = null;
$examf = null;
foreach($exam->files as $file) {
if($file->type == 'a') {
$answers = $file->filename;
}
else{
$examf = $file->filename;
}
}
编辑:正如@ mopo922所指出的那样,你需要对我在上面添加的$examf
做同样的事情。