Покажите немного html, если mysqli_fetch_asso c пусто, в то время как l oop php - PullRequest
1 голос
/ 01 марта 2020

Я использую while loop для извлечения данных из базы данных, которую я хочу отобразить, как будто ничего не найдено, результат равен нулю или пуст. Я пытался использовать if/else с таким: if (empty($jobs)) echo 'nothing found';, который не работает. if(!mysqli_fetch_assoc($jobs)) работает, но если не показывает работу, если доступно.

L oop

  <?php while ($job = mysqli_fetch_assoc($jobs)) { ?>
  <tr class="custom-table-body-titles">
    <td><?php echo h($job['updated_at']); ?></td>
    <td>
      <a href="#" class="text-dark"><?php echo h($job['title']); ?></a>
    </td>                
    <td>0/<?php echo h($job['required_freelancers']); ?></td>
    <td><?php echo h($job['delivery_time']); ?> Days</td>
    <td>$<?php echo h($job['budget']); ?></td>
    <td>
      <a href="job_details.html" class="btn btn-sm btn-primary">Apply</a>
    </td>
  </tr>
  <?php } ?>

Ответы [ 3 ]

1 голос
/ 01 марта 2020

Вы должны хранить PHP и HTML как можно дальше друг от друга.

Вы можете извлечь все результаты в массив до и затем выполнить foreach для этого массива.

$jobs = $jobs->fetch_all(MYSQLI_ASSOC);

if($jobs) {
    foreach ($jobs as $job) {
    }
} else { 
}
1 голос
/ 01 марта 2020

Хороший вопрос, на который, к сожалению, большую часть времени отвечают неверно.

Смешивать код, связанный с базой данных, и код HTML - очень плохая практика. Никогда не должно быть l oop, как это.

Вместо этого данные должны выбираться в массив,

$jobs = [];
while ($row = mysqli_fetch_assoc($jobs)) {
    $jobs[] = $row;
}

, который затем используется для вывода данных. И когда у вас есть этот массив, вы можете использовать его, чтобы узнать, вернул ли запрос какие-либо данные:

<?php if ($jobs) { ?>
  <?php foreach ($jobs as $job) { ?>
  <tr class="custom-table-body-titles">
    <td><?php echo h($job['updated_at']); ?></td>
    <td>
      <a href="#" class="text-dark"><?php echo h($job['title']); ?></a>
    </td>                
    <td>0/<?php echo h($job['required_freelancers']); ?></td>
    <td><?php echo h($job['delivery_time']); ?> Days</td>
    <td>$<?php echo h($job['budget']); ?></td>
    <td>
      <a href="job_details.html" class="btn btn-sm btn-primary">Apply</a>
    </td>
  </tr>
  <?php } ?>
<?php } else {?>
    no data
<?php } ?>
1 голос
/ 01 марта 2020

Вы должны выполнить проверку, чтобы проверить, были ли найдены какие-либо результаты, прежде чем даже запустить l oop. Предполагая, что $jobs является экземпляром mysqli_result, возвращаемым mysqli_query().

if (mysqli_num_rows($jobs) > 0)
{
    // your while loop
}
else
{
    echo "no jobs found";
}
...