Błąd składniowy w aplikacji z koszykiem

Błąd składniowy w aplikacji z koszykiem
AD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 403
0

Chodzi o ten fragment kodu:

Kopiuj
session_start();

$product_id = $_POST["product_id"];
$quantity = $_POST["quantity"];
$product_name = $_POST["product_name"];

if(!isset($_SESSION['koszyk']))
{
$_SESSION['koszyk'] = 0;
}

if ($_SESSION['koszyk'][]=array($product_id,$product_name,$quantity))
{
foreach($_SESSION['koszyk'] as $key=>$val) 
           
{

	echo "Nazwa: '.$val['product_name'].', Cena: '.$val['product_id'].' Ilość: '.$val['quantity'].' Razem: '.$suma.'";



}

};

Dlaczego wyświetla ten błąd i skrypt nie działa ? Ta strona nie działaSerwer serwer2232156.home.pl nie może teraz obsłużyć tego żądania.
HTTP ERROR 500

LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8487
0

masz dostęp do jakichś bardziej szczegółowych logów w tym home? Pomijając ten konkretny błąd, to ogólnie jak masz samą 500, to jest to zgadywanka, a jeśli masz jakiś błąd typu "error, bo coś tam", to byś miał wiele łatwiej.

LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8487
3

Wydaje się, że masz błąd składniowy:

Kopiuj
 echo "Nazwa: '.{$val['product_name']}.', Cena: '.{$val['product_id']}.' Ilość: '.{$val['quantity']}.' Razem: '.$suma.'";

po wrzuceniu tego kodu

Kopiuj
$suma = 100;
$val = array("quantity" => 3, "product_id" => 13, "product_name"=> "masło"); // testowo, żeby coś było
echo "Nazwa: '.$val['product_name'].', Cena: '.$val['product_id'].' Ilość: '.$val['quantity'].' Razem: '.$suma.'";

do PHP sandbox https://onlinephp.io/

wyskakuje błąd
Parse error: syntax error, unexpected string content "", expecting "-" or identifier or variable or number in /home/user/scripts/code.php on line 5

ale jak poprawisz na

Kopiuj
echo "Nazwa: {$val['product_name']}, Cena: {$val['product_id']} Ilość: {$val['quantity']} Razem: $suma";

to zadziała
ogólnie wygląda na to, że próbujesz jednocześnie interpolować zmienne, jak i dodawać stringi. Stąd piszesz niepotrzebne kropki i apostrofy, ale z jakichś powodów też wygląda na to, że potrzebne są tutaj dodatkowe klamerki. Ogólnie tak jakby tutaj gdzieś wystąpił błąd składni (chociaż nie piszę już w PHP, więc nie pamiętam wszystkich zawiłości interpolacji zmiennych).

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
1

Po pierwsze to jakieś dwa dni temu poruszaliśmy temat apostrof kontra cudzysłów i jak robić złączenia literałów. Było to tutaj https://4programmers.net/Forum/PHP/367581-dlaczego_zdjecie_sie_nie_wyswietla?p=1903351#id1903351
Przeczytałeś? Spróbowałeś zrozumieć? Jeśli tego nie rozumiesz to napisz. Może uda się wytłumaczyć.
Po drugie pisaliśmy Ci już 125 razy zrób jakiś kurs i dopiero pisz kod bo nic z tego nie będzie.
Po trzecie jesteś na forum ładnych kilka lat i mógłbyś nauczyć się formatować kod przy użyciu znaczników. Tak admini poprawiają najczęściej Twoje wpisy. I tu gorący apel do administracji aby przyszłe posty po prostu kasowali jeśli będą pisane w tym stylu. I to paradoksalnie dla Twojego dobra. Bo jak zaczniesz formatować kod, nauczysz się czytać składnię to nauczysz się czytać i wyłapywać błędy.
Po czwarte testuj kod lokalnie na swoim komputerze. Po włączeniu obsługi błędów okaże się, że masz komunikaty które pomagają w procesie pisania kodu. To nie wymaga jakichś skomplikowanych konfiguracji. Jest Xampp ale też serwer testowy PHP uruchomisz po prostu przez polecenie php -S localhost:8000 wpisane w konsoli w katalogu projektu. Więcej znajdziesz w dokumentacji.
https://www.php.net/manual/en/features.commandline.webserver.php

Odnośnie kodu, to jest słabo i ciągle nie uczysz się na błędach.

Kopiuj
// Nie sprawdzasz czy te dane są w tablicy POST, a może ich nie być.
$product_id = $_POST["product_id"];
$quantity = $_POST["quantity"];
$product_name = $_POST["product_name"];

if(!isset($_SESSION['koszyk']))
}
// Po co tu przypisujesz zero?
$_SESSION['koszyk'] = 0;
}

// Tutaj w tym warunku nie sprwdzasz nic tylko przypisujesz wartość- użyłeś pojedynczego znaku równości.
if ($_SESSION['koszyk'][]=array($product_id,$product_name,$quantity))
{
foreach($_SESSION['koszyk'] as $key=>$val) 
           
{
// O złączeniach literałów już było.
	echo "Nazwa: '.$val['product_name'].', Cena: '.$val['product_id'].' Ilość: '.$val['quantity'].' Razem: '.$suma.'";



}

};

No i ostanie używaj jakiegoś IDE typu VSC, formatuj kod.
Inaczej nigdy nie napiszesz 5 linijek poprawnego kodu.

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
1

@LukeJL:

@jurek1980:

To troll.

Od wielu lat wkleja ewidentnie błedne zestawy kodów w netu, i ma radochę że ktoś to traktuje serio, gdy udaje głupszego niż jest.
Prawdziwy adept o niskim poziomie pokazałby jakieś emocje wreszcie po którejś krytyce, tu nic.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.