Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] zapis tabeli do pliku xls
Forum PHP.pl > Forum > Przedszkole
piootras82
Witam,
mam skrypt, który ma zapisywać zawartość całej tabeli do pliku .xls
Tabela składa się z kolumn: lp, liczba_str, id_kl, acc, pudlo, typ, dana

Skrypt zapisuje plik w ustawionym folderze ale zawiera on tylko nagłówki (brakuje reszty danych).
Gorąca prośba o pomoc bo siedzę nad tym już 3 dzień sad.gif

  1. <?php
  2. ini_set('display_errors','1');
  3.  
  4. $naglowki = array (
  5. 'Lp.',
  6. 'Liczba stron',
  7. 'Numer klienta',
  8. 'Nr Rachunku',
  9. 'Nr Kartonu',
  10. 'Typ dokumentu',
  11. 'Nazwa wsadu'
  12. );
  13. $nastepny_wiersz = "\n";
  14. $nastepna_kolumna = "\t";
  15.  
  16. mysql_connect("localhost", "root", "608693")or die("Nie można nawiązać połączenia z bazą");
  17. mysql_select_db("zokia")or die("Wystąpił błąd podczas wybierania bazy danych");
  18.  
  19. function odczyt($id) {
  20. $sql="SELECT * FROM txt WHERE lp='$id' ";
  21. $query=mysql_query($sql);
  22. if (!$user=mysql_fetch_array($query)) echo mysql_error();
  23. $seria = array (
  24. $user['lp'],
  25. $user['liczba_str'],
  26. $user['id_kl'],
  27. $user['acc'],
  28. $user['pudlo'],
  29. $user['typ'],
  30. $user['dana'],
  31. $następny_wiersz
  32. );
  33. return $seria;
  34. }
  35. if($plik = fopen("c:/testowy.xls", "wb"))
  36. echo "<br>PLIK ZOSTAŁ UTWORZONY !!! ";
  37. else
  38. echo "Błąd tworzenia pliku !!!";
  39.  
  40.  
  41. foreach ($naglowki as $pole) {
  42. $dane.="$pole $nastepna_kolumna";
  43. }
  44. $sql="SELECT lp FROM txt";
  45. $query=mysql_query($sql);
  46. while ($numer=mysql_fetch_array($query))
  47. foreach (odczyt($numer['lp']) as $pole) {
  48. $dane.="$pole $nastepna_kolumna";
  49. $dane.=$nastepny_wiersz;
  50. }
  51. fputs($plik, $dane);
  52. fclose($plik);
  53. ?>
  54.  
  55.  


Ma ktoś jakiś pomysł gdzie tu może być błąd?
ActivePlayer
z zapytania wywal kawałek "WHERE lp='$id'" (linia 21)
zaworek
W 32 linijce zmienna

  1. $następny_wiersz

zawiera znak diakrytyczny.
piootras82
Po naniesienu Waszych uwag tworzy się plik ale z danymi wyglądającymi tak:


CODE

lp. Liczba stron Numer Klienta Nr Rachunku Nr Kartonu Typ dokumentu Nazwa wsadu lp.
..........................................................................Liczba stron
..........................................................................Numer Klienta
..........................................................................Nr Rachunku
..........................................................................Nr Kartonu
..........................................................................Typ dokumentu
..........................................................................Nazwa wsadu
lp.
Liczba stron
Numer Klienta
Nr Rachunku
Nr Kartonu
Typ dokumentu
Nazwa wsadu

Dane z tabeli nie zaciagają sie sad.gif
zaworek
W linijce 36 jest moim zdaniem nieprawidłowy zapis. Nie ma on nic wspólnego z tym co ostatnio pisałeś ale zwracam na to uwagę.

  1. if($plik = fopen("c:/testowy.xls", "wb"))


a powinno być

  1. if($plik = fopen("c:\testowy.xls", "wb"))


inaczej plik nie zostanie utworzony
piootras82
Cytat(zaworek @ 12.04.2011, 12:24:37 ) *
W linijce 36 jest moim zdaniem nieprawidłowy zapis. Nie ma on nic wspólnego z tym co ostatnio pisałeś ale zwracam na to uwagę.

  1. if($plik = fopen("c:/testowy.xls", "wb"))


a powinno być

  1. if($plik = fopen("c:\testowy.xls", "wb"))


inaczej plik nie zostanie utworzony


Niestety po z mianie zapisu z "/" na "\" plik w ogóle się nie tworzy.
Forma która była działa.
Ale dalej nie wiem co jest nie tak, że dane z tabeli nie zapisują się w pliku.

Szukam w necie i nic nie mogę znaleźć.
Ze wszystkich skryptów tylko ten zapisuje plik (pomijam fakt, że nie można zapisać w dowolnym miejscu) - do tego bez danych sad.gif

Już jestem prawie w domu, a przeszkadza mi tylko średnik, z którym nie mogę sobie poradzić sad.gif

Mam taki skrypt, który zapisuje tabelę TXT do pliku .csv
  1. <?php
  2. $host = 'localhost';
  3. $user = 'root';
  4. $pass = '608693';
  5. $db = 'zokia';
  6. $table = 'txt';
  7. $file = 'export';
  8.  
  9. $link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error());
  10. mysql_select_db($db) or die("Can not connect.");
  11.  
  12. $result = mysql_query("SHOW COLUMNS FROM ".$table."");
  13. $i = 0;
  14. if (mysql_num_rows($result) > 0) {
  15. while ($row = mysql_fetch_assoc($result)) {
  16. $csv_output.= $row['Field'].";";
  17. $i++;
  18. }
  19. $csv_output .= "\n";
  20. }
  21. $values = mysql_query("SELECT * FROM ".$table."");
  22. while ($rowr = mysql_fetch_row($values)) {
  23. for ($j=0;$j<$i;$j++) {
  24. $csv_output.= $rowr[$j].";";
  25. }
  26. $csv_output.= ";";
  27. }
  28.  
  29. $filename = $file."_".date("Y-m-d_H-i",time());
  30. header("Content-type: application/vnd.ms-excel");
  31. header("Content-disposition: csv" . date("Y-m-d") . ".csv");
  32. header("Content-disposition: filename=".$filename.".csv");
  33. print $csv_output;
  34. ?>


Nazwy kolumn są poprawne za wyjątkiem ostatniej pozycji, która zawiera średnik.
Pierwszy wiersz danych prawie też, ponieważ ostatni średnik przeniósł się do kolejnego wiersza i tak kolejno.
Sęk w tym, żeby średników nie było na początku i na końcu wierszy żeby dane można było poprawnie wyświetlić w excelu.
Pliss bo nie wiem co należy zmienić, żeby średniki były poprawnie.
CODE
lp;liczba_str;id_kl;acc;pudlo;typ;dana;
Lp. ; Liczba stron ; Nr Klienta ; Nr Rachunku ; Nr kartonu ; Typ dokumentu ; Nazwa wsadu
;;1 ; 2 ; 1308309 ; 12345678 ; 122314 ; SPYRB ; 2010-06-11 09:27:32rb6013
;;2 ; 3 ; 1306914 ; 12243554 ; 1968 ; SPYRB ; 2010-06-11 09:27:32rb6013
;;3 ; 2 ; 1216482 ; 13453452 ; 1341234; SPYRB ; 2010-06-11 09:27:32rb6013
;;4 ; 2 ; 1311422 ; 12343355 ; 12341234968 ; SPYRB ; 2010-06-11 09:27:32rb6013
;;5 ; 2 ; 1144896 ; 12345234 ; 123412368 ; SPYRB ; 2010-06-11 09:27:32rb6013

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.