Отображение данных $_POST в HTML-таблице
Я подготовил форму, которая используется для создания PDF-файла, а затем загружает файл с предоставленными данными. В моем коде мне нужно сделать это через библиотеку mPdf, которая генерирует файл следующим образом:
$mpdf = new \Mpdf\Mpdf();
// Write some HTML code:
$html = "Here comes what must be displayed in the PDF file"
$mpdf->WriteHTML($html);
// Output a PDF file directly to the browser
$mpdf->Output('ticket.pdf', \Mpdf\Output\Destination::DOWNLOAD);
В моем $html мне нужно создать таблицу, которая представляет комбинацию данных, полученных с помощью $_POST, например. Однако, когда я ставлю, как показано ниже, у меня возникает множество ошибок.
$html = "<table>ID: $_POST['someVariable']</table>";
Ниже вы можете найти весь код, который я использую для создания файла, а затем загрузить его. Не могли бы вы помочь мне с этим? Буду искренне благодарен за помощь новичку:)
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$from = filter_input(INPUT_POST, 'from');
$to = filter_input(INPUT_POST, 'to');
$start = filter_input(INPUT_POST, 'start');
$price = filter_input(INPUT_POST, 'price');
$length = filter_input(INPUT_POST, 'length');
$timezoneFrom = getTimezone($from, $airports);
$timezoneTo = getTimezone($to, $airports);
validate($from, $to, $start, $price, $length);
echo "from " . $timezoneFrom . "<br>";
echo "to " . $timezoneTo . "<br>";
$dateFrom = new DateTime($start, new DateTimeZone($timezoneFrom));
echo $dateFrom->format('Y-m-d H:i:s e') . "<br>";
$dateTo = clone $dateFrom;
echo "clone of date :";
echo $dateTo->format('Y-m-d H:i:s e') . "<br>";
$dateTo->setTimezone(new DateTimeZone($timezoneTo));
echo "after timezone change:";
echo $dateTo->format('Y-m-d H:i:s e') . "<br>";
$dateTo->modify($length . ' hours');
echo $dateTo->format('Y-m-d H:i:s') . "<br>";
echo "Data OK";
}
require_once __DIR__ . '/vendor/autoload.php';
$mpdf = new \Mpdf\Mpdf();
// Write some HTML code:
$html = "
<!DOCTYPE html>
<html>
<head>
<style>
#head {
text-align: center;
color: red;
font-weight: bold;
}
table, th, tr, td {
border: 1px solid black;
}
</style>
<body>
<table>
<thead>
<tr>
<td colspan=\"2\" id=\"head\">SomeTitle</td>
</tr>
</thead>
<div class=\"fromTo\">
<tr>
<td></td>
<td>To: ."$_POST['from']".</td>
</tr>
</div>
<div class=\"flightData\">
<tr>
<td>Departure (local time): $start</td>
<td>Arrival (local time)</td>
</tr>
</div>
<div class=\"date\">
<tr>
<td>$dateFrom</td>
<td>$dateTo</td>
</tr>
</div>
<div class=\"FlightPass\">
<tr>
<td>Flight time:</td>
<td>$length</td>
</tr>
<tr>
<td>Passenger:</td>
<td></td>
</tr>
</div>
</table>
</body>
</head>
</html>";
$mpdf->WriteHTML($html);
// Output a PDF file directly to the browser
$mpdf->Output('ticket.pdf', \Mpdf\Output\Destination::DOWNLOAD);
Пожалуйста, не стесняйтесь давать мне советы и вопросы, если у вас есть. С уважением.
1 ответ
Вы никогда не должны передавать пользовательский ввод непосредственно в HTML (даже не в HTML для ввода PDF, чтобы сохранить передовой опыт и поддерживать повторное использование кода), так как тогда ваш код будет уязвим для XSS. Вы должны правильно обработать ввод с помощью htmlspecialchars
функция.
$someVariableOutput = htmlspecialchars($_POST['someVariable']);
Что касается вашего исходного вопроса:
Вам нужно объединить строку с переменной с .
оператор:
$html = "<table>ID: " . $someVariableOutput . "</table>";
или вы можете отобразить переменную в строке в двойных кавычках:
// the {} are just for a good measure here
// they would be useful when printing eg. an array key.
$html = "<table>ID: {$someVariableOutput}</table>";