повторное отображение echo и переменной испортит мою таблицу?

#php #mysql #database

#php #mysql #База данных

Вопрос:

Я хочу echo "<p>Average Mark: $average</p>"; , чтобы они отображались над таблицей, а не под таблицей. Если я сделаю это, проблема в том, что он не будет вычислять среднее значение, поскольку echo находится выше переменной. Но если я перемещу переменную и вместе с ней цикл while над всей таблицей (мне нужен цикл while для выбора $row[Mark]' поля из запроса, поскольку это поле, которое будет усредняться), это испортит структуру таблицы. Как я могу отобразить переменные $average, $total, $count etc и echo "<p>Average Mark: $average</p>"; над таблицей, не нарушая структуру таблицы?

Я пытался $("#record").html(<?php echo "Average Mark: $average"; ?>); , но я получаю эту ошибку в этой строке: Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный ‘(‘, ожидающий T_VARIABLE или ‘$’ в /web/stud/u0867587/Mobile_app/exam_grade_report.php в строке 135

Ниже приведен текущий код, и вы можете увидеть $count ; , $total = $row['Mark']; в цикле while и переменную $ average и echo внизу.

     <?php

        $result = mysql_query($query);
        mysql_close();

       $("#record").html(<?php echo "Average Mark: $average"; ?>);
     ?>
<div id="record">
    <table border='1'>
          <tr>
          <th>Session ID</th>
          <th>TeacherUsername</th>
          <th>Teacher Name</th>
          <th>Module Number</th>
          <th>Module Name</th>
          <th>Course ID</th>
          <th>Course Name</th>
          <th>Year</th>
          <th>Student Username</th>
          <th>Student Name</th>
          <th>Mark</th>
          <th>Grade</th>
          </tr>
          <?php
           $total = 0;
            $count = 0;
            while ($row = mysql_fetch_array($result)) {
            $count  ;
              $total  = $row['Mark'];
              echo "
          <tr>
          <td>{$row['SessionId']}</td>
          <td>{$row['TeacherUsername']}</td>
          <td>{$row['TeacherForename']} {$row['TeacherSurname']}</td>
          <td>{$row['ModuleId']}</td>
          <td>{$row['ModuleName']}</td>
          <td>{$row['CourseId']}</td>
          <td>{$row['CourseName']}</td>
          <td>{$row['Year']}</td>
          <td>{$row['StudentUsername']}</td>
          <td>{$row['StudentForename']} {$row['StudentSurname']}</td>
          <td>{$row['Mark']}</td>
          <td>{$row['Grade']}</td>
          </tr>";
            }
            ?>

            </table>
        </div>
        <?php
        $average = (int)($total/$count);
        echo "<p>Average Mark: $average</p>";
      ?>
  

Ответ №1:

Похоже, вы смешиваете javascript с php :

 <?php

    $result = mysql_query($query);
    mysql_close();

   $("#record").html(<?php echo "Average Mark: $average"; ?>); // what is this??
 ?>
  

Комментарии:

1. Кто-то сказал мне попробовать это, не знаю, что это значит

Ответ №2:

Если вы просто поместите нужный материал внутри <table> (или любого <tr> ), но вне любых <td> ячеек, он появится над таблицей.

Комментарии:

1. Я не думаю, что валидаторам W3C понравится такое решение.

2. Верно. Хорошо, я добавлю лучший ответ: p

Ответ №3:

Что вы можете сделать, так это определить заголовки таблиц внизу таблицы. Что-то вроде:

 <table>
    <tbody>
        <tr>
            <td>row1</td>
        </tr>
        <tr>
            <td>row2</td>
        </tr>
    </tbody>
     <thead>
        <tr>
            <th>Average: 20</th>
        </tr>
    </thead>
</table>
  

Ответ №4:

Добавляю еще один ответ, потому что у меня была идея получше моей старой.

Перед выводом таблицы поместите:

 <?php ob_start(create_function('$a','global $average; return "Average Mark: ".$average.$a;)); ?>
  

И после того, как таблица будет готова, и вы определили свою $average переменную:

 <?php ob_end_flush(); ?>