Koszyk z produktami

Koszyk z produktami
S1
  • Rejestracja:ponad 8 lat
  • Ostatnio:około miesiąc
  • Postów:78
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?

Kopiuj
                                        <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>
edytowany 1x, ostatnio: Szymon137
axelbest
Sformatuj kod poprawnie.
ArAs2
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:48
0
Kopiuj
<?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/

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 13 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
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

edytowany 1x, ostatnio: axelbest
S1
  • Rejestracja:ponad 8 lat
  • Ostatnio:około miesiąc
  • Postów:78
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

Kopiuj

					<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

Kopiuj
				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

ME
  • Rejestracja:prawie 8 lat
  • Ostatnio:4 miesiące
  • Postów:110
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.

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

np.

Kopiuj
$_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:

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

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

i

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

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

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

Itd itd...

edytowany 4x, ostatnio: mefsh
SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
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.

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 13 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
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.

SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
0

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

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 13 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
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.

edytowany 1x, ostatnio: axelbest
S1
  • Rejestracja:ponad 8 lat
  • Ostatnio:około miesiąc
  • Postów:78
0

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

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

					for($i=0;$i<sizeof($tab);$i++){
					echo $tab[$i];
					}
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 13 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
0

Nadpisujesz zmienną $tab.

Patryk27
Gdzie nadpisuje?
axelbest
Też nie wiem, bo autor dal mało kodu.
S1
  • Rejestracja:ponad 8 lat
  • Ostatnio:około miesiąc
  • Postów:78
0
axelbest napisał(a):

Nadpisujesz zmienną $tab.

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

Kopiuj
$tab[]+=$produkt." ".$ilosc;
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Wrzuć więcej kodu.


S1
  • Rejestracja:ponad 8 lat
  • Ostatnio:około miesiąc
  • Postów:78
0
Patryk27 napisał(a):

Wrzuć więcej kodu.

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

Kopiuj
				<?php
				

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

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

				
					
					
	 				
				}


				?>
axelbest
Czyli dobrze mówiłem, że nadpisuje hehe
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Gdzie wczytujesz $tab?


axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 13 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
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

SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
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.

Kopiuj
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();


?>
edytowany 3x, ostatnio: szybka_parowka
SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
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

edytowany 1x, ostatnio: szybka_parowka
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 13 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
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.

SP
Ok dzieki. Trzeba bedzie poczytac. Zastanawia mnie jedno. Śląc id do PP musialbym poslac jeszcze kilka innych bo potem w przypadku sukcesu musialbym polaczyc sie z baza , konkrernym dzialem itd i odjać ilosc zakupioną.
SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
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.

edytowany 1x, ostatnio: szybka_parowka
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)