Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Przekazywanie zmiennych z formularza do wielu podstron
Forum PHP.pl > Forum > Przedszkole
Zawleka
Witam. Mam pewien problem i nie wiem jak go rozwiązać. Jestem dosyć początkującym w dziedzinie php i mam taki oto problem.

Stworzylem formularz w, którym odwiedzający wypełnia dane, potem naciska wyślij i pokazuje się strona podsumowująca zamówienie. Na tej stronie jest możliwość potwierdzenia zamówienia, powrotu do formularza w celu poprawienia danych lub wydrukowania zamowienia. Tutaj się z zaczynają schody.

Po kliknięciu w drukuj gość jest przenoszony na ładnie przygotowaną do druku stronę, tylko na niej danych brak. Zmienne z formularza się już tutaj nie pokazują. Pola są puste.

Tutaj niżej kod tego wszystkiego.

  1. <?php
  2. <form action="index.php?p=10" method="post" enctype="multipart/form-data" name="form2" >
  3.  
  4. <div align="right"><b><span style="float:left">Wypełnić przy pierwszym zamówieniu</span></b><br /><br />
  5. Nazwa firmy:
  6. <input name="firma" type="text" size="50" maxlength="200">
  7. <br /><br />
  8.  Adres:
  9. <input name="adres" type="text" size="50" maxlength="200">
  10. <br /><br />NIP:
  11. <input name="nip" type="text" size="20" maxlength="20">
  12. <br />
  13. <hr>
  14. <br />
  15. Nazwa firmy:
  16. <input name="firma2" type="text" size="50" maxlength="200">
  17. <br /><br />
  18. Osoba kontaktowa:
  19. <input name="okontakt" type="text" size="50" maxlength="200">
  20. <br /><br />
  21. Telefon:
  22. <input name="telefon" type="text" size="50" maxlength="200">
  23. <br /><br />
  24. Nazwa pliku:
  25. <input name="plik" type="text" size="20" maxlength="40">
  26. <br /><br />
  27. Ilość sztuk:
  28. <input name="ilosc" type="text" size="20" maxlength="20">
  29. Jakość DPI:
  30. <input name="dpi" type="text" size="20" maxlength="20">
  31. <br /><br />
  32. Rozmiar: <input name="rozmiar" type="text" size="20" maxlength="100">
  33. Materiał: <input name="material" type="text" size="20" maxlength="100">
  34. <br /><br />
  35. Sposób dostarczenia pliku: 
  36. <select name="sposob" size="1" >
  37. <option value="notchose"></option>
  38. <option value="ftp">przez FTP</option>
  39. <option value="cd">wysłanie CD</option>
  40. <option value="mail">wysyłka e-mail</option>
  41. <option value="osob">dostarczenie osobiście</option>
  42. </select><br /><br />
  43. Uwagi / wykończenia grafik  <br />
  44. <textarea name="uwagi" cols="50" rows="10"></textarea>
  45. <br>
  46. <input name="Wyslij" type="submit" value="Wyslij" style="border: 1px dotted silver; background-color: #dceffc;" >
  47.  <br>
  48.  
  49. </div>
  50. </form>
  51. ?>


To kod formularza.

A teraz kod strony podsumowującej

  1. <?php
  2.  
  3. $data = date("j.n.Y");
  4. $czas = date(" G:i:s ");
  5.  
  6.  
  7.  
  8. if ( $sposob == "notchose" ) 
  9.  $dostarczenie = " Nie wybrano "; 
  10.  
  11. else if ( $sposob == "ftp" ) 
  12.  $dostarczenie = " Przez FTP " ;
  13.  
  14. else if ( $sposob == "cd" ) 
  15.  $dostarczenie = " Wysyłka CD " ;
  16.  
  17. else if ( $sposob == "mail" ) 
  18.  $dostarczenie = " Wysyłka e-maila " ;
  19.  
  20. else if ( $sposob == "osob" ) 
  21.  $dostarczenie = " Dostarczenie osobiste " ;
  22.  
  23.  
  24. if( $firma != "" && $adres != "" && $nip != "" )
  25. {
  26. echo "
  27. <b>Zamówienie złożone dnia:</b> $data <b>o godzinie:</b> $czas<br /><br />
  28. <b>Nazwa firmy:</b> $firma <br /><br />
  29. <b>Adres:</b> $adres <br /><br />
  30. <b>NIP:</b> $adres <br /><br />
  31. <hr><br />
  32. <b>Osoba kontaktowa:</b> $okontakt <br /><br />
  33. <b>Telefon: </b> $telefon <br /><br /><br />
  34. <b>Nazwa pliku </b> $plik <br /><br />
  35. <b>Ilość sztuk:</b> $ilosc <br /><br />
  36. <b>Jakość DPI:</b> $dpi <br /><br /><br />
  37. <b>Rozmiar:</b> $rozmiar <br /><br />
  38. <b>Materiał:</b> $material <br /><br /><br />
  39. <b>Sposób dostarczenia:</b> $dostarczenie <br /><br /><br />
  40. <b>Uwagi:</b> $uwagi <br /><br /><hr><br /> " ;
  41. }
  42. else
  43.  
  44. {
  45. echo "
  46. <b>Zamówienie złożone dnia:</b> $data <b>o godzinie:</b> $czas<br /><br /><br />
  47. <b>Nazwa firmy:</b> $firma2 <br /><br />
  48. <b>Osoba kontaktowa:</b> $okontakt <br /><br />
  49. <b>Telefon: </b> $telefon <br /><br /><br />
  50. <b>Nazwa pliku </b> $plik <br /><br />
  51. <b>Ilość sztuk:</b> $ilosc <br /><br />
  52. <b>Jakość DPI:</b> $dpi <br /><br /><br />
  53. <b>Rozmiar:</b> $rozmiar <br /><br />
  54. <b>Materiał:</b> $material <br /><br /><br />
  55. <b>Sposób dostarczenia:</b> $dostarczenie <br /><br /><br />
  56. <b>Uwagi:</b> $uwagi <br /><br /><hr><br /> " ;
  57. }
  58.  
  59. ?> 
  60.  
  61. <input type="button" value="Wróć" onClick="history.back()" style="border: 1px dotted silver; background-color: #dceffc;">  
  62.  
  63. <form class="form" action="print.php" target="_blank" method="post" >
  64. <input type="submit" value="Drukuj" style="border: 1px dotted silver; background-color: #dceffc;" />  </form>
  65.  
  66. <form class="form"><input type="submit" value="Zatwierdź zamówienie" style="border: 1px dotted silver; background-color: #dceffc;"/> </form>


A tutaj niżej kod strony, która ma się drukować.

  1. <?php
  2.  
  3. $data = date("j.n.Y");
  4. $czas = date(" G:i:s ");
  5.  
  6.  
  7.  
  8. if ( $sposob == "notchose" ) 
  9.  $dostarczenie = " Nie wybrano "; 
  10.  
  11. else if ( $sposob == "ftp" ) 
  12.  $dostarczenie = " Przez FTP " ;
  13.  
  14. else if ( $sposob == "cd" ) 
  15.  $dostarczenie = " Wysyłka CD " ;
  16.  
  17. else if ( $sposob == "mail" ) 
  18.  $dostarczenie = " Wysyłka e-maila " ;
  19.  
  20. else if ( $sposob == "osob" ) 
  21.  $dostarczenie = " Dostarczenie osobiste " ;
  22.  
  23.  echo $_POST['adres'];
  24.  
  25.  
  26. if( $firma != "" && $adres != "" && $nip != "" )
  27. {
  28. echo "
  29. <b>Zamówienie złożone dnia:</b> $data <b>o godzinie:</b> $czas<br /><br />
  30. <b>Nazwa firmy:</b> $firma <br /><br />
  31. <b>Adres:</b> $adres <br /><br />
  32. <b>NIP:</b> $adres <br /><br />
  33. <hr><br />
  34. <b>Osoba kontaktowa:</b> $okontakt <br /><br />
  35. <b>Telefon: </b> $tel <br /><br /><br />
  36. <b>Nazwa pliku </b> $plik <br /><br />
  37. <b>Ilość sztuk:</b> $ilosc <br /><br />
  38. <b>Jakość DPI:</b> $dpi <br /><br /><br />
  39. <b>Rozmiar:</b> $rozmiar <br /><br />
  40. <b>Materiał:</b> $material<br /><br /><br />
  41. <b>Sposób dostarczenia:</b> $dostarczenie <br /><br /><br />
  42. <b>Uwagi:</b> $uwagi <br /><br /><hr><br /> " ;
  43. }
  44. else
  45.  
  46. {
  47. echo "
  48. <b>Zamówienie złożone dnia:</b> $data <b>o godzinie:</b> $czas<br /><br /><br />
  49. <b>Nazwa firmy:</b> $firma2 <br /><br />
  50. <b>Osoba kontaktowa:</b> $okontakt <br /><br />
  51. <b>Telefon: </b> $tel <br /><br /><br />
  52. <b>Nazwa pliku </b> $plik <br /><br />
  53. <b>Ilość sztuk:</b> $ilosc <br /><br />
  54. <b>Jakość DPI:</b> $dpi <br /><br /><br />
  55. <b>Rozmiar:</b> $rozmiar <br /><br />
  56. <b>Materiał:</b> $material <br /><br /><br />
  57. <b>Sposób dostarczenia:</b> $dostarczenie <br /><br /><br />
  58. <b>Uwagi:</b> $uwagi <br /><br /><hr><br /> " ;
  59. }
  60.  
  61. ?> 
  62. </div>


Na stronie podsumowującej dane są jaknajbardziej. Do strony do druku już nie sięgają. Nie wiem jak je przekazać dalej. Kombinowałem coś z sesjami ale nie wychodzi.

Proszę o pomoc, to chyba dosyć proste w realizacji tylko nie wiem jak to zrobić.
rama
Sądzę, że najlepszym sposobem przekazywania "dalej" danych będzie użycie sesji (sessions) smile.gif

Zagłębiając się bardziej w temat, to używanie sesji jest bardzo proste, ponieważ polega ono na uruchomieniu mechanizmu sesji i dodanie/odczytanie danych ze sesji. Poniżej przedstawiam przykład owego użycia winksmiley.jpg
  1. <?php
  2. /* Uruchamianie mechanizmu sesji */
  3.  
  4. /* Dodawanie danych do sesji */
  5. $_SESSION['nazwa'] = 'wartość';
  6.  
  7. /* Odczytywanie danych z sesji */
  8. print $_SESSION['nazwa'];
  9. ?>


Wracając do Twojego skryptu, to musisz zapisać wszelkie dane z formularza do sesji i później możesz je bez problemu odczytać gdzie-kolwiek chcesz (w obrębie Twojego serwisu) smile.gif
  1. <?php
  2. /* Sposób pierwszy: deklarowanie każdej zmiennej po kolei */
  3. $_SESSION['sposob'] = $_POST['sposob'];
  4.  
  5. /* Sposób drugi: deklarowanie całej tablicy $_POST do sesji */
  6. foreach( $_POST as $key => $value ) {
  7. $_SESSION[$key] = $value;
  8. }
  9. ?>


PS session_start() wpisujesz na samym początku Twojego skryptu oraz do każdego pliku, gdzie chcesz mieć możliwość odczytu albo zapisu do sesji (czyli tam gdzie chcesz coś robić z tablicą $_SESSION) smile.gif

PS1 Zauważyłem, że nie przykładasz zbyt dużej wagi do określania "lokalizacji" zmiennych. Mam na myśli użycie odwołań do odpowiednich tablic (poniższy przykład powinien łatwo wytłumaczyć, co mam na myśli) smile.gif Dlaczego jest to ważne? Jest to ważne, gdy wgrasz pliki, swój skrypt, na zdalny serwer który będzie miał wyłączoną opcję register_globals i w efekcie Twój skrypt przestanie działać, bo nie będzie miał dostępu do danych winksmiley.jpg
  1. <?php
  2. /* Definiowanie zmiennej przy register_globals=off */
  3. $zmienna = 'wartość';
  4.  
  5. /* Dane z formularza wysłane metodą post, znajdują się w tablicy $_POST['nazwa_pola'] */
  6. $_POST['nazwa_pola_input'];
  7.  
  8. /* Analogicznie do powyższego przykładu, lecz dane wysyłane metodą get.
  9.  * Ponadto, dane z adresu url, które znajdują się po znaku ?, umieszczone są również w tejże tablicy :) */
  10. $_GET['nazwa_pola_input'];
  11. ?>
mike
A jaki to ma związek z php5?
Przenoszę na Przedszkole.
Zawleka
Po wpisaniu session_start(); na początku mojego skryptu dodaje takie dwa oto komunikaty:

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /infograf/main/comp/print.php:10) in /infograf/main/comp/print.php on line 24

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /infograf/main/comp/print.php:10) in /infograf/main/comp/print.php on line 24


Co z tym fantem zrobić ?

Probowałem też bez session_start(); bo gdzieś czytałem, że serwer może automatycznie włączać sesje. Komunikaty się nie pojawiają ale sesje też nie działają smile.gif

Serwer na, którym to testuje to home.pl
nospor
Prosze wpisac sobie do wyszukiwarki forum:
"headers already sent"
i poszukac odpowiedzi na jakze popularne zagadnienie
Zawleka
Dodałem w każdym pliku session_star(); jeszcze przed header. Teraz komunikat nie jest wywalany ale sesje i tak chyba nie działaja. Dodam, że deklaracje zmiennych do sesjii robie już dalej w kodzie strony.

W czym problem ?

Ktoś mi powie dokladnie w jakim miejscu musze umieścić deklaracje zmiennych i sesion_start() ? bo męcze się z tym cały czas i nie wychodzi.

//////////////


Posunełem się troche dalej smile.gif

Lecz nie do końca wszystko działa.

Mianowicie po wypełnieniu formularza dana pokazują się na następnej podstronie tak jak trzeba.

Ale kiedy nasne przycisk " Drukuj " który ma następujący kod

  1. <form action="print.php" target="_blank">
  2. <input type="submit" value="Drukuj" style="border: 1px dotted silver; background-color: #dceffc;" /></form>


To przechodzi do podstrony, ktora ma się wydrukować, ale nie ma danych.

Kiedy natomiast na stronie z potwierdzeniem zamówienia wpisze ręcznie adres strony która ma się drukować pojawia się ona z danymi bez problemu. Tak jakby kliknęcie w link drukuj kasowało sesje i strona drukuj nie miala skąd wczytać danych.

Prosze o pomoc.
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.