Скрыть пустую строку в электронном отчете

Мне нужна помощь с этим кодом. Код и стиль javascript в теге заголовка используются для скрытия пустой строки, потому что не все строки содержат данные, и это работает при отображении на моей веб-странице. Но когда я использую его для отправки отчета на Адрес электронной почты в качестве отчета, отображается пустая строка. Есть ли что-то, что мне нужно учитывать, чтобы скрыть пустые строки в электронная почта получателя. Ниже приведен код:

enter$sql = mysqli_query($con_path, "SELECT * FROM classscore WHERE emailsent=0 LIMIT 20");
$numRows = mysqli_num_rows($sql); 
$mail_body = '';
while($row = mysqli_fetch_array($sql)){
$studentid = $row['student_id'];
$classname = $row['class_name'];
$english  =  $row['english'];
$maths = $row['maths'];
$accounts = $row['accounts'];
$music = $row['music'];
$email = $row['email'];

$mail_body = '<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
<title>Report</title>
<style>
.hide { 
display: none; 
}
</style>
</head>

 <body>
 <table id = "table" width = "40%" border = "1" align = "center" cellpadding = "0" cellspacing = "0" style = "border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px; color:#000;">
<tr>
<td width = "23%">Student ID</td>
<td>&nbsp;</td>
<td> '.$studentid.' / '.$classname.'</td>
</tr>
<tr>
<td><strong>Subjects</strong></td>
<td width = "21%"><strong>Overall Score</strong></td>
<td width = "56%"><strong>Actual Score</strong></td>
</tr>
<tr>
<td>English</td>
<td>100</td>
<td> '.$english.'</td>
</tr>
<tr>
<td>Maths</td>
<td>100</td>
<td>'.$maths.'</td>
</tr>
<tr>
<td>Account</td>
<td>100</td>
<td> '.$accounts.'</td>
</tr>
<tr>
<td>Music</td>
<td>100</td>
<td> '.$music.'</td>
</tr>
</table>
<p>&nbsp; </p>
<script language = "javascript">
var tbl = document.getElementById("table");
var rows = tbl.querySelectorAll("tbody tr");

for(i = 0; i < rows.length; i++) {

var cells = rows[i].querySelectorAll("td");

var flag = true;
//this number controls the colunm the code will check before it disappears.
for(j = 2; j < cells.length; j++) {
    if (cells[j].innerHTML != 0) { 
        flag = false; 
    }
}


if (flag) { 
    rows[i].classList.add("hide"); 
}
}                                      
</script>
</body>
</html>';
$subject = "Report";
$headers = 'MIME-Version: 1.0';
$headers  = "From:[email protected]\r\n";
$headers .= "Content-type: text/html\r\n";
$to = "$email";

$mail_result = mail($to, $subject, $mail_body, $headers);

if ($mail_result) {
    mysqli_query($con_path, "UPDATE classscore SET emailsent=1 WHERE email='$email' LIMIT 1");
} else {

}

}

?>
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
</head>
<?php echo $mail_body; ?>
<body>
</body>
</html>

DROP TABLE IF EXISTS classscore ;
CREATE TABLE classscore
(student_id INTEGER (11) NULL,
email varchar(255),
class_name varchar(255),
english INTEGER (11) NULL,
maths INTEGER (11) NULL,
accounts INTEGER (11) NULL,
music INTEGER (11) NULL,
emailsent varchar(255) DEFAULT '0'
);

INSERT INTO classscore
(student_id,email,class_name,english,maths,accounts,music) VALUES
(10011,'[email protected]','Basic1','70','80','75',''),
(10012,'[email protected]','Basic1','55','','','69'),
(10013,'[email protected]','Basic1','74','75','','85'),
(10014,'[email protected]','Basic1','64','84','58',''),
(10015,'[email protected]','Basic1','69','','65','73'),
(10016,'[email protected]','Basic1','70','80','74','68'),
(10017,'[email protected]','Basic1','75','82','','');

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

 $mail_body = '<html xmlns = "http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
 <title>Report</title>
 <style>
  .hide { 
     display: none; 
   }
  </style>
 </head>

 <body>
   <table id = "table" width = "40%" border = "1" align = "center" cellpadding = "0" cellspacing = "0" style = "border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px; color:#000;">
  <tr>
     <td width = "23%">Student ID</td>
     <td>&nbsp;</td>
     <td> '.$studentid.' / '.$classname.'</td>
  </tr>
  <tr>
     <td><strong>Subjects</strong></td>
     <td width = "21%"><strong>Overall Score</strong></td>
     <td width = "56%"><strong>Actual Score</strong></td>
  </tr>';

  if ($english!=0){

  $mail_body.='<tr>
     <td>English</td>
     <td>100</td>
     <td> '.$english.'</td>
  </tr>'; }

  if ($maths!=0) { 
   $mail_body.='<tr>
     <td>Maths</td>
     <td>100</td>
     <td>'.$maths.'</td>
  </tr>'; }

  if ($accounts!=0){
  $mail_body.='<tr>
     <td>Account</td>
     <td>100</td>
     <td> '.$accounts.'</td>
  </tr>'; }

  if ($music!=0){
  $mail_body.='<tr>
      <td>Music</td>
      <td>100</td>
      <td> '.$music.'</td>
  </tr>'; }
$mail_body.='</table>
<p>&nbsp; </p>
<script language = "javascript">
   var tbl = document.getElementById("table");
   var rows = tbl.querySelectorAll("tbody tr");

   for(i = 0; i < rows.length; i++) {

    var cells = rows[i].querySelectorAll("td");

    var flag = true;
    //this number controls the colunm the code will check before it disappears.
   for(j = 2; j < cells.length; j++) {
     if (cells[j].innerHTML != 0) { 
      flag = false; 
     }
    }


   if (flag) { 
      rows[i].classList.add("hide"); 
   }
 }                                      
 </script>
 </body>
 </html>';
 $subject = "Report";
 $headers = 'MIME-Version: 1.0';
 $headers  = "From:[email protected]\r\n";
 $headers .= "Content-type: text/html\r\n";
 $to = "$email";

 $mail_result = mail($to, $subject, $mail_body, $headers);

  if ($mail_result) {
    mysqli_query($con_path, "UPDATE classscore SET emailsent=1 WHERE email='$email' LIMIT 1");
  }

?>
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
</head>
<?php echo $mail_body; ?>
<body>
</body>
</html>

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

user3669874 01.07.2018 18:45

Я внес изменения в основной ответ, попробуйте, может ли он сработать для вас

shubhangee 01.07.2018 19:16

Еще раз спасибо, но в электронном письме получателя по-прежнему отображаются строки с пустым 0. Отчет отправляется в Gmail, поэтому, возможно, Gmail не позволяет скрипту скрыть пустую строку.

user3669874 01.07.2018 20:21

Замените оператор if ($ english! = '') И любой другой на if (! Empty ($ english) || $ english! = 0)

Gabor 01.07.2018 21:27

@shubhangee & @ Gabor, спасибо вам обоим, эти работы. Любой из них работает нормально, замените if ($ english! = '') На if (! Empty ($ english) || $ english! = 0) или замените if ($ english! = '') На if ($ english! = 0)

user3669874 03.07.2018 10:52

Другие вопросы по теме