Cody O'Meara Ответов: 2

Ошибка тела HTML Phpmailer


Я пытаюсь отправить электронное письмо в стиле HTML в PHPMailer. Получение ошибки с этой строкой:

echo "<table id='myTable' style='border: solid 1px black;'>";


Ошибка:
PHP Parse error:  syntax error, unexpected 'myTable' (T_STRING) in /var/www/html/tsl/email1.php on line 46


Полный Код Тела:
$mail->isHTML(true);
$mail->Body    = '
	<html>
<style>
table {
  border-spacing: 0;
  
  border: 1px solid #ddd;
}

th, td {
  text-align: left;
  padding: 16px;
}

tr:nth-child(even) {
  background-color: #f2f2f2
}
</style>
<body onload="sortTable()">
<center>
<?php
echo "<table id='myTable' style='border: solid 1px black;'>";
 echo "<tr><th>FullName</th><th>result</th></tr>";

class TableRows extends RecursiveIteratorIterator {
    function __construct($it) {
        parent::__construct($it, self::LEAVES_ONLY);
    }

    function current() {
        return "<td style="width: 150px; border: 1px solid black;">" . parent::current(). "</td>";
    }

    function beginChildren() {
        echo "<tr>";
    }

    function endChildren() {
        echo "</tr>" . "\n";
    }
}

$servername = "REMOVED";
$username = "REMOVED";
$password = "REMOVED";
$dbname = "REMOVED";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("SELECT fullName, result FROM results where dateTime > CURDATE() ");
    $stmt->execute();

    // set the resulting array to associative
    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

    foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
        echo $v;
    }
}
catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>
</center>
<script>
function sortTable() {
  var table, rows, switching, i, x, y, shouldSwitch;
  table = document.getElementById("myTable");
  switching = true;
  /*Make a loop that will continue until
  no switching has been done:*/
  while (switching) {
    //start by saying: no switching is done:
    switching = false;
    rows = table.rows;
    /*Loop through all table rows (except the
    first, which contains table headers):*/
    for (i = 1; i < (rows.length - 1); i++) {
      //start by saying there should be no switching:
      shouldSwitch = false;
      /*Get the two elements you want to compare,
      one from current row and one from the next:*/
      x = rows[i].getElementsByTagName("TD")[0];
      y = rows[i + 1].getElementsByTagName("TD")[0];
      //check if the two rows should switch place:
      if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
        //if so, mark as a switch and break the loop:
        shouldSwitch = true;
        break;
      }
    }
    if (shouldSwitch) {
      /*If a switch has been marked, make the switch
      and mark that a switch has been done:*/
      rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
      switching = true;
    }
  }
}
</script>


</body>
</html>';


Что я уже пробовал:

Я думаю, что это как-то связано с цитатами, но не уверен точно, поэтому я попытался настроить их безрезультатно, но, вероятно, сделал это неправильно.

Cody O'Meara

Поэтому я устранил ошибку, используя \' в качестве кавычек для некоторых, которые создавали проблему. Но теперь у меня возникла проблема.

$Конн-и GT;метод setAttribute(методом PDO::ATTR_ERRMODE, методом PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT fullName, result FROM results where dateTime > CURDATE() ");
$stmt->выполнить();

// установите результирующий массив в ассоциативное значение
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

по каждому элементу(новый TableRows(новый RecursiveArrayIterator($полу-и GT;fetchAll())) А $К=и GT;$в) {
echo $v;
}
}
catch(PDOException $e) {
echo "Error:" . $e->getMessage();
}
$conn = null;
эхо "";

ZurdoDev

В чем же ошибка?

2 Ответов

Рейтинг:
0

W∴ Balboos, GHB

Вторая строка:

$mail->Body    = '<html>
откройте одну цитату, но она никогда не закрывается. Ваша следующая одиночная цитата-это та, что стоит прямо перед "myTable".

Если он никем не обновлен, посмотрите на код, который вы отправили. Посмотрите, как все это переходит в красноватый цвет после этого " и не меняется обратно до тех пор, пока id='Мой чтобы выбросить ошибку.

Просто закройте исходную строку.


Рейтинг:
0

Member 14856944

Https$mail->isHTML(true);
$mail->Body = '


стол {
границы интервал: 0;

граница: 1px solid #ddd;
}

th, td {
выравнивание текста: слева;
прокладка: 16px;
}

tr:nth-ребенок(четный) {
цвет фона: #f2f2f2
}



";
Эхо "FullNameresult";

класс TableRows расширяет RecursiveIteratorIterator {
функция __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}

функция тока() {
return "" . parent::current(). "";
}

функция beginChildren() {
эхо "";
}

функция endChildren() {
Эхо "". "\n";
}
}

$servername = "удалено";
$username = "удалено";
$password = "удалено";
$dbname = "удалено";

пробовать {
$соед = новый метод PDO("MySQL:на хост=$имя_сервера;значение dbname=$значение dbname", $имя пользователя, $пароль);
$Конн-и GT;метод setAttribute(методом PDO::ATTR_ERRMODE, методом PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT fullName, result FROM results where dateTime > CURDATE() ");
$stmt->выполнить();

// установите результирующий массив в ассоциативное значение
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

по каждому элементу(новый TableRows(новый RecursiveArrayIterator($полу-и GT;fetchAll())) А $К=и GT;$в) {
echo $v;
}
}
catch(PDOException $e) {
echo "Error:" . $e->getMessage();
}
$conn = null;
эхо "";
?>


функция sortTable() {
таблица var, строки, переключение, i, x, y, shouldSwitch;
таблица = документ.метода getElementById("таблицы mytable");
переключение = true;
/*Сделайте цикл, который будет продолжаться до тех пор, пока
никакого переключения не было сделано:*/
в то время как (переключение) {
//начните с того, что скажите: переключение не производится:
переключение = ложь;
строки = таблица.строки;
/*Цикл по всем строкам таблицы (кроме
во-первых, который содержит заголовки таблиц):*/
for (i = 1; i < (rows.length - 1); i++) {
//начните с того, что не должно быть никакого переключения:
shouldSwitch = ложь;
/*Получите два элемента, которые вы хотите сравнить,
один из текущей строки и один из следующей:*/
x = строки[i].getElementsByTagName("TD")[0];
y = строки[i + 1].getElementsByTagName("TD")[0];
//проверьте, должны ли эти два ряда поменяться местами:
если (Х.innerHTML будет.столоверчением() &ГТ; г.innerHTML будет.столоверчения()) {
//если это так, отметьте как переключатель и разорвите петлю:
shouldSwitch = истина;
перерыв;
}
}
если (shouldSwitch) {
/*Если переключатель был помечен, сделайте переключатель
и отметьте, что переключение было сделано:*/
строки[i].parentNode.insertBefore(строки[i + 1], строки[i]);
переключение = true;
}
}
}




';