Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]array w zmiennej session
Forum PHP.pl > Forum > Przedszkole
followc
witam,
nie do końca to rozumiem, ale!
utworzyłem arraya i zapakowałem go do zmiennej session mniej więcej tak:
  1. $produkt2 = array();
  2. $_SESSION['$produkt'] = $produkt2;


i wszystko ładnie smiga. Problem w tym, że kiedy na innej stronie chcę podziałać na mojej tablicy $_SESSION['$produkt'], ta tablicą jak się okazuje już nie jest. O co tu chodzi?

"Warning: array_push() [function.array-push]: First argument should be an array in..."
NickOver
Wklej:

  1. echo "<pre>";
  2. var_dump($_SESSION);
followc
Na stronie na której wszystko smiga wyglada to tak:
  1. array(3) {
  2. ["$nr_produktu"]=>
  3. int(0)
  4. ["$produkt"]=>
  5. [php]
array(4) {
[0]=>
string(6) "apple1"
[1]=>
string(10) "raspberry1"
[2]=>
string(6) "apple2"
[3]=>
string(10) "raspberry2"
}
[""]=>
string(0) ""
}
[/php]


a tam gdzie juz niechętnie
  1. array(2) {
  2. ["$nr_produktu"]=>
  3. int(1)
  4. ["$produkt"]=>
  5. NULL
  6. }



Coraz bardziej mi to wygląda na ostre pomieszanie z mojej strony
bobek358
Pokaż cały kod do tego.
followc
strona 1:
  1. if($_SESSION['$nr_produktu'] > 0){
  2. echo '>0'.$_SESSION[$produkt[$_SESSION['$nr_produktu']]];
  3. $_SESSION[$produkt[$_SESSION['$nr_produktu']]]='';
  4. echo '<br>'.$_SESSION[$produkt[$_SESSION['$nr_produktu']]];
  5. }else{
  6. $_SESSION['$nr_produktu'] = 0;
  7. $produkt2 = array();
  8. echo '1:';
  9. print_r($produkt2);
  10. array_push($produkt2, "apple1", "raspberry1");
  11. echo '<br>2:';
  12. print_r($produkt2);
  13. $_SESSION['$produkt'] = $produkt2;
  14. echo '<br>3:';
  15. print_r($_SESSION['$produkt']);
  16. array_push($_SESSION['$produkt'], "apple2", "raspberry2");
  17. echo '<br>4:';
  18. print_r($_SESSION['$produkt']);
  19. $_SESSION[$produkt[$_SESSION['$nr_produktu']]] = '';
  20. }


I strona 2:
  1. echo "<pre>";
  2. var_dump($_SESSION);
  3. $_SESSION['$nr_produktu']++;
  4. array_push($_SESSION['$produkt'], "apple7", "raspberry7");


te wszelkie array_pushe i echa służą mi do sprawdzania co się dzieje
nospor
Po pierwsze:
nazywaj indeksy normalnie a nie zmiennowo gdyz pewnego pieknego dnia mozesz sie nieźle zdziwic....

nie: ($_SESSION['$produkt']);
a: ($_SESSION['produkt']);

Po drugie:
pewnie ci sesja nie wystartowala bo wczesniej cos slales do przegladarki. Wlacz wyswietlanie bledow przed kazdym session_start a zobaczysz pewnie blad. Tu masz napisane jak:
Temat: Jak poprawnie zada pytanie
followc
Faktycznie słałem dane do przeglądarki poprzez POSTy, ale sesja musiała wystartować, bo $_SESSION['nr_produktu'] funkcjonuje OK. Problem jest jedynie z arrayem w sesji. Zaraz pobawię się w polecane wyświetlanie błędów.

Hmm... no jednak wyświetla się cała lista takich błedów "Notice: Undefined index: nr_produktu in /zamow/podsumowanie_zamowienia.php on line 91", czyli że faktycznie sesja nie startuje? Dlaczego? I jakim cudem w takim razie $_SESSION['nr_produktu'] na obu stronach pokazuje tę samą, poprawną wartość?
nospor
Na zadnej ze stron nie masz bledu
.... headers aleready sent...
?
followc
a no pojawiały się takie błędy, na co znalazłem rozwiązanie pod manualem, żeby umieścić session_start() na samym starcie pliku...
nospor
I co? Przestaly sie pojawiac te bledy z HEADERS po twojej zmianie?
followc
przestały
nospor
No ale wlaczenie wyswietlania bledow przeniosles razem z session_start czy nie? wyswietlanie bledoew nadal ma byc przed session_start...
followc
  1. <?php
  2. ini_set('display_errors','1');


Jest na samym starcie pliku
nospor
Przed oboma session_start?
I juz nie ma bledow z headers already sent?
followc
błędów z headers nie ma od dawna, kiedy to przesunąłem session_start na górę.
dopiero teraz dałem przed session_start() na pierwszej stronie i pojawiło się:
"Notice: Undefined index: nr_produktu in /zamow1/index.php on line 27
1:Array ( )
2:Array ( [0] => apple1 [1] => raspberry1 )
3:Array ( [0] => apple1 [1] => raspberry1 )
4:Array ( [0] => apple1 [1] => raspberry1 [2] => apple2 [3] => raspberry2 )
Notice: Undefined variable: produkt in /zamow/index.php on line 45
"

Czyli że sesja nie startuje? Jak to mogę naprawić?

halo, czy jest dla mnie jeszcze nadzieja?
nospor
Moim zdaniem ciagle gdzies masz headers already sent i temu ci sesja nie startuje. Ale źle to sprawdzasz i temu tego nie widzisz.

Ale jesli jakims cudem to nie to, to musisz gdzies nadpisywac ten index.

Innych opcji raczej nie ma.
followc
Błąd pt.
"Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /zamow1/index.php:12) in /zamow1/index.php on line 25"
pojawia się, gdy przesunę session_start() poniżej
  1. <!DOCTYPE html
  2. PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

Tylko powyżej błąd znika. To znaczy, że źle to sprawdzam? Jedyne znane mi rozwiązanie na obejście probleu z ob_start() nic nie zmienia... nie za bardzo wiem jak mogę inaczej
Pyton_000
Pokaż kod po zmianach
followc
  1. <?php
  2. error_reporting(E_ALL);
  3. ini_set('display_errors','1');
  4.  
  5. ?>
  6. <!DOCTYPE html
  7. PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
  8. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
  9.  
  10. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  11. <meta name="Description" content="" />
  12. <meta name="Keywords" content="" />
  13. <meta name="Author" content="" />
  14. <link rel="Stylesheet" type="text/css" href="../css/style.css" />
  15. <link rel="Stylesheet" type="text/css" href="../css/zamow.css" />
  16.  
  17. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
  18. <script src='https://www.google.com/recaptcha/api.js'></script>
  19. </head>
  20.  
  21.  
  22. <div id="container">
  23. <div id="cont-logo">
  24. <?php include 'cont-logo.php';
  25. ob_start();
  26. session_start();
  27. include 'klasa_produkt.php';
  28. //session_destroy();
  29. if($_SESSION['nr_produktu'] > 0){
  30. echo '>0'.$_SESSION[$produkt[$_SESSION['nr_produktu']]];
  31. $_SESSION[$produkt[$_SESSION['nr_produktu']]]='';
  32. echo '<br>>0'.$_SESSION[$produkt[$_SESSION['nr_produktu']]];
  33. }else{
  34. $_SESSION['nr_produktu'] = 0;
  35. $produkt2 = array();
  36. echo '1:';
  37. print_r($produkt2);
  38. array_push($produkt2, "apple1", "raspberry1");
  39. echo '<br>2:';
  40. print_r($produkt2);
  41. $_SESSION['produkt3'] = $produkt2;
  42. echo '<br>3:';
  43. print_r($_SESSION['produkt3']);
  44. array_push($_SESSION['produkt3'], "apple2", "raspberry2");
  45. echo '<br>4:';
  46. print_r($_SESSION['produkt3']);
  47. $_SESSION[$produkt[$_SESSION['nr_produktu']]] = '';
  48. }
  49. ob_end_flush();
  50. ?>
  51.  
  52. </div>
  53.  
  54. <div id="cont-section">
  55. <div id="menu">
  56. <?php include 'menu.php' ?>
  57. </div>
  58.  
  59. <div id="content">
  60. <form class="no_class" action="podsumowanie_zamowienia.php" method="post" enctype="multipart/form-data">
  61. ...
  62. var_dump($_SESSION);?>
  63. <input type="submit" value="Następny krok">
  64.  
  65. </form>
  66.  
  67. </div>
  68.  
  69.  
  70. <div id="mapki">
  71. <?php include 'mapki.php' ?>
  72. </div>
  73.  
  74. </div>
  75.  
  76. </div>
  77.  
  78. <script type="text/javascript" src="../js/zamow.js"></script>
  79.  
  80. </body>
  81. </html>
bobek358
To
powinno być w 4 linii.
Pyton_000
po pierwsze:
if(isset($_SESSION['nr_produktu']) && $_SESSION['nr_produktu'] > 0))

po drugie ob_start wstawia się na początku strony, inaczej złapie Ci do bufora tylko to co jest PO. Tak więc wywal te ob_... i wstaw normalnie session_start na samym początku pliku.
po trzecie co Ci zwraca po przesłaniu formularza? (tam też musisz mieć session_start() );
viking
Poczytaj sobie http://wwwgo.pl/article/1/protokol_http
Robisz cos takiego. Wysyłasz treść i chcesz dopiero ustawiać nagłówki które musiały być wysłane duuużo wcześniej żeby przeglądarka wiedziała co zrobić z wygenerowaną treścią.
followc
Jest session_start() na samym poczatku pliku odbierającego dane.
$_SESSION['nr_produktu jest'] jest zwiększany o jeden po każdym wyświetleniu tej strony i to powiększenie jest poprawnie widoczne jeśli wróci się na stronę poprzednią. Problem jest w arrayu do którego chciałem wrzucać obiekty swojej klasy tworzone poprzez zapisywanie do nich zmiennie POSTowane z poprzedniej...
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.