За последние 24 часа нас посетили 20258 программистов и 1010 роботов. Сейчас ищут 403 программиста ...

Экспорт данных из MySQL в Excel

Тема в разделе "PHP для новичков", создана пользователем kir_f, 23 мар 2016.

  1. kir_f

    kir_f Новичок

    С нами с:
    23 мар 2016
    Сообщения:
    8
    Симпатии:
    0
    Есть код который делает выборку строк по дате from - to и отображает их.
    Как правильно составить запрос (в excel.php) на выбранные строки, чтобы экспортировать их в excel ?
    Спасибо.
    Код (PHP):
    1. <!doctype html>
    2. <html lang="en">
    3. <head>
    4.   <meta charset="utf-8">
    5.   <title>jQuery UI Datepicker - Default functionality</title>
    6.   <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
    7.   <script src="//code.jquery.com/jquery-1.10.2.js"></script>
    8.   <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
    9.   <link rel="stylesheet" href="/resources/demos/style.css">
    10.   <script>
    11.   $(function() {
    12.     $( "#datepicker_from, #datepicker_to" ).datepicker( { dateFormat: "yy-mm-dd" } );
    13.   });
    14.   </script>
    15. </head>
    16. <body>
    17.  <form method="post">
    18.      <p>Дата от : <input type="text" id="datepicker_from" name="data_from"> Дата до : <input type="text" id="datepicker_to" name="data_to"> </p> 
    19.      <input type='submit'>
    20.  </form>
    21.  
    22. <?php 
    23.  
    24. if(isset($_POST['data_from']) || isset($_POST['data_to'])){
    25.  
    26.  
    27.     try {  
    28.  
    29.         $host = 'localhost';
    30.         $dbname = '123';
    31.         $user = 'root';
    32.         $pass = '';
    33.      
    34.           $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
    35.  
    36.           $query = "SELECT * FROM vesy";
    37.  
    38.           if(isset($_POST['data_from']) && $_POST['data_from'] !== '') $query .= " WHERE date >= '".$_POST['data_from']."'";
    39.  
    40.           if(isset($_POST['data_to']) && $_POST['data_to'] !== '') $query .= " AND date <= '".$_POST['data_to']."'";
    41.      
    42.           $STH = $DBH->query($query);  
    43.  
    44.         $STH->setFetchMode(PDO::FETCH_ASSOC);
    45.         
    46. echo "FROM  {$_POST['data_from']} TO {$_POST['data_to']}" ;
    47.  
    48.  
    49.  
    50.     // выводим на страницу сайта заголовки HTML-таблицы
    51.   echo '<table border="1">';
    52.   echo '<thead>';
    53.   echo '<tr>';
    54.   echo '<th>date</th>';
    55.   echo '<th>Massa</th>';
    56.   echo '<th>frakcia</th>';
    57.   echo '</tr>';
    58.   echo '</thead>';
    59.   echo '<tbody>';
    60.  
    61.    // выводим в HTML-таблицу все данные клиентов из таблицы MySQL 
    62.         while($row = $STH->fetch()) {
    63.     echo '<tr>';        
    64.     echo '<td>' . $row['date'] . '</td>'; 
    65.     echo '<td>' . $row['Massa'] . '</td>'; 
    66.     echo '<td>' . $row['frakcia'] . '</td>';
    67.     echo '</tr>';    
    68.         }
    69. echo '</tbody>';
    70. echo '</table>';
    71.      
    72.     }  
    73.     catch(PDOException $e) {  
    74.         echo $e->getMessage();  
    75.     }
    76.  
    77. }
    78.  
    79. ?>
    80.    // выводим в Excel
    81. <button  type="submit" class="btn btn-primary" 
    82. onClick="document.location.href='/excel.php'">Экспорт в Exel
    83. </button>
    84. </body>
    Файл excel.php
    Код (PHP):
    1. <?PHP
    2. function cleanData(&$str)
    3. {
    4. $str = preg_replace("/\t/", "\\t", $str);
    5. $str = preg_replace("/\r?\n/", "\\n", $str);
    6. if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
    7. }
    8.  // Имя загружаемого файла файла. 
    9. $filename = "otchet_" . date('Ymd') . ".xls";
    10.  
    11. header("Content-Disposition: attachment; filename=\"$filename\"");
    12. header("Content-Type: application/vnd.ms-excel");
    13.  
    14. // Подключение к бд
    15.     $db_host = 'localhost';
    16.     $db_name = '123';
    17.     $db_username = 'root';
    18.     #$db_password = '';
    19.  
    20. //Указать кодировку выводимых данных
    21. mysql_query('SET character_set_database = cp1251_general_ci'); 
    22. mysql_query ("SET NAMES 'cp1251'");
    23.  
    24. //запрос и вывод данных    
    25. $flag = false;
    26.  $result = mysql_query("SELECT * FROM table ORDER BY Data DESC") 
    27.  or die('Запрос не выполнен!');
    28.  while(false !== ($row = mysql_fetch_assoc($result))) {
    29.    if(!$flag) {
    30.      // Вывод заголовков
    31.      echo implode("\t", array_keys($row)) . "\r\n";
    32.      $flag = true;
    33.     }
    34.     //Вывод данных столбцов    
    35.      array_walk($row, 'cleanData');
    36.      echo implode("\t", array_values($row)) . "\r\n";
    37.   }
    38.   exit;
    39. ?>
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Мало что понятно, проблемы с составление SQL запроса на выборку данных по условию?
     
  3. kir_f

    kir_f Новичок

    С нами с:
    23 мар 2016
    Сообщения:
    8
    Симпатии:
    0
    Да. проблемы с составление SQL запроса на выборку данных по условию в excel.php
    Нужен экспорт строк которые выбрали по дате.

    скрин.
    http://prntscr.com/aiw832
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Смотрю что у тебя данные уже выводятся на страницу, зачем тогда SQL запрос другой делать?
    Или ты просто вообще ничего не понимаешь в этом?
     
  5. kir_f

    kir_f Новичок

    С нами с:
    23 мар 2016
    Сообщения:
    8
    Симпатии:
    0
    Понятно, что выводяться. Как их отправить в эксель с этим проблема.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    ты создаешь текст в формате csv с разделителем \t, но сохранить предлагаешь с расширением .xls. это не одно и то же.

    для экспорта в xls или xlsx есть специальные библиотеки, недавно обсуждалось здесь, поищи.
    а эскпорт в csv лучше делать через встроенную функцию fputcsv(). только тогда честно объявляй content-type и расширение файла. никакой это не excel.

    Добавлено спустя 1 минуту 1 секунду:
    вот: https://php.ru/forum/viewtopic.php?f=13&t=57490