Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z indeksami w zmiennych sesyjnych
Forum PHP.pl > Forum > Przedszkole
tenlepszy
Witam,

Mój problem dotyczy odczytania zmiennych sesyjnych. Otóż na pierwszej stronie nadaje wartości zmiennym sesyjną za pomocą zwykłej pętli for, zmienne sesyjne przyjmują następującą postać $_SESSION[i]=x; gdzie i oznacza krok pętli, natomiast x dowolną wartość. Na tej stronie wyświetlam też (dla sprawdzenia) wartości zmiennych sesyjnych i wszystko działa tj. wyświetla się. Problem dotyczy natomiast drugiej strony na której chce ponownie wyświetlić wartości zmiennych sesyjnych. Etap ten robię również za pomocą pętli for i wygląda to następująco echo $_SESSION[i];. I tu zaczyna się problem gdyż nie wyświetla niczego. Inne zmienne sesyjne są wyświetlane normalnie. Nie mam pomysłu jak skorygować ten problem. Próbowałem to zrobić za pomocą zmiennych zmiennych ale coś nie wychodziło. Bardzo bym prosił o jakiekolwiek rady i pomoc.


Pozdrawiam
tehaha
pokaż kod

1. a na obu stronach dajesz session_start()?
2. możesz sprawdzić zmienne sesyjne używając print_r($_SESSION)
3. dajesz $_SESSION[i] czy $_SESSION[$i]?
zamper
wydaje mi się, że gdzieś jest użyte
smile.gif chyba
tenlepszy
A więc tak:
1. na obu stronach jest session_start()
2. Sprawdzałem używając print_r($_SESSION) i wyświetla wszystkie zmienne sesyjne, tylko nie te "potrzebne"
3. tak daje $_SESSION[$i]
4. Nie ma nigdzie session_destroy();

Ogólnie wydaje mi się, że wszystko należy sprowadzić do postaci którą wyglądała by następująco $_SESSION('$i') z tym, że dla wielu elementów ;/
tehaha
pokaż kody na obu stronach
tenlepszy
strona 1:

  1. <?php
  2. include "auth1.inc.php";
  3. $polaczenie=mysql_connect("localhost","root","") or
  4. die ("Sprawdź połączenie z bazą danych.");
  5. mysql_select_db("praca_dyplomowa");
  6.  
  7. $id = $_REQUEST['id'];
  8.  
  9. ?>
  10.  
  11. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  12. "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  13. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
  14. <head>
  15. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"/>
  16. <title><?php echo $nazwa; ?></title>
  17. <meta name="keywords" content="Rezerwacja biletów"/>
  18. <meta name="description" content="Rezerwacja biletów"/>
  19. <meta name="author" content="xxx"/>
  20. <meta name="language" content="pl"/>
  21. <link rel="Stylesheet" href="tim.css" type="text/css" />
  22.  
  23. </head>
  24.  
  25. <body>
  26.  
  27. <div id="naglowek">
  28.  
  29. <img src="grafika/baner.jpg" alt="logo" />
  30.  
  31. </div>
  32.  
  33. <div id="obszar_glowny">
  34.  
  35. <div id="zakladka">
  36.  
  37. <ul id="zakladki">
  38. <li><a href="index.php">Start</a></li>
  39. <li><a href="impreza.php">Imprezy</a></li>
  40. <li><a href="galeria.php">Galeria</a></li>
  41. <li><a href="kontakt.php">Kontakt</a></li>
  42. <?php
  43. if ($_SESSION['username']== "admin")
  44. {
  45. echo ('<li><a href="edycja_impreza.php">Edycja imprez</a></li>');
  46. echo ('<li><a href="edycja_obiekt.php">Edycja obiektów</a></li>');
  47. echo ('<li><a href="zarzadzanie.php">Zarządzania transakcjami</a></li>');
  48. echo ('<li><a href="wylogowany.php">WYLOGUJ [ ');
  49. echo $_SESSION['username'];
  50. echo('] </a></li>');
  51.  
  52. }
  53. ?>
  54. </ul>
  55.  
  56. </div>
  57.  
  58.  
  59. <div id="tresc">
  60. <ol>
  61. <li>Wybór miejsc</li>
  62. <li><b>Wpisanie danych</b></li>
  63. <li>Potwierdzenie rezerwacji</li>
  64. </ol>
  65.  
  66.  
  67.  
  68.  
  69. <?php
  70. $polaczenie=mysql_connect("localhost","root","") or
  71. die ("Sprawdź połączenie z bazą danych.");
  72. mysql_select_db("praca_dyplomowa");
  73. $zapytanie = "SELECT cena_normalna, cena_ulgowa FROM impreza WHERE id=$id";
  74. $rezultat = mysql_query($zapytanie)
  75.  
  76.  
  77. while ($row = mysql_fetch_array($rezultat)) {
  78. extract($row);
  79. $cena_calosc=0;
  80. $cena_normalny=$cena_normalna;
  81. $cena_ulgowy=$cena_ulgowa;
  82. }
  83. $licznik_normalny=0;
  84. $licznik_ulgowy=0;
  85.  
  86. for ($i=1;$i<91;$i++)
  87. {
  88. if ($_POST[$i]==2)
  89. {
  90. $_SESSION[$i]=$_POST[$i];
  91. $licznik_normalny=$licznik_normalny+1;
  92.  
  93.  
  94.  
  95. }elseif($_POST[$i]==3)
  96. {
  97. $_SESSION[$i]=$_POST[$i];
  98. $licznik_ulgowy=$licznik_ulgowy+1;
  99. }
  100.  
  101.  
  102. }
  103. $cena_normalny=$cena_normalny * $licznik_normalny;
  104. $cena_ulgowy=$cena_ulgowy * $licznik_ulgowy;
  105. $cena_calosc=$cena_ulgowy+$cena_normalny;
  106. $_SESSION[cena_calosc]=$cena_calosc;
  107.  
  108. if($cena_calosc>0)
  109. {
  110. echo ('<br>');
  111. echo('Ilosc biletów normalnych: '.$licznik_normalny.'- Cena: '.$cena_normalny.'zł');
  112. echo ('<br>');
  113. echo('Ilosc biletów ulgowych: '.$licznik_ulgowy.'- Cena: '.$cena_ulgowy.'zł');
  114. echo ('<br>');
  115. echo ('Łączna cena za bilety to: '.$cena_calosc.'zł');
  116. echo ('<br>');
  117. echo ('<br>');
  118. echo ('<br>');
  119. echo ('Podaj swoje dane');
  120. echo ('<br>');
  121. echo ('<form method="POST" action="rezerwacja3.php?id=');
  122. echo $id;
  123. echo('" name="formularz2" id="formularz2">');
  124. echo('Imie: ');
  125. echo('<input type="text" name="imie" maxlength="50" />');
  126. echo ('<br>');
  127. echo('Nazwisko: ');
  128. echo('<input type="text" name="nazwisko" maxlength="50" />');
  129. echo ('<br>');
  130. echo('<input type="submit" name="Submit" value="DALEJ">');
  131. echo ('<br>');
  132. echo('</form>');
  133.  
  134. }else
  135. {
  136. echo ('Nie zamówiłeś żadnego biletu!');
  137. echo ('<br>');
  138. echo ('<a href="index.php">POWRÓT</a>');
  139.  
  140.  
  141. }
  142.  
  143.  
  144. ?>
  145. </div>
  146.  
  147. </div>
  148.  
  149.  
  150. </div>
  151.  
  152. <div id="stopka">
  153.  
  154. <img src="grafika/stopka1.jpg" alt="logo" />
  155.  
  156. </div>
  157.  
  158.  
  159. </body>
  160. </html>

--------------------------------------------------------------------------------------------------------------------------------------------
Strona 2:

  1. <?php
  2. include "auth1.inc.php";
  3. $polaczenie=mysql_connect("localhost","root","") or
  4. die ("Sprawdź połączenie z bazą danych.");
  5. mysql_select_db("praca_dyplomowa");
  6.  
  7. $id = $_REQUEST['id'];
  8.  
  9. ?>
  10.  
  11. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  12. "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  13. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
  14. <head>
  15. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"/>
  16. <title><?php echo $nazwa; ?></title>
  17. <meta name="keywords" content="Rezerwacja biletów"/>
  18. <meta name="description" content="Rezerwacja biletów"/>
  19. <meta name="author" content="Olszewski"/>
  20. <meta name="language" content="pl"/>
  21. <link rel="Stylesheet" href="tim.css" type="text/css" />
  22.  
  23. </head>
  24.  
  25. <body>
  26.  
  27. <div id="naglowek">
  28.  
  29. <img src="grafika/baner.jpg" alt="logo" />
  30.  
  31. </div>
  32.  
  33. <div id="obszar_glowny">
  34.  
  35. <div id="zakladka">
  36.  
  37. <ul id="zakladki">
  38. <li><a href="index.php">Start</a></li>
  39. <li><a href="impreza.php">Imprezy</a></li>
  40. <li><a href="galeria.php">Galeria</a></li>
  41. <li><a href="kontakt.php">Kontakt</a></li>
  42. <?php
  43. if ($_SESSION['username']== "admin")
  44. {
  45. echo ('<li><a href="edycja_impreza.php">Edycja imprez</a></li>');
  46. echo ('<li><a href="edycja_obiekt.php">Edycja obiektów</a></li>');
  47. echo ('<li><a href="zarzadzanie.php">Zarządzania transakcjami</a></li>');
  48. echo ('<li><a href="wylogowany.php">WYLOGUJ [ ');
  49. echo $_SESSION['username'];
  50. echo('] </a></li>');
  51.  
  52. }
  53. ?>
  54. </ul>
  55.  
  56. </div>
  57.  
  58.  
  59. <div id="tresc">
  60. <ol>
  61. <li>Wybór miejsc</li>
  62. <li>Wpisanie danych</li>
  63. <li><b>Potwierdzenie rezerwacji</b></li>
  64. </ol>
  65.  
  66.  
  67.  
  68.  
  69. <?php
  70. for ($i=1;$i<91;$i++)
  71. {
  72. if ($_SESSION[$i]>1)
  73. {
  74. $a=2;
  75. $b=1;
  76. $polaczenie=mysql_connect("localhost","root","") or
  77. die ("Sprawdź połączenie z bazą danych.");
  78. mysql_select_db("praca_dyplomowa");
  79. $sql="INSERT INTO impreza_miejsce (id,impreza_id,miejsce_id,dosteposc)
  80. VALUES
  81. ('',
  82. '". $a . "',
  83. '". $id . "',
  84. '". $_SESSION[$i] . "',
  85. '". $b . "')";
  86.  
  87. echo ('Zarezerwowane');
  88. $_SESSION[$i];
  89. }
  90. }
  91.  
  92.  
  93. ?>
  94.  
  95. </div>
  96. </div>
  97.  
  98. </div>
  99.  
  100. <div id="stopka">
  101.  
  102. <img src="grafika/stopka1.jpg" alt="logo" />
  103.  
  104. </div>
  105.  
  106. </body>
  107. </html>

--------------------------------------------------------------------------------------------------------------------------------------------
auth1.inc.php:
  1. <?php
  2. session_name("rezerwacja");
  3. ?>

--------------------------------------------------------------------------------------------------------------------------------------------
Sorry za estetykę kodu
tehaha
wydaje mi się, że tak bardzo namieszałeś, że aż się w tym pogubiłeś.

1. jeżeli już wstawiasz tak dużo zmiennych to do zmiennej sesyjnej przypisz tablicę z tymi zmiennym, będzie miał lepszą kontrolę np.

zamiast $_SESSION[$i] zrób
  1. $_SESSION['tablica_z_zmiennymi'] = array()
  2. for()
  3. {
  4. $_SESSION['tablica_z_zmiennymi'][$i]
  5. }


2. wtedy nie będziesz już musiał używać pętli for() do odczytu, tylko foreach() co znowu da lepszą kontrolę i uprości sprawy
3. jeżeli używasz w zapytaniu zmiennych pochodzących od użytkownika, zawsze dawaj je w apostrofy/cudzysłowie i funkcje mysql_real_escape_string()
4. z bazą łączysz się tylko raz, a nie przy każdym zapytaniu
5. być może $_POST jest puste i dlatego nic nie jest przypisywane do zmiennych?

tenlepszy
Zatem:
jak będzie wyglądało odczytanie za pomocą pętli foreach?
Wiem, że z bazą łącze się raz kod jeszcze nie jest do końca zwalidowany. A co do zmiennej $_POST, to nie jest pusta bo ją sprawdzałem.

dzięki za rady winksmiley.jpg
tehaha
http://php.net/manual/en/control-structures.foreach.php

ciężko stwierdzić czemu Ci nie działo bo bardzo namieszałeś, dużo warunków itd i nie wiadomo gzie skrypt zachowuję się nie tak jak chciałeś

tu masz kilka rad jak diagnozować błędy Temat: Jak poprawnie zadac pytanie i tutaj Temat: Najczestsze bledy

ogólnie to możesz napisać co chcesz osiągnąć to Cię skrótowo nakieruję jak to zrobić, bo widzę, że się trochę gubisz, ale to normalne na początku:)
tenlepszy
Wiem, kod nie jest przejrzysty i mogłem wkleić tylko potrzebny fragment a nie całość. Sprawdzę jeszcze warunki, spróbuje z pętlą foreach. Najlepsze jest to, że ten sposób tj. przekazanie wartości w tablicy gdzie indeksem jest zmienna $i między stronami działa tyle że ze zmienną $_POST[$i]. Pewnie przyczyna niejasności jest jakaś banalna, tylko trzeba ją znaleźć winksmiley.jpg


Pozdrawiam
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.