Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Odczyt tablicy z sesji
Forum PHP.pl > Forum > Przedszkole
Robert3d
Odczyt tablicy z sesji PROBLEM
Witam mam problem mam sobie taki oto kodzik ale nie wiem dlaczego nie wyświetlają się prawidłowe dane. Jest to wycinek kodu session start itp wszystko działa.

  1. $dane = $lacz ->query(
  2. "SELECT * FROM Jablusza.cioci;"
  3. ) or die($lacz -> error);
  4.  
  5.  
  6. $_SESSION['dane'] = $dane;
  7.  
  8. foreach($_SESSION['dane'] as $klucz => $wartosc){
  9. echo "<b>Klucz</b>: ".$klucz."- wartosc: ".$wartosc."<br>";


by nie zaśmiecać zapytanie SQL jest zmienione.

Taki mam wynik

Klucz: current_field- wartosc:
Klucz: field_count- wartosc:
Klucz: lengths- wartosc:
Klucz: num_rows- wartosc:
Klucz: type- wartosc:
Fifi209
Skąd mamy wiedzieć co zwraca query?
Robert3d
zwraca dane Imie nazwisko adres itp. ale nie chcą się wyświetlić po przeniesieniu ich do $_SESSION bo tak bez sesji działają poprawnie...
melkorm
  1. var_dump($dane);

Bo wątpię że query zwraca tablicę danych.
Robert3d
Dobrze może nie zbyt dokładnie wytłumaczyłem o co mi chodzi (za co przepraszam). więc teraz obszerniej.

PLIK NR 1
  1. function lacz_bd() {
  2. $wynik = new mysqli('localhost', 'root');
  3. if (!$wynik) {
  4. return false;
  5. }
  6. $wynik->autocommit(TRUE);
  7. return $wynik;
  8. }
  9. $lacz = lacz_bd();
  10. $lacz->set_charset("utf8");
  11. $dane = $lacz ->query(
  12. "SELECT * FROM dane.klienci"
  13. ) or die($lacz -> error);
  14. $_SESSION['dane'] = $dane; // <--- jest sobie session jak by 2 plik dac tutaj to by działało.
  15. header("Location: index.php") //<--- wracamy do pliku gdzie ma sie wyswietlic zawartosc


PLIK NR 2
  1. while ($row = mysqli_fetch_assoc($_SESSION['dane'])){ ?>
  2. echo $row['imie'];
  3. echo $row['nazwisko'];
  4. echo $row['mail'];
  5. echo $row['adres'];
  6. }


PROBLEM: Gdy zrobię to w jednym pliku wszystko działa... jednak jak zrobię to przez $_SESSION dane jak by to powiedzieć wyparowują?
mat-bi
serialize
unserialize
Robert3d
Próbowałem niestety bez skutku dalej to samo ...
dalej wyskakuje


Warning: mysqli_fetch_assoc() [function.mysqli-fetch-assoc]: Couldn't fetch mysqli_result in D:[...]index.php on line 231
potreb
Zapisując dane przez serialize, w których masz znaki specjalne można zastosować htmlspecialchars, a przy odczycie zrobić decode. U siebie musiałem tak zrobić, ponieważ przy serializacji danych z google maps posypała mi się serializacja.

Zrób sobie var_dump sesji przed while i zobacz co masz

  1. foreach($_SESSION['cos'] as $row) {
  2. echo $row;
  3. }


I rozbij foreachem tablicę
Robert3d
VAR_DUMP
rezultat

  1. string(115) "O:13:"mysqli_result":5:{s:13:"current_field";N;s:11:"field_count";N;s:7:"lengths";N;s:8:"num_rows";N;s:4:"type";N;}"



jak mialem rozbudowane o foreach to dane wyskakiwały mi podwójnie wink.gif ale to jak testowalem an jednym pliku.
potreb
A jak masz jak poniżej też masz podwójnie smile.gif
  1.  
  2. $paa = $pdo->query("SELECT * FROM tabela");
  3. $_SESSION['cos'] = $paa->Fetch(PDO::FETCH_ASSOC);
  4.  
  5. //var_dump($_SESSION['cos']);
  6.  
  7.  
  8.  
  9. foreach($_SESSION['cos'] as $row) {
  10. echo $row."<br/>";
  11. }
Robert3d
Samo wyświetlanie informacji gdy łączę się z bazą w jednym pliku nawet kopiując rezultat zapytania do $_SESSION i odczytując go ale w obrębie 1 PLIKU działa poprawnie. Problemem jest to że jak idzie drugi plik to już dupa...
Nie jestem jakiś mega wymiatacz wciąż się uczę... Ale już nie wiem jak mam to rozwiązać... zapisywanie do bazy rezulatatu zapytania tlyko po to by zapytać o rezultat zapytania z drugiego pliku mija się z celem a rozwiązaniem miała być zmienna $_SESSION ale ta nie działa dla rezultatu zapytania.
Co więcej spróbowałem przenieść zwykły string w zmiennej session i co i działa... Wiec cos musi być zle sad.gif
mortus
Klasa MySQLi_Result nie jest dostosowana do standardowej serializacji (prawdopodobnie dlatego, że zawiera zmienne prywatne lub chronione, które nie poddają się standardowej serializacji - "podobny" temat na tym forum już był), co równocześnie oznacza, że nie możemy przekazać obiektu tej klasy do sesji. Jedynym rozwiązaniem jest przepisanie zawartości do tablicy i zapisanie w sesji tej tablicy (zserializowanej lub nie).
[PHP] users.php - pobierz, plaintext
  1. <?php
  2. function lacz_bd() {
  3. $wynik = new mysqli('localhost', 'root');
  4. if (!$wynik) {
  5. return false;
  6. }
  7. $wynik->autocommit(TRUE);
  8. return $wynik;
  9. }
  10. $lacz = lacz_bd();
  11. $lacz->set_charset("utf8");
  12. $dane = $lacz ->query(
  13. "SELECT * FROM dane.klienci"
  14. ) or die($lacz -> error);
  15. $i = 0;
  16. while ($row = mysqli_fetch_assoc($dane)){
  17. $users[$i]['imie'] = $row['imie'];
  18. $users[$i]['nazwisko'] = $row['nazwisko'];
  19. $users[$i]['mail'] = $row['mail'];
  20. $users[$i]['adres'] = $row['adres'];
  21. $i++;
  22. }
  23. $_SESSION['dane'] = $users; // ew. serialize($users)
  24. header("Location: index.php")
[PHP] users.php - pobierz, plaintext
[PHP] index.php - pobierz, plaintext
  1. <?php
  2. $user = $_SESSION['dane']; // ew. unserialize($_SESSION['dane'])
  3. foreach($users as $number => $user) {
  4. echo $user['imie'];
  5. echo $user['nazwisko'];
  6. echo $user['mail'];
  7. echo $user['adres'];
  8. }
[PHP] index.php - pobierz, plaintext

Robert3d
mortus <-- dziękuję ci za pomoc i cenną wiedzę apropo $_SESSION oraz mysqli
Czyli w skrócie session nie lubi informacji zapisywanych bezpośrednio z bazy danych i trzeba zmienić to na zwykłą tabelę.

Problem rozwiązany. Wszystkim dziękuję za pomoc smile.gif
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.