Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Tablica sesyjna i jej wyświetlanie
hunter444
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 16.10.2017

Ostrzeżenie: (0%)
-----


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

Ten post edytował hunter444 16.10.2017, 22:00:13
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
emillo91
post
Post #2





Grupa: Zarejestrowani
Postów: 129
Pomógł: 13
Dołączył: 29.03.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Tomplus
post
Post #3





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


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;


Ten post edytował Tomplus 17.10.2017, 06:05:37
Go to the top of the page
+Quote Post
hunter444
post
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 16.10.2017

Ostrzeżenie: (0%)
-----


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



Go to the top of the page
+Quote Post
emillo91
post
Post #5





Grupa: Zarejestrowani
Postów: 129
Pomógł: 13
Dołączył: 29.03.2012

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
hunter444
post
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 16.10.2017

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
viking
post
Post #7





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Ustaw krótki czas życia cookie. http://php.net/manual/pl/function.session-...okie-params.php oraz https://stackoverflow.com/questions/1061795...session-cookies

Ten post edytował viking 17.10.2017, 11:43:51


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:46