followc
4.08.2015, 00:50:56
witam,
nie do końca to rozumiem, ale!
utworzyłem arraya i zapakowałem go do zmiennej session mniej więcej tak:
$_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
4.08.2015, 06:22:50
followc
4.08.2015, 11:27:59
Na stronie na której wszystko smiga wyglada to tak:
["$nr_produktu"]=>
int(0)
["$produkt"]=>
[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
["$nr_produktu"]=>
int(1)
["$produkt"]=>
NULL
}
Coraz bardziej mi to wygląda na ostre pomieszanie z mojej strony
bobek358
4.08.2015, 11:38:12
Pokaż cały kod do tego.
followc
4.08.2015, 11:45:54
strona 1:
if($_SESSION['$nr_produktu'] > 0){
echo '>0'.$_SESSION[$produkt[$_SESSION['$nr_produktu']]]; $_SESSION[$produkt[$_SESSION['$nr_produktu']]]='';
echo '<br>'.$_SESSION[$produkt[$_SESSION['$nr_produktu']]]; }else{
$_SESSION['$nr_produktu'] = 0;
$_SESSION['$produkt'] = $produkt2;
array_push($_SESSION['$produkt'], "apple2", "raspberry2"); $_SESSION[$produkt[$_SESSION['$nr_produktu']]] = '';
}
I strona 2:
$_SESSION['$nr_produktu']++;
array_push($_SESSION['$produkt'], "apple7", "raspberry7");
te wszelkie array_pushe i echa służą mi do sprawdzania co się dzieje
nospor
4.08.2015, 11:53:22
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
4.08.2015, 12:11:43
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
4.08.2015, 12:25:58
Na zadnej ze stron nie masz bledu
.... headers aleready sent...
?
followc
4.08.2015, 12:28:36
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
4.08.2015, 12:36:50
I co? Przestaly sie pojawiac te bledy z HEADERS po twojej zmianie?
followc
4.08.2015, 12:40:37
przestały
nospor
4.08.2015, 12:43:05
No ale wlaczenie wyswietlania bledow przeniosles razem z session_start czy nie? wyswietlanie bledoew nadal ma byc przed session_start...
followc
4.08.2015, 12:50:01
<?php
Jest na samym starcie pliku
nospor
4.08.2015, 12:52:23
Przed oboma session_start?
I juz nie ma bledow z headers already sent?
followc
5.08.2015, 10:39:05
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
5.08.2015, 10:53:51
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
5.08.2015, 11:24:20
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
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"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
5.08.2015, 11:27:55
Pokaż kod po zmianach
followc
5.08.2015, 11:42:16
<?php
error_reporting(E_ALL);
ini_set('display_errors','1');
?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="Description" content="" /> <meta name="Keywords" content="" /> <meta name="Author" content="" /> <link rel="Stylesheet" type="text/css" href="../css/style.css" /> <link rel="Stylesheet" type="text/css" href="../css/zamow.css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script src='https://www.google.com/recaptcha/api.js'></script>
<?php include 'cont-logo.php';
ob_start();
session_start();
include 'klasa_produkt.php';
//session_destroy();
if($_SESSION['nr_produktu'] > 0){
echo '>0'.$_SESSION[$produkt[$_SESSION['nr_produktu']]];
$_SESSION[$produkt[$_SESSION['nr_produktu']]]='';
echo '
<br>>0'.$_SESSION[$produkt[$_SESSION['nr_produktu']]];
}else{
$_SESSION['nr_produktu'] = 0;
$produkt2 = array();
echo '1:';
print_r($produkt2);
array_push($produkt2, "apple1", "raspberry1");
print_r($produkt2);
$_SESSION['produkt3'] = $produkt2;
print_r($_SESSION['produkt3']);
array_push($_SESSION['produkt3'], "apple2", "raspberry2");
print_r($_SESSION['produkt3']);
$_SESSION[$produkt[$_SESSION['nr_produktu']]] = '';
}
ob_end_flush();
?>
<?php include 'menu.php' ?>
<form class="no_class" action="podsumowanie_zamowienia.php" method="post" enctype="multipart/form-data"> ...
var_dump($_SESSION);?>
<input type="submit" value="Następny krok">
<?php include 'mapki.php' ?>
<script type="text/javascript" src="../js/zamow.js"></script>
bobek358
5.08.2015, 11:50:01
To
powinno być w 4 linii.
Pyton_000
5.08.2015, 11:52:26
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
5.08.2015, 11:56:26
Poczytaj sobie
http://wwwgo.pl/article/1/protokol_httpRobisz 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
5.08.2015, 11:58:28
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...
viking
5.08.2015, 12:04:36
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.