Koszyk z produktami

0

Mam taką stronę. Jak stworzyć koszyk za pomocą sesji dzięki którym będą wyświetlane produkty w koszyku? Próbowałem sprawdzać za pomocą if czy dane z formularza zostały przesłane. Czy są jakieś inne możliwości?

                                        <div class="product">
					<form method="POST" action="index.php">
					<img class="product__image" src="img/products/energy-drink.svg" alt="Energy Drink">
					<h2 class="product__name">Energy Drink</h2>
					<h3 class="product__price">5.00</h3>
					<button class="btn btn--primary" data-action="ADD_TO_CART">Add To Cart</button>
				</form>
				</div>
				<div class="product">
					<form method="POST" action="index.php">
					<img class="product__image" src="img/products/juice.svg" alt="Juice">
					<h2 class="product__name">Juice</h2>
					<h3 class="product__price">4.00</h3>
					<button class="btn btn--primary" data-action="ADD_TO_CART">Add To Cart</button>
				</form>
				</div>
				<div class="product">
					<form method="POST" action="index.php">
					<img class="product__image" src="img/products/milk.svg" alt="Milk">
					<h2 class="product__name">Milk</h2>
					<h3 class="product__price">2.50</h3>
					<button class="btn btn--primary" data-action="ADD_TO_CART">Add To Cart</button>
				</form>
				</div>
0
<?php while($r = mysqli_fetch_assoc($res)){ ?>
	  <div class="col-sm-6 col-md-3">
	    <div class="thumbnail">
	      <img src="<?php echo $r['image']; ?>" alt="<?php echo $r['title'] ?>">
	      <div class="caption">
	        <h3><?php echo $r['title'] ?></h3>
	        <p><?php echo $r['description'] ?></p>
	        <p><a href="addtocart.php?id=<?php echo $r['id']; ?>" class="btn btn-primary" role="button">Add to Cart</a></p>
	      </div>
	    </div>
	  </div>
<?php } ?>

<?php
	session_start();
	if(isset($_GET['id']) & !empty($_GET['id'])){
			$items = $_GET['id'];
			$_SESSION['cart'] = $items;
			header('location: index.php?status=success');
	}else{
		header('location: index.php?status=failed');
	}
?>

Więcej tutaj: https://codingcyber.org/simple-shopping-cart-application-php-mysql-6394/

0

Aby coś sensownie dodać do koszyka to wypadałoby wiedzieć co dodajesz. Tak więc, brakuje Ci jakiegoś ID przy produktach. Następnie... W sesji trzymasz tylko informacje jaki to produkt (id) i ile sztuk. Cenę pobierasz i wyliczasz po stronie serwera.

Sesja idealnie nadaje się do koszyka, wiec dobrze kombinujesz. Dodawanie produktu nie wymaga żadnego formularza w Twoim wypadku (nie podajesz ile sztuk chcesz dodać do koszyka). Zatem wystarczy Ci zwykły link z hrefem w postaci np
index.php?action=addToCart&productID=xx

0
axelbest napisał(a):

Aby coś sensownie dodać do koszyka to wypadałoby wiedzieć co dodajesz. Tak więc, brakuje Ci jakiegoś ID przy produktach. Następnie... W sesji trzymasz tylko informacje jaki to produkt (id) i ile sztuk. Cenę pobierasz i wyliczasz po stronie serwera.

Sesja idealnie nadaje się do koszyka, wiec dobrze kombinujesz. Dodawanie produktu nie wymaga żadnego formularza w Twoim wypadku (nie podajesz ile sztuk chcesz dodać do koszyka). Zatem wystarczy Ci zwykły link z hrefem w postaci np
index.php?action=addToCart&productID=xx

ok w htmlu mam


					<img class="product__image" src="img/products/beer.svg" alt="Beer">
					<h2 class="product__name">Beer</h2>
					<h3 class="product__price">6.00</h3>
					<a href="index.php?action=addToCart&productID=Beer&amount=1"><button class="btn btn--primary" data-action="ADD_TO_CART">Add To Cart</button></a>
				</div>
				<div class="product">
					<img class="product__image" src="img/products/energy-drink.svg" alt="Energy Drink">
					<h2 class="product__name">Energy Drink</h2>
					<h3 class="product__price">5.00</h3> 
					<a href="index.php?action=addToCart&productID=Energy Drink&amount=1"><button class="btn btn--primary" data-action="ADD_TO_CART">Add To Cart</button></a>

a w php

				if(isset($_GET['productID'])){


					$produkty= array($_GET['productID'] => $_GET['amount'] );
					
					foreach ($produkty as $key => $value) {
						echo $key." ".$value;
					} 

				}

Czy da się tak zrobić żeby kolejny produkt i ilość była wpisywana do tablicy asocjacyjnej jako osobna wartość, bo w tym momencie cały czas mi ją nadpisuje

1

Edit. W sumie teraz widzę, że chodziło o zwykłą tablicę asocjacyjną, ale wszystkie przykłady zadziałają dokładnie tak samo dla tablic.

Przecież sesja to tablica asocjacyjna, więc użyj jej tak, jakbyś normalnie to zrobił na tablicy.

$_SESSION['cart'][] = ['id' => $id, 'quantity' => $quantity];

np.

$_SESSION['cart'][] = ['id' => 1, 'quantity' => 2];
$_SESSION['cart'][] = ['id' => 2, 'quantity' => 3];
$_SESSION['cart'][] = ['id' => 3, 'quantity' => 1];
var_dump($_SESSION['cart']);

co da wynik taki:

array(3) {
  [0]=>
  array(2) {
    ["id"]=>
    int(1)
    ["quantity"]=>
    int(2)
  }
  [1]=>
  array(2) {
    ["id"]=>
    int(2)
    ["quantity"]=>
    int(3)
  }
  [2]=>
  array(2) {
    ["id"]=>
    int(3)
    ["quantity"]=>
    int(1)
  }
}

Oczywiście możesz też użyć i takiej wersji:

$_SESSION['cart'][] = [$id => $quantity];

i

$_SESSION['cart'][$id] = $quantity;

sumować ilość (tutaj będzie warning, jeżeli nie sprawdzisz czy dane $id posiada przypisaną jakąkolwiek wartość)

$_SESSION['cart'][$id] += $quantity;

Itd itd...

0

Mam pytanie jesli mozna.
Piszac taki sklep lub cokolowiek gdzie na koncu dochodzi do zakupu online osoba dochodzi do momentu gdzie musi odebrac jakies dane kiedy doszlo do zakupu (przykladowo karta) i nie doszlo i w zwiazku z tym podejmuje sie odpowiednia dzialania.
Jest jakies uniwersalne rozwiazanie? Myslalem o platnosci Paypal z opcja karty równiez.

0

Nie ma uniwersalnego rozwiązania, dlatego najlepiej dać użytkownikowi możliwość wyboru różnych płatności np. PayPal, DotPay lub/i PayU.

0

Moze zle sie wyrazilem. Chodzilo mi bardziej jak sie dobrac do tych danych. PayPal udostepnia cos ?

1

Po prostu będziesz musiał zrobić integrację Twojego systemu z PayPal'em - https://developer.paypal.com/docs/ a czy to PayPal czy inny serwis z płatnościami nie ma znaczenia - i tak zazwyczaj udostępniają API lub gotowe biblioteki.

0

Czemu po naciśnięciu kolejnego produktu i dodaniu go do tablicy to usuwa nadpisuje mi obecny element?

				if(isset($_GET['action'])){
					
					$produkt=$_GET['productID'];
					$ilosc=$_GET['amount'];
				
					
				
					$tab[]=$produkt." ".$ilosc;
					

					for($i=0;$i<sizeof($tab);$i++){
					echo $tab[$i];
					}
0

Nadpisujesz zmienną $tab.

0
axelbest napisał(a):

Nadpisujesz zmienną $tab.

Tzn? Ten sposób na dole też nie działa

$tab[]+=$produkt." ".$ilosc;
0

Wrzuć więcej kodu.

0
Patryk27 napisał(a):

Wrzuć więcej kodu.

<div class="product">
					<img class="product__image" src="img/products/beer.svg" alt="Beer">
					<h2 class="product__name">Beer</h2>
					<h3 class="product__price">6.00</h3>
					<a href="index.php?action=addToCart&productID=Beer&amount=1"><button class="btn btn--primary" data-action="ADD_TO_CART">Add To Cart</button></a>
				</div>
				<div class="product">
					<img class="product__image" src="img/products/energy-drink.svg" alt="Energy Drink">
					<h2 class="product__name">Energy Drink</h2>
					<h3 class="product__price">5.00</h3> 
					<a href="index.php?action=addToCart&productID=Energy Drink&amount=1"><button class="btn btn--primary" data-action="ADD_TO_CART">Add To Cart</button></a>
				</div>

				<?php
				

				if(isset($_GET['action'])){
					
					$produkt=$_GET['productID'];
					$ilosc=$_GET['amount'];
				
					
				
					$tab[]=$produkt." ".$ilosc;
					

					for($i=0;$i<sizeof($tab);$i++){
					echo $tab[$i];
					}
				
				

				
					
					
	 				
				}


				?>
0

Gdzie wczytujesz $tab?

0

Nigdzie do zmiennej tab nie przypisujesz tego co siedzi obecnie w sesji. Zatem wchodząc w tego IF'a nadpisujesz zawartość zmiennej. Pokaż gdzie deklarujesz zmienna $tab

0

Jesli tab nie jest w petli to sie nie dziw. Zresztą ten kod wiekszego sensu nie ma bo i tak przesylasz jedne dane wiec po co tablica ? Jak chcesz cos dodawac do juz istniejacego to ustaw sesje i do niej dopisuj.

Cos jak ponizej. Odczyt jest na sztywno wywolujac id ale wrzuc to do perli i zobaczysz to samo.

session_start();


          $Item_Section1 = 'Buty';
		  $Item_Id1 = '456';
		  $Item_Quantity1 = '35';
		  
		  $Item_Section2 = 'Kurtki';
		  $Item_Id2 = '5';
		  $Item_Quantity2 = '1';
		  
		  $Item_Section3 = 'Czapki';
		  $Item_Id3 = '89';
		  $Item_Quantity3 = '7';
		 
		  
		  $_SESSION['cart'][1] = ['Item_Section' => $Item_Section1, 'Item_Id' => $Item_Id1, 'Item_Quantity' => $Item_Quantity1];
		  $_SESSION['cart'][2] = ['Item_Section' => $Item_Section2, 'Item_Id' => $Item_Id2, 'Item_Quantity' => $Item_Quantity2];
		  $_SESSION['cart'][3] = ['Item_Section' => $Item_Section3, 'Item_Id' => $Item_Id3, 'Item_Quantity' => $Item_Quantity3];
		  
		  
		  var_dump($_SESSION['cart']);
		 
		  
		  session_destroy();


?>
0
axelbest napisał(a):

Po prostu będziesz musiał zrobić integrację Twojego systemu z PayPal'em - https://developer.paypal.com/docs/ a czy to PayPal czy inny serwis z płatnościami nie ma znaczenia - i tak zazwyczaj udostępniają API lub gotowe biblioteki.

Ok poczytalem al e mam metlik w glowie co wybrac. Jakby to bylo kilka rzeczy stałych to nie problem ale to bedzaie wiadomo generowane automatycznie. Jak to jest z tym ? Jest jakis kod gdzie sie podaje /dodaje nazwy zmiennych i dalej leci do PP ? Czy to bardzie pokręcone jest

0

Ciężko mi odpowiedzieć na Twoje pytanie. Po prostu w dokumentacji od płatności będziesz miał wszystkie wymagania i kroki jakie musisz podjąć by użytkownik mógł skorzystać z płatności. Często na takich platformach jest dostępne konto testowe, gdzie będziesz mógł testować płatności, bez potrzeby przelewania prawdziwej kasy.

0

Juz troche poczytalem i chyba lepszym rozwiazaniem bedzie dotpay. Wiecej mozliwosci i jakos przykazniejsze to wszystko.

Mam pytanie od strony technicznej. Zastanawiam sie jak generowac strone z produktem aby byla przyjazna pod SEO. Na kazdym sklepie jest url z nazwa produktu (title) i to zazwyczaj jest brane z opisu produktu i wciaskane do TITLE i DESCRIPTION. Tylko teraz gdzie to jest przechowywane i czy generowac nalezy osobne strony dla kazdego produktu czyli robic po prostu kazdy nowy plik z produktem co wydaje mi sie bez sensu bo produktow moze byc kilka tysiecy wiec tyle plikow rowniez. Jak sie do tego zabrac.

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