Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Odczyt tablicy w sesji
Forum PHP.pl > Forum > Przedszkole
mtweeman
Witam,

w zadaniu które wykonuję przechodzę pomiędzy plikiem html, będącym formularzem, a plikiem php, w którym dane mają zostać zapisane do tablicy w sesji. Gdy zostaną wprowadzone wszsytkie dane program ma przechodzić z pliku php do innego pliku php i dokonywać na danych zapisanych w tablicy pewnych operacji.

  1. //pierwszy z plików php
  2.  
  3. $_SESSION['i']=0; //zmienna służąca zapamiętaniu ile rekordów w tabeli wprowadzono
  4.  
  5. $id_prz['i']=$id_p;
  6. $godz['i']=$godzina; //zmienne id_p oraz godzina zostają przypisane do odpowiednich pól tablicy id_prz i godz
  7.  
  8. $_SESSION['id_prz']=$id_prz;
  9. $_SESSION['godz']=$godz;
  10.  
  11. print $_SESSION['id_prz']['i']; //wypisanie na ekranie monitora danych z tabeli dla obecnej wartości i
  12. print $_SESSION['godz']['i'];

  1. drugi plik php
  2. for($j=0; $j<$_SESSION['i']; $j++)
  3. {
  4. print $_SESSION['id_p'][$j]; print ('<br>');
  5. print $_SESSION['godz'][$j]; print ('<br>');
  6. }


Tu pojawia się problem, bo nie zostają wydrukowane wartości id_p oraz godz na ekranie. Gdzie popełniam błąd?
nospor
print $_SESSION['id_p'][$j]
Przecież ty nie masz w sesji takiego indeksu 'id_p'[0] ani 'id_p'[1] ani....

zrob sobie
print_r($_SESSION);
bo widzę nie ogarniasz tego co sam tam wkładasz.
iwosz
Zakładając że łączysz się z bazą danych, wyciągasz z niej dane i je przeglądasz, robisz tak:
  1. //pierwszy z plików php
  2.  
  3. // dla bazy MySQL:
  4. // Connecting, selecting database
  5. $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
  6. or die('Could not connect: ' . mysql_error());
  7. mysql_select_db('my_database') or die('Could not select database');
  8.  
  9. // Performing SQL query
  10. $query = 'SELECT * FROM my_table';
  11. $result = mysql_query($query) or die('Query failed: ' . mysql_error());
  12.  
  13. // tutaj przegladamy pobrane rekordy z bazy:
  14. $_SESSION['dane']; $id = 0;
  15. while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  16. $_SESSION['dane'][$id]['id_prz'] = $row['id_prz']; // zakladajac ze kolumna w tabeli nazywa sie 'id_prz'
  17. $_SESSION['dane'][$id]['godzina'] = $row['godzina']; // zakladajac ze kolumna w tabeli nazywa sie 'godzina'
  18. $id++;
  19. }
  20.  
  21. print $_SESSION['dane']; //wypisanie na ekranie monitora danych pobranych z tabeli

Przeglądanie pobranych danych w drugim pliku .php:
  1. drugi plik php
  2. for($j=0; $j<count($_SESSION['dane']); $j++)
  3. {
  4. print $_SESSION['dane'][$j]['id_prz']; print ('<br>');
  5. print $_SESSION['dane'][$j]['godzina']; print ('<br>');
  6. }


Na przyszłość podawaj więcej info, np. jak wygląda tabela w bazie.
mtweeman
@iwosz, nie łączę się z bazą danych, dopiero kiedy pobiorę od użytkownika wszystkie dane to wprowadzam je do bazy

@nospor, zatem jak odpowiednio zaindeksować te dane w sesji? grzebałem troche w internecie i to wszystko sensowne co znalazłem na ten temat. wiem co chce zrobić, ale brakuje mi znajomości phpa.
iwosz
Ok, no więc inaczej, mamy form:
  1. <form action="plik1.php" method="post">
  2. <input name="id_prz" type="text" />
  3. <input name="godzina" type="text" />
  4. <input value="Wyslij" type="submit" />
  5. </form>

W pliku plik1.php odbieramy dane z forma:
  1. $_SESSION['form']['id_prz'] = $_REQUEST['id_prz'];
  2. $_SESSION['form']['godzina'] = $_REQUEST['godzina'];
  3.  
  4. echo '<pre>';
  5. print_r($_SESSION['form']); // wyswietlamy dane odebrane z forma

W pliku plik2.php odczytujemy dane z sesji i robimy z nimi co chcemy:
  1. $id_prz = $_SESSION['form']['id_prz'];
  2. $godzina = $_SESSION['form']['godzina'];
  3.  
  4. // robimy z odczytanymi danymi co chcemy

i z bani thumbsupsmileyanim.gif
mtweeman
Niestety częściowo nie działa. Ta część na której najbardziej mi zależy, tzn. dostęp do danych w drugim pliku php jak w przypadku tablicy nie funkcjonuje. Otrzymuję wprawdzie ostatnie wprowadzone dane przez użytkownika, tj. id_prz oraz godz, ale nie ma wcześniejszych.
mtweeman
Przy zapamietywaniu kolejnych rekordów w sesji powinien być jakiś licznik żeby indeksować koeljne wpisy gotyczące id_prz oraz godziny. W ten sposób będzie można odczytać w drugim pliku php id_prz oraz godziny jakie były kolejno wprowadzane przez użytkownika.
iwosz
Ehh, czemu tego od razu nie piszesz? Ok, więc zapisując do sesji trzeba dodać indeks:

plik1.php:
  1. $_SESSION['form'][count($_SESSION['form'])]['id_prz'] = $_REQUEST['id_prz'];
  2. $_SESSION['form'][count($_SESSION['form'])]['godzina'] = $_REQUEST['godzina'];
  3.  
  4. echo '<pre>';
  5. print_r($_SESSION['form']); // wyswietlamy dane odebrane z forma

count() zlicza elementy w tablicy, tablica jest indeksowana od 0 więc za każdym razem count() zwróci numer o 1 większy (dla tab[0] count() zwróci 1 itd.)

i dalej w plik2.php mamy już tablice wielowymiarową więc musimy ją przeglądać:
  1. foreach($_SESSION['form'] as $formVals) {
  2. $id_prz = $formVals['id_prz'];
  3. $godzina = $formVals['godzina'];
  4.  
  5. // robimy z odczytanymi danymi co chcemy
  6. }
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.