@webdeveloper48

Ошибка в foreach или в PhpExcel?

Привет ребята.Пытаюсь сделать экспорт таблицы из БД в xls файл.Вот код
Все работает до второго foreach.Начиная с второго foreach код не работает и ломается там.В чем проблема?Я уверен что как то неправильно по логике обрабатываю массивы и тут и ломается все.
dpaste - dpaste.com/21BHXTX (если вдруг синтаксис глаза режет)
<?php

$link = mysqli_connect("localhost", "root", "", "");
mysqli_select_db($link, "blog");
$query = 'SELECT * FROM products';
$result = mysqli_query($link, $query);

if (isset ($_POST['export'])) {

    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {

        foreach ($row as $k => $val) {
            $html = '<td>' . $val . '</td><br>';
            echo $html;
        }
    }
}

if (isset ($_POST['download'])) {

    require_once 'Classes/PHPExcel.php';
    require_once 'Classes/PHPExcel/Writer/Excel5.php';

    $xls = new PhpExcel();
    $xls->setActiveSheetIndex(0);
    $sheet = $xls->getActiveSheet();

    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {

        $i = 0;

        foreach ($row as $ar) {
            $j = 0;
            //echo 'arr='.$arr;
            //echo 'j=';
            foreach ($ar as $val) {
               // echo 'arr=' . $val;exit();
                $sheet->setCellValueByColumnAndRow($j, $i, $val);
                $j++;
                //echo 'j=';//empty
                // echo 'val1='.$val;
            }
            $i++;
            //echo 'i='.$i;
        }
    }
    header("Expires: Mon, 1 Apr 1974 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
    header("Content-type: application/vnd.ms-excel");
    header("Content-Disposition: attachment; filename=matrix.xls");

    $objWriter = new PHPExcel_Writer_Excel5($xls);
    $objWriter->save('php://output');
}
?>

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<form method="POST">
    <button id="button" name="export" class="btn">Show table</button>
    <button id="button_dwn" name="download" class="btn">Download Table</button>
</form>
<table>
    <tbody>
    <tr></tr>
    </tbody>
</table>

</body>
</html>
  • Вопрос задан
  • 209 просмотров
Пригласить эксперта
Ответы на вопрос 1
@znepok
Перед вторым циклом while добавьте mysql_data_seek($result, 0)
...
mysql_data_seek($result, 0);
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
...

А еще полагаю, что второй if вам можно изменить на else if:
else if (isset ($_POST['download'])) {
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы