Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tablica sesyjna i jej wyświetlanie
Forum PHP.pl > Forum > Przedszkole
hunter444
Witam. Mam problemy z pętlą foreach wyświetlającą zawartość mojej tablicy
Tak wygląda formularz:
  1.  
  2. <form action="" method="post">
  3. <tr><td>Imię:</td><td> <input type="text" name="imie" value="<?= $imie; ?>" /> </td></tr>
  4. <tr><td>Nazwisko:</td><td> <input type="text" name="nazwisko" value="<?= $nazwisko; ?>" /> </td></tr>
  5. <tr><td>Płeć</td><td> <input type="radio" name="plec" value="kobieta"
  6. <?php if ((isset($_POST['plec']) && $_POST['plec'] == 'kobieta')) { echo 'checked="checked"';}?> />kobieta
  7. <input type="radio" name="plec" value="męźczyzna"
  8. <?php if (isset($_POST['plec']) && $_POST['plec'] == 'męźczyzna') echo 'checked="checked"'; ?> />Mężczyzna</td></tr>
  9.  
  10. <tr><td>Nazwisko panieńskie:</td><td> <input type="text" name="n_panien" value="<?= $n_panien; ?>" /> </td></tr>
  11. <tr><td>E-mail:</td><td> <input type="text" name="email" value="<?= $email; ?>" /> </td></tr>
  12. <tr><td>kod pocztowy:</td><td> <input type="text" name="kod" value="<?= $kod; ?>" /> </td></tr>
  13. <center><button type="submit" name="submit">Wyślij</button></center> <br /><br />
  14.  
  15. </form>
  16.  


Tak wygląda wpisywanie do tablicy formularza (session start jest oczywiście na początku pliku php

  1.  
  2. $n=0;
  3. $tablica[$n]['imie']=trim($_POST["imie"]);
  4. $tablica[$n]['nazwisko']=trim($_POST["nazwisko"]);
  5. $tablica[$n]['plec']=trim($_POST["plec"]);
  6. $tablica[$n]['n_panien']=trim($_POST["n_panien"]);
  7. $tablica[$n]['email']=trim($_POST["email"]);
  8. $tablica[$n]['kod']=trim($_POST["kod"]);
  9. $n++;
  10. $_SESSION['tab'] = $tablica;


Tak wygląda pętla w której próbuję wyświetlić dane z tablicy, niestety nie umiem jej poprawnie zbudować aby wyświetliła to co chcę. Bardzo proszę o podanie przykładowego kodu w którym będę mógł zrozumieć w jaki sposób dobrać się do mojej tablicy:

  1.  
  2. <?php
  3.  
  4.  
  5. foreach($_SESSION['tab'] as $indeks)
  6. {
  7. foreach($_SESSION['tab'][$indeks] as $nazwa)
  8. {
  9. foreach($_SESSION['tab'][$indeks][$nazwa] as $wartosc)
  10. {
  11. echo $indeks;echo $nazwa; echo $wartosc;
  12. }
  13. }
  14. }
  15.  
  16.  
  17. ?>
  18.  


indeks- pętla miala lecieć po wszystkich wybiarach
nazwa - po wszystkich nazwach np. imie, nazwisko itd.
wartość - po wszystkich wartościach danej nazwy np. Jan, Kowalski ....

Jako wynik działania pętli chciałem uzyskać taki efekt
0 Imie: Jan
0 Naziwsko: Kowalski
.......
1 Imie: Krzysztof
1 Nazwisko: Nowak
emillo91
Nie musisz tworzyć tablicy dynamicznie tzn w pętli. Możesz robić to na tablicy asocjacyjnej czyli:
  1. $tablica = array();
  2. $tablica['imie'] = "ala";
  3. $tablica['nazwisko'] = "makota";

następnie zmienną $tablica zapisujesz do utworzonej sesji:
  1. $_SESSION['jakasnazwasesji'] = $tablica;

W tym momencie twoja zmienna sesyjna jest teraz zwykłą tablicą asocjacyjną do której odwołujesz się po wartościach imie, nazwisko
Tablicę którą Ty próbowałeś utworzyć w pętli nazywa się trójwymiarową bądź wielowymiarową(tablica tablic) czyli:
  1. pętla{
  2. $tablica[0]['imie']=trim($_POST["imie"]);
  3. $tablica[1]['nazwisko']=trim($_POST["nazwisko"]);
  4. $tablica[2]['plec']=trim($_POST["plec"]);
  5. }
  6. $_SESSION['tab'] = $tablica;

Żeby odwołać się do powiedzmy imienia z Twojej tablicy umieszczonej w zmiennej sesyjnej to musisz zrobić takie coś:
  1. $_SESSION['tab'][0]['imie'];

W Twoim przypadku nie ma potrzeby tworzenia tablicy wielowymiarowej chyba że chcesz zawrzeć jakieś dodatkowe informacje np. dla imienia
Tomplus
A finalnie nawiązując do przedmówcy
W linii 5. zamiast:
  1. foreach($_SESSION['tab'] as $wartosc) {
  2. echo $wartosc['imie'] .' '.$wartosc['nazwisko'];
  3. }


Chociaż u Ciebie pewnie najlepsza będzie forma:
  1. $tablica = array();
  2. {
  3. $tablica['imie'] = "ala";
  4. $tablica['nazwisko'] = "makota";
  5. }
  6. $_SESSION['tab'] = $tablica;
hunter444
Niestety chyba czegoś nie zrozumiałem. Poniższy kod

  1. $tablica = array();
  2. {
  3. $tablica['imie']=trim($_POST["imie"]);
  4. $tablica['nazwisko']=trim($_POST["nazwisko"]);
  5. $tablica['plec']=trim($_POST["plec"]);
  6. $tablica['n_panien']=trim($_POST["n_panien"]);
  7. $tablica['email']=trim($_POST["email"]);
  8. $tablica['kod']=trim($_POST["kod"]);
  9. }
  10. $_SESSION['tab'] = $tablica;
  11. }
  12.  
  13.  
  14. foreach($_SESSION['tab'] as $wartosc) {
  15. echo '<b> Imię </b>'.$wartosc['imie'].'<br />';
  16. echo '<b> Nazwisko </b>'.$wartosc['nazwisko'].'<br />';
  17. echo '<b> Płeć </b>'.$wartosc['plec'].'<br />';
  18. echo '<b> Zazwisko panieńske </b>'.$wartosc['n_panien'].'<br />';
  19. echo '<b> email </b>'.$wartosc['email'].'<br />';
  20. echo '<b> kod pocztowy</b>'.$wartosc['kod'].'<br />';
  21. echo '<br /> <br />';
  22. }


Powoduje dwa błędy:
1. Każde kolejne dodawanie rekordu wymazuje poprzednie rekordy. Przykładowo dodaje użytkownika, potem dodaje kolejnego i poprzedni się kasuje. Chcę dodać n użytkowników w formularzu a następnie wyświetlić n użytkowników w raz z ich atrybutami (imie, nazwisko, ...)

2. Dla danych wejściowych: Adam, Nowak,Mężczyzna, Nowak, mmm@wp.pl, 73-111 wyświetla się następująca zawartość tablicy (czyli pierwszy znak każdego pola):




Imię A
Nazwisko A
Płeć A
Zazwisko panieńske A
email A
kod pocztowyA


Imię N
Nazwisko N
Płeć N
Zazwisko panieńske N
email N
kod pocztowyN


Imię m
Nazwisko m
Płeć m
Zazwisko panieńske m
email m
kod pocztowy m


Imię N
Nazwisko N
Płeć N
Zazwisko panieńske N
email N
kod pocztowyN


Imię m
Nazwisko m
Płeć m
Zazwisko panieńske m
email m
kod pocztowym


Imię 7
Nazwisko 7
Płeć 7
Zazwisko panieńske 7
email 7
kod pocztowy7



emillo91
Dobra. Jeżeli ma to być tablica wielowymiarowa to za każdym razem przy dynamicznym uzupełnianiu tej tablicy musisz sprawdzać jej rozmiar żeby nie zapełnić drugi raz tego samego indeksu czyli:
  1. if(!isset($_SESSION['jakastablica'])){
  2. $tabindeks = 0;
  3. }
  4. else{
  5. $tabindeks = sizeof($_SESSION['jakastablica']);
  6. }

Następnie sprawdzasz czy formularz został wysłany i tworzysz pola tablicy:
  1. $tablica = array();
  2. $tablica['imie'] = $_POST['imie'];

Na końcu przypisujesz te pola do zmiennej sesyjnej i dopisujesz indeks tablicy:
  1. $_SESSION['jakastablica'][$tabindeks] = $tablica;

a odwołujesz się tak:
  1. $_SESSION['jakastablica'][0]['imie'];
  2. $_SESSION['jakastablica'][1]['imie'];
  3. itd...
hunter444
Dziękuję za pomoc. Zrozumiałem już swoją głupotę.

Mam jeszcze jeden problem.
Oprócz wpisywania danych do tablicy sesyjnej mam jeszcze licznik ile danych wprowadzono w trakcie trwania sesji.
Gdy przykładowo wprowadzam dane w Internet Explorer to wszystko jest ok, zmienne sesyjne kasują się po zamknięciu przeglądarki.
Jednak problem jest w przypadku chrome. Po wyłączeniu przeglądarki, odczekani paru minut i ponownym wejściu na stronę, wszystkie zmienne sesyjne nadal są dostępne.
Jak zrobić aby po opuszczeniu strony wymusić usuwanie danych ?
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.