Jak skorygować poniższy błąd

0

Dlaczego to wyświetla ? Jak zmienić kod, aby nie było tego błędu ?
Warning: PHP Startup: Cannot start session when headers already sent in /koszyk.php on line 3
Zawartość koszyka

brak sesji

W poniższym programie koszyk.php:

<?php

session_start();

?>


<!DOCTYPE HTML>

<html>

<head>

<title> Koszyk </title>

<meta http-equiv="Content-Type" content="text/html;
               charset=UTF-8">

</head>

<body>

<p><b> Zawartość koszyka </b></p>

<?php

if (isSet($_SESSION['koszyk'])) {
foreach(unserialize($_SESSION['koszyk']) as $produkt) {

echo "<li>" . $produkt . "</li>";

}

}


else {

echo "brak sesji";

}

?>

<p><a href="http://serwer2051407.home.pl/lista.php">Przejdz do listy produktów</a></p>

</body>

</html> 



4

Dajesz na wyjście coś (choćby spacje / nowe linie) przed nagłówkami.

Zeby poprawic, tzreba znaleźć skąd te białe znaki pochodzą

3

Może też chodzić o https://pl.wikipedia.org/wiki/BOM_(informatyka)
niektóre edytory go sobie doklejają na początku pliku.

0

nie rozumiem....

0

when headers already sent ?

0

Generalnie zacznijmy od tego, co on widzi jako nagłówki ?

0

zupełnie nie jarzę

0

@adamon: Zmartwię Cię, http://serwer2051407.home.pl/lista.php tutaj masz ten sam błąd.

3

PHP stara się wysyłać odpowiedz do użytkownika na bieżąco w trakcie działania skryptu (wiem, uproszczenie).
Jeżeli trafi na coś co uzna za treść odpowiedzi to wysyła nagłówki i tą treść. I jeżeli w tym momencie skrypt będzie chciał te nagłówki zmodyfikować to otrzymasz błąd (jak wyżej).
Dlatego w linii 3 funkcja operująca na nagłówkach ma problem. Coś już zostało wysłane.
Winne mogą być:

  • jakiś niewidoczny znak na początku pliku (podpowiedz @AnyKtokolwiek)
  • plik może być wywołany przez inny plik który już coś wysłał
  • nieodpowiedni format pliku (podpowiedz @Freja Draco )
  • coś w ustawieniach serwera.

Nie widać tego i ciężko powiedzieć "na oko" co to jest.

Czytaj, eksperymentuj, staraj się zrozumieć a nie tylko wkleić gotowca.

1

Najprościej mówiąc, przed:

<?php

session_start();

Nie mogą pojawić się żadne znaki, ani w tym pliku, ani ew w żadnym innym, który ten plik includuje.

0

przecież tam nie ma żadnych znaków

2
adamon napisał(a):

przecież tam nie ma żadnych znaków

Wszystkie znaki na niebie i ziemi wskazują, że jednak jakieś są.

0

To jak to zmienić, aby działało ? Zupełnie nie wiem.

1

No dobrze, coś zrozumiałeś z tego co było sugerowane?
Sprawdziłeś kodowanie pliku, w którym piszesz ten kod? Jakie ono jest?
Jak jest ten plik wywoływany? Nie jest użyty include w innym pliku?

0
adamon napisał(a):

To jak to zmienić, aby działało ? Zupełnie nie wiem.

W twoim wypadku najszybciej będzie pokazać te pliki komuś znającego podstawy PHP i poprosić o pomoc.

0

kodowanie UTF 8

0

przecież wiem jak zapisuję plik

0
Freja Draco napisał(a):
adamon napisał(a):

To jak to zmienić, aby działało ? Zupełnie nie wiem.

W twoim wypadku najszybciej będzie pokazać te pliki komuś znającego podstawy PHP i poprosić o pomoc.

Powiedziałbym, że dać komuś ten projekt i się nim nie zajmować.
Znalezienie w/w magicznych znaków to tylko 1/1000 tych problemów, które trzeba będzie rozwiązać, a Kolega przez 4 lata nie ruszył z miejsca, mniemam niczego nie przeczytał n/t PHP, z analizą problemów nawet nie wystartował ...

0

Zmodyfikowałem program <?php session_start(); ?>

<!DOCTYPE HTML> <html> <head> <title> Koszyk </title> </head> <body>

Zawartość koszyka

<?php if (isSet($_SESSION['koszyk'])) { foreach(unserialize($_SESSION['koszyk']) as $produkt) { echo "" . $produkt . ""; } } else { echo "brak sesji"; } ?>

Przejdz do listy produktów

</body> </html>

I teraz pisze mi, że ma brak sesji. :

1

Bo nie masz zapisanej zmiennej sesyjnej o nazwie koszyk.

0

Dlaczego nie mam ? $_SESSION['koszyk']

2
adamon napisał(a):

Dlaczego nie mam ? $_SESSION['koszyk']

Bo nie rozumiesz, co robisz.

2

@adamon: Pisano już tobie wcześniej o podstawowych błędach. Teraz nie chcesz ich zrozumieć tylko piszesz "a czemu? a czemu?". Powtórzę jeszcze raz. Na stronie http://serwer2051407.home.pl/lista.php masz tes san warning odnośnie sesji. Zakładam, że w tym pliku dodaje się produkty do sesji (chociaż nie ma tam żadnego przycisku). Siłą rzeczy nie będziesz miał tych danych w sesji bo nigdzie ich nie zapisujesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1