Koszyk sklep internetowy - problem

0

Witam mam problem ze skryptem dodawania produktów do koszyka. produkty wyświetlane są z bazy id, nazwa, cena i grafika.
Przycisk dodaj do koszyka teoretycznie działa i dodaje produkty, ale tylko raz i nie można zwiększyć ilości, natomiast przycisk Usuń nie działa w ogóle.
Domyślam się że to jakiś prosty błąd, ale nie mogę znaleźć rozwiązania tego problemu

Oto kod:

<?php

session_start();

$connect = mysqli_connect("localhost","root","","koszyk");

if (isset($_POST['dodaj_do_koszyka'])) {
	
	if (isset($_SESSION['koszyk'])) {
		
		$session_array_id = array_column($_SESSION['koszyk'], "id");
		
		if (!in_array($_GET['id'], $session_array_id)) {
		
		$session_array = array(
			'id' => $_GET['id'],
			'nazwa' => $_POST['nazwa'],
			'cena' => $_POST['cena'],
			'ilosc' => $_POST['ilosc'],
		);
		
		$_SESSION['koszyk'][] = $session_array;
		
		}
		
	}else{
		
		$session_array = array(
			'id' => $_GET['id'],
			'nazwa' => $_POST['nazwa'],
			'cena' => $_POST['cena'],
			'ilosc' => $_POST['ilosc'],
		);
		
		$_SESSION['koszyk'][] = $session_array;
	}
}		
	
?>

<html>
<head>

	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	<meta name="vieport" content="width=device-width, initial-scale=1.0"/>
	<title>Sklep internetowy |</title>
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"/>
	
</head>
<body>
	<div class="container-main">
		<div class="col-md-12">
			<div class="row">
				<div class="col-md-6">
					<h2 class="text-center">bubu</h2>
					<div class="col-md-12">
					<div class="row">
					
					
					<?php
					
					$query = "SELECT *FROM produkty_koszyk";
					$result = mysqli_query($connect,$query);
					
					while ($row = mysqli_fetch_array($result)) {?>
					<div class="col-md-4">
						<form method="post" action="index.php?id=<?=$row['id'] ?>">
							<img src="<?= $row['grafika']; ?>" style='height: 100px;'>
							<h2><?= $row['nazwa']; ?></h2>
							<h2><?= number_format($row['cena'],2); ?></h2>
							<input type="hidden" name="nazwa" value="<?= $row['nazwa'] ?>">
							<input type="hidden" name="cena" value="<?= $row['cena'] ?>">
							<input type="number" name="ilosc" value="1" class="form_control">
							<input type="submit" name="dodaj_do_koszyka" class="btn btn_warning btn-block my-2" value="dodaj do koszyka">
						</form>
					</div>
					<?php }
					?>
				</div>
				</div>
				</div>
				<div class="col-md-6">
					<h2 class="text-center">Wybrane produkty</h2>
					<?php
					
					$total = 0;
					
					$output = "";
					
					$output .= "
						<table class='table table-bordered table-striped'>
						<tr>
							<th>ID</th>
							<th>Nazwa</th>
							<th>Cena</th>
							<th>Ilość</th>
							<th>Cena bubu</th>
							<th>Usuń</th>
						<tr>
					";
					
					if (!empty($_SESSION['koszyk'])) {
						
						foreach ($_SESSION['koszyk'] as $key => $value) {
							
								$output .= "
								<tr>
									<td>".$value['id']."</td>
									<td>".$value['nazwa']."</td>
									<td>".$value['cena']."</td>
									<td>".$value['ilosc']."</td>
									<td>ZŁ".number_format($value['cena'] * $value['ilosc'])."</td>
									<td>
										<a href='index.php?action=remove&id=".$value['id']."'>
										<button class='btn btn-danger btn-block'>Usuń</button>
										</a>
									</td>
								<tr>
								";
								
								$total = $total + $value['ilosc'] * $value['cena'];
						}
						
						$output .="
						<tr>
							<td colspan='3'><td>
							<td></b>Suma</b></td>
							<td>".number_format($total,2)."</td>
						</tr>
						";
					}
					
					echo $output;
					
					?>
					
				</div>
			</div>
		</div>
	</div>
	
</body>
</html>
2

Tu masz ilość ustawioną na 1:

<input type="number" name="ilosc" value="1" class="form_control">

A później ją sobie czytasz i zapisujesz w sesji:

 'ilosc' => $_POST['ilosc'],

Więc, jak klikniesz ponownie "dodaj do koszyka", to ponownie ustawisz w sesji wartość równą 1.

Odnośnie usuń:

<a href='index.php?action=remove&id=".$value['id']."'>
  <button class='btn btn-danger btn-block'>Usuń</button>
</a>

to co to za dziwactwo, żeby umieszczać przyciski wewnątrz linków? Ostyluj odpowiednio sam link.
Dlaczego nie działa, nie mam pojęcia, bo w kodzie który załączyłeś nie występuje nigdzie odczyt z GET parametru action ani obsługi jej w sytuacji, gdy ma wartość remove.

0

Dziękuję za pomoc, udało mi się to poprawić, mam jeszcze jedno pytanie dlaczego gdy dodam do koszyka np 1 sztukę produktu id 1 to przy drugim kliknięciu dodaj do koszyka liczba nie zwiększy się do np 2 i zmienić ilość mogę tylko po usunięciu produktu z koszyka? Proszę o jakąś wskazówkę

0

Nie wiem, co tam dokładnie pozmieniałeś, ale pewnie wszystko zależy od tego warunku:

 if (!in_array($_GET['id'], $session_array_id))
0

Mam takie male pytanie. Bawisz sie tylko z tym koszykiem, czy faktcznie masz zamiar odpalic e-commerce w sieci?

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