У меня есть таблица на HTML / PHP, которая извлекает данные из mySQL. См. Эту ссылку . Например, найдите этот код доставки, чтобы получить результат внутри таблицы: 42-7278954 .
После этого я хочу экспортировать результат в excel (вы также можете увидеть кнопку там).
Ниже представлен мой код таблицы (я удалил несколько столбцов, чтобы сократить код):
$body = ""; $display = "<table class='table_searchshipment' id='table_searchshipment' cellpadding='0' cellspacing='0' border='0'>"; echo $display; $body .= $display; $display = "<thead> <tr> <th>CN No.</th> <th>Doc No.</th> </tr> </thead>"; echo $display; $body .= $display; while($row = mysqli_fetch_array($result)) { $CN_no= $row['CN_no']; $doc_no= $row['doc_no']; $display = "<tr> <td>".$CN_no."</td> <td>".$doc_no."</td> </tr>"; echo $display; $body .= $display; } $display = "</table>"; echo $display; $body .= $display; $body = htmlspecialchars($body); echo '<form action = "setheader" method = "post"> <input type = "hidden" name = "body" value = "<?php echo $body ; ?>"> <input type = "submit" name = "submit" Value = "Export to excel"> </form>'; if(isset($_POST['submit'])){ $body = $_POST['body']; setHeader("export.xls"); echo $body; }
И в контроллере я создаю функцию setheader:
public function setheader($excel_file_name)//this function used to set the header variable { header("Content-type: application/octet-stream");//A MIME attachment with the content type "application/octet-stream" is a binary file. //Typically, it will be an application or a document that must be opened in an application, such as a spreadsheet or word processor. header("Content-Disposition: attachment; filename=$excel_file_name");//with this extension of file name you tell what kind of file it is. header("Pragma: no-cache");//Prevent Caching header("Expires: 0");//Expires and 0 mean that the browser will not cache the page on your hard drive }
Появится всплывающее окно загрузки, но оно загружает только файл «setheader», содержащий уведомление об ошибке. Пожалуйста, смотрите здесь .
В первую очередь,
Эта строка должна измениться:
echo '<form action = "setheader" method = "post"> <input type = "hidden" name = "body" value = "<?php echo $body ; ?>"> <input type = "submit" name = "submit" Value = "Export to excel"> </form>';
чтобы:
echo '<form action = "setheader" method = "post"> <input type = "hidden" name = "body" value = "'.$body.'"> <input type = "submit" name = "submit" Value = "Export to excel"> </form>';
Во-вторых, $body = htmlspecialchars($body);
скорее всего, возвращает пустую строку.
Из документов PHP
Если входная строка содержит недопустимую последовательность блоков кода в данной кодировке, будет возвращена пустая строка, если не установлены флаги ENT_IGNORE или ENT_SUBSTITUTE.
Не зная, какие данные поступают из базы данных, трудно проверить это дальше.
Но вы можете попробовать:
$body = htmlspecialchars($body, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
чтобы решить, разрешит ли он эту проблему.