Мне нужна помощь с этим кодом. Код и стиль 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> </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> </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','','');
Таким образом, отчет по электронной почте работает, но пустые строки не должны отображаться в отчете по электронной почте, когда получатель их получает. Я был бы очень признателен за помощь. Спасибо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте использовать приведенный ниже код, если он может решить вашу проблему.
$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> </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> </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>
Я внес изменения в основной ответ, попробуйте, может ли он сработать для вас
Еще раз спасибо, но в электронном письме получателя по-прежнему отображаются строки с пустым 0. Отчет отправляется в Gmail, поэтому, возможно, Gmail не позволяет скрипту скрыть пустую строку.
Замените оператор if ($ english! = '') И любой другой на if (! Empty ($ english) || $ english! = 0)
@shubhangee & @ Gabor, спасибо вам обоим, эти работы. Любой из них работает нормально, замените if ($ english! = '') На if (! Empty ($ english) || $ english! = 0) или замените if ($ english! = '') На if ($ english! = 0)
Спасибо, не сработало и отчет тоже не отправил. Проблема, которую я пытаюсь решить, заключается в том, что отчет каждого студента предназначен для отображения только строк с оценкой, когда он попадает в соответствующий ящик электронной почты. если четыре строки имеют счет, он отображает все четыре ряда, если два счета, он отображает две строки, если три счета, он отображает три строки, когда они получают свои оценки по электронной почте.