Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak Uaktywniać Odpowiednie Zmienne?
Forum PHP.pl > Forum > Przedszkole
TomASS
Cześć. Mam taki programik, który wypisuje dane z tabeli MySQL do pliku txt (oddzielone średnikami) które później wczytam sobie do excela. Skrypt wygląda tak:

  1. <?
  2. require_once(&#092;"config.php\");
  3. mysql_connect (&#092;"$dbhost\",\"$dblogin\",\"$dbhaslo\") or die (\"Nie masz uprawnien\");
  4. mysql_select_db (&#092;"$db\");
  5.  
  6. $ID = $_REQUEST['ID'];
  7. $skad = $_REQUEST['skad'];
  8.  
  9. $query = &#092;"SELECT * FROM zamowienia\";
  10. $result = mysql_query($query);
  11.  
  12. $plik = @fopen(&#092;"dzis.txt\",\"w+\");
  13. @flock($plik,2);
  14. $do_pliku1 = &#092;"Numer zamówienia;Magazyn;Adres;Przewoznik;Status;Data realizacji;Dodatkowe 
    m
  15. ejsce rozladunku 1;Dodatkowe miejsce rozladunku 2;Kilometry;Cena;n\";
  16. echo $do_pliku1;
  17. fwrite($plik, $do_pliku1);    
  18. while ($row = mysql_fetch_array($result)){
  19. $dane_do_pliku = $ID.';'.$row['skad'].';'.$row['adres'].';'.$row['Przewoznik'].';'.$row['Stan'].';'.$row['Data_realizacji'].';'.$row['Dodatkowe_miejsce1'].';'.$row['Dodatkowe_miejsce2'].';'.$row['ilosc_km'].';'.$row['cena'].';'.\"n\";
  20. fwrite($plik, $dane_do_pliku);    
  21. }
  22. @flock($plik,3);
  23. @fclose($plik);
  24.  
  25. //wysyłanie do użytkownika
  26. //kasowanie = unlink
  27. ?>


I teraz mam takie dwa pytania:

1. Wprowadzam dane do pliku. Po kolei...ale chciałbym przy pomocy checkboksów zrobić aby tylko niektóre wchodziły w skład pliku. np. chciałbym mieć tylko ID i cene. jak powinienem nazwać i jak nazwać wartości tych checkboksów?

2. Jak automatycznie, po wygenerowaniu pliku podjąć jego pobieranie z serwera do użytkownika?

Pozdrawiam i bardzo dziękuję za odpowiedź.
DeyV
jeśli potrzebujesz tylko wysłąć tak przygotowane dane do użtykowanika, to nie am potrzeby, by je zapisywac w postaci pliku na dysku serwera.
Wystarczy wysłać odpowiedni nagłówek, a następnie wydrukować na ekran zawartoś pliku. Przeglądarka potraktuje to tak, jakby otrzymała plik do pobrania.

A w takiej sytuacji, do przygotowania pozostają jednynie dane, któe chcesz wysłać. Warto więc przygotowac listę z której użytkownik będzie mógł wybrać, któe kolumny go interesują, a z danych otrzymanych od niego wygenerować zapytanie do MySQL.

przykładowy nagłowek
  1. <?
  2. header(&#092;"Content-Type: application/octet-stream\"); 
  3. header(&#092;"Content-Disposition: attachment; filename=nazwa_pliku\"); 
  4. ?>
byther
Formularz niech zawiera checkboxy...
  1. ID <input type="checkbox" name="z[id]" value="1"/><br/>
  2. CENA <input type="checkbox" name="z[cena]" value="1"/><br/>
  3. NAZWA FIRMY <input type="checkbox" name="z[nazwa_firmy]" value="1"/><br/>

W ten sposób w tablicy $_REQUEST['z'] masz pola, które powinny zostać umieszczone w pliku.
  1. <?php
  2.  
  3. $id = $_REQUEST[&#092;"id\"];
  4. $pola = implode(&#092;",\", array_keys($_REQUEST[\"z\"]));
  5. $sql_query = &#092;"SELECT $pola FROM zamowienia WHERE $id\";
  6.  
  7. ?>

Warto jeszcze "upewnić się", że użytkownik wprowadził przynajmniej jedno pole lub przewidzieć pole domyślne.
TomASS
To nie oto do końca chodzi. Chciałbym mieć możliwość czy do pliku wpisywane są
  1. <?php
  2.  
  3. $row['ID'],&#092;";\",$row['skad'],\";\",$row['kto'].....
  4.  
  5. ?>

czy np
  1. <?php
  2.  
  3. $row['skad'],&#092;";\",$row['kto'].....
  4.  
  5. ?>

(bez $row['ID']winksmiley.jpg - poprostu chciałbym mieć możliwość wpisywania odopwiednich $rowów do pliku.
byther
A co byś powiedział na to, żeby:
  • pierwszy argument implode() zmienić na średnik
  • tak stworzoną zmienną możesz wykorzystać w inny sposób
Got it? smile.gif
TomASS
tak ale co z "$" questionmark.gif jak mam to dokładnie zapisać? Sam zobacz, że nie za bardzo działa :/
byther
Cytat(TomASS @ 2004-06-17 09:15:13)
tak ale co z "$" questionmark.gif jak mam to dokładnie zapisać? Sam zobacz, że nie za bardzo działa :/

Formularz zapewnia informację nt. pól, które powinny znaleźć się w "raporcie". Jak dane z formularza trafiają do skryptu (tu: w $_REQUEST["z"]), masz tablicę z polami, których nazwa odpowiada tym z tablicy w bazie danych. I co teraz z nimi możesz zrobić?

* możesz je olać z wysoka i poprzestać na wpisywaniu wszystkiego ręcznie
Zalety:
- lekkie, łatwe i przyjemne
Wady:
- j.w.
- nie rozwiązuje problemu

* wykorzystujesz to, co napisałem i pobierasz tylko zaznaczone pola oraz na podstawie tej samej tablicy możesz zapisać je do pliku
Zalety:
- elastyczne i w proste w implementacji
Wady:
- niestety, trzeba to napisać


* właściwie to jest to rozszerzenie poprzedniej opcji - pobierasz wszystkie pola z tablicy, na podstawie formularza tworzysz plik .php, który będzie składać się z $row["nazwa"], itd., a później "przetwarzasz" za pomocą komend ob_*() i include() każdy wpis
Zalety:
- jeżeli jesteś optymistą, wszystko ma jakieś zalety
Wady:
- idąc w tym kierunku możesz skończyć z szablonami opartymi o Smarty, XML/XSLT, inne

Podsumowanie:
Programowanie wymaga myślenia.

pzdr.
byther

PS. Pisałem "na żywo", ale powinno działać. A przynajmniej trochę "naprowadzić" na rozwiązanie.
  1. <?php
  2. $id = $_REQUEST[&#092;"id\"];
  3. $pola = implode(&#092;",\", array_keys($_REQUEST[\"z\"]));
  4. $wynik = mysql_query(&#092;"SELECT $pola FROM tablica WHERE id='$id'\");
  5. $plik = fopen('raport.csv', 'w+');
  6. fwrite($plik, implode(&#092;";\", array_keys($_REQUEST[\"z\"])));
  7. while ($row = mysql_fetch_assoc($wynik)) {
  8. $rekord = array();
  9. foreach ($_REQUEST[&#092;"z\"] as $pole) {
  10. $rekord[] = $row[$pole];
  11. }
  12. fwrite($plik, implode(&#092;";\", $rekord).\"n\");
  13. }
  14. fclose($plik);
  15. ?>
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.