Отправка почты при значении SQL True

Так что, я вроде как в колее больше дня из-за этой проблемы. У меня есть PHP, в котором он вызывается Cron на заданную сумму. Он получает вызов и выполняет просто прекрасно без особых проблем, за исключением стиля. То, что он делает, это запросить базу данных на заданное время для значения, и если это правда, то он переходит по электронной почте, что в назначенное письмо, которое я поставил в сценарии. It’s doing it’s job but the problem is the format when the email gets delivered. Письмо выглядит так, когда я открываю его:

Изображение формата электронной почты

Проблема, как вы можете видеть, заключается в том, что только первая строка или строка форматируется в таблице, а остальные результаты не следуют за ней.

Вот текущий сценарий, который я использую с некоторыми опущенными / измененными деталями.

#!/path/to/php
<?php
//DB
$dbconnect=new mysqli('localhost', 'user', 'pass', 'db');
$result=$dbconnect->query("SELECT `uid`,`pid`,`pdesc`,`umail`,`name` FROM `db_table` WHERE `pid`<='6'");
//if there are any records matching this query send an email listing each one using 'uid' as the identifier
if($result->num_rows>=1) {
$to = 'test@test.com';
$subject = "TEST FOR PRIZES NOTIFICATION";

$headers = 'From: sender@test.com' . "rn" .
$headers = "MIME-Version: 1.0" . "rn" .
$headers = "Content-type:text/html;charset=iso-8859-1" . "rn" .
        'Reply-To: rep@test.com' . "rn" .
       'X-Mailer: PHP/' . phpversion();

$message = '<html><body>';
$message .= 'THIS IS A TEST!';
$message .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
$message .= '<tr>
            <td>User ID</td>
            <td>Display Name</td>
            <td>Email</td>
            <td>Price</td>
    <td>Price Description</td></tr>';
while($row=$result->fetch_assoc()) {
  $message .= "<tr><td>".$row['uid']."</td>";
  $message .= "<td>".$row['name']."</td>";
  $message .= "<td>".$row['umail']."</td>";
  $message .= "<td>".$row['pid']."</td>";
  $message .= "<td>".$row['pdesc']."</td></tr>";
  $message .= "</table>";
  $message .= "</body></html>";
}
if(mail($to, $subject, $message, $headers)) {
  //mail successfully sent
} else {
  //mail unsuccessful
}
}
?>

Спасибо за ваше время!

1 ответ

  1. Вы закрываете таблицу внутри цикла, поэтому она закрывается после первой записи. Измените код:

    while($row=$result->fetch_assoc()) {
      $message .= "<tr><td>".$row['uid']."</td>";
      $message .= "<td>".$row['name']."</td>";
      $message .= "<td>".$row['umail']."</td>";
      $message .= "<td>".$row['pid']."</td>";
      $message .= "<td>".$row['pdesc']."</td></tr>";
      $message .= "</table>";
      $message .= "</body></html>";
    }
    

    до настоящего времени:

    while($row=$result->fetch_assoc()) {
      $message .= "<tr><td>".$row['uid']."</td>";
      $message .= "<td>".$row['name']."</td>";
      $message .= "<td>".$row['umail']."</td>";
      $message .= "<td>".$row['pid']."</td>";
      $message .= "<td>".$row['pdesc']."</td></tr>";
    }
    $message .= "</table>";
    $message .= "</body></html>";
    

    закрыть стол в конце.