Jak skorygować poniższy błąd

Jak skorygować poniższy błąd
AD
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:403
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:

Kopiuj
<?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> 



edytowany 1x, ostatnio: cerrato
Delor
Don Kichot walczył z wiatrakami, adamon z koszykami.
axelbest
nie ma takiej funkcji jak isSet, jest za to isset :)
jurek1980
@axelbest: isSet to alias, będzie działać. Nie pamiętam w której wersji to wycofali ale obecnie to nawet w manualu tego nie ma. To tylko pokazuje, że ten skopiowany kod jest z epoki krzemu łupanego.
DR
Czytając takie tematy jak ten niezmiennie przypomina mi się mój kolega, który zwykł mawiać: Dobrze, że my nie piszemy swoftu dla samolotow i mam nadzieję, że kolega, jeśli kiedykolwiek, dostanie jakąś pracę związaną z programowaniem, to skupi się na robieniu koszyków i niczym więcej bo strach będzie wyjść z domu XD
AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:6 dni
  • Postów:3561
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ą


Bo C to najlepszy język, każdy uczeń ci to powie
Freja Draco
Freja Draco
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
3

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


AD
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:403
0

nie rozumiem....

AD
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:403
0

when headers already sent ?

AD
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:403
0

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

edytowany 1x, ostatnio: adamon
obscurity
chodzi o nagłówki HTTP - wysyłane przed treścią strony
AD
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:403
0

zupełnie nie jarzę

L7
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 6 godzin
  • Postów:433
0

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

Delor
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 2 lata
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.

Freja Draco
Freja Draco
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
1

Najprościej mówiąc, przed:

Kopiuj
<?php

session_start();

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


AD
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:403
0

przecież tam nie ma żadnych znaków

Freja Draco
Freja Draco
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
2
adamon napisał(a):

przecież tam nie ma żadnych znaków

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


AD
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:403
0

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

jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 9 godzin
  • Postów:3462
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?

Freja Draco
Freja Draco
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
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.


AD
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:403
0

kodowanie UTF 8

jurek1980
Z BOM czy bez. Jak sprawdzasz?
AD
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:403
0

przecież wiem jak zapisuję plik

AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:6 dni
  • Postów:3561
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ł ...


Bo C to najlepszy język, każdy uczeń ci to powie
AD
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:403
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. :

Tasmanian Devil
Hej! Twój post prawdopodobnie zawiera niesformatowany kod. Użyj znaczników ``` aby oznaczyć, co jest kodem, będzie łatwiej czytać. (jestem botem, ta akcja została wykonana automatycznie, prawdopodobieństwo 0.99602324)
Freja Draco
Freja Draco
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
1

Bo nie masz zapisanej zmiennej sesyjnej o nazwie koszyk.


AD
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:403
0

Dlaczego nie mam ? $_SESSION['koszyk']

Freja Draco
Freja Draco
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
2
adamon napisał(a):

Dlaczego nie mam ? $_SESSION['koszyk']

Bo nie rozumiesz, co robisz.


L7
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 6 godzin
  • Postów:433
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.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)