Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sklep internetowy
Forum PHP.pl > Forum > Przedszkole
230005
Piszę sobie prosty sklep internetowy (nie dla kogoś, tylko po to, żeby się nauczyć smile.gif ). I mam takie dwa problemy:
- w polu input ilość początkowa wartość (którą ustawiłem na jeden) po pierwszym załadowaniu skryptu koszyka jest pusta, dopiero kiedy dodam drugi produkt, pojawia się tam właściwa liczba
- kiedy zwiększam ilość w polach input, skrypt wyświetla mi pod produktami kolejne puste pole - nie ma tam nazwy, a input jest pusty

Kod
<?php

include('funk_bazy.php');
include('funk_wysw.php');
include('funk_sklep.php');
include('funk_uwierz.php');
include('funk_popr.php');
include('funk_form.php');

session_start();

tworz_pocz();

if(!isset($_SESSION['koszyk']))
  $_SESSION['koszyk'] = array();
  
$wynik = dodaj_do_koszyka($_GET['id_cz']);

for ($j = 0; $j < count($_SESSION['koszyk']); $j++)
{
  if($_SESSION['koszyk'][$j]['nazwa_cz'] == $wynik[1] && $_SESSION['koszyk'][$j]['producent_cz'] == $wynik[2]
       && $_SESSION['koszyk'][$j]['cena_cz'] == $wynik[3])
  {
    break;
    tworz_kon();
    exit();
  }
  if($_POST['przelicz'])
    $_SESSION['koszyk'][$j]['ilosc'] = $_POST['ilosc'.$j];
}

if(!isset($_POST['przelicz']))
  $_SESSION['koszyk'][$j]['ilosc'] = 1;  
$_SESSION['koszyk'][$j]['nazwa_cz'] = $wynik[1];
$_SESSION['koszyk'][$j]['producent_cz'] = $wynik[2];
$_SESSION['koszyk'][$j]['cena_cz'] = $wynik[3];

echo "<table>";
echo "<tr><td>Nazwa</td><td>Producent</td><td>Cena</td><td>Ilość</td><td>Wartość</td><tr>";
echo "<form action = \"koszyk.php\" method = \"post\">";

foreach($_SESSION['koszyk'] as $i => $v)
{
  echo "<tr><td>".$_SESSION['koszyk'][$i]['nazwa_cz']."</td><td>".$_SESSION['koszyk'][$i]['producent_cz']."</td><td>".
          $_SESSION['koszyk'][$i]['cena_cz'].
          "</td><td><input type = \"text\" size = 3 name = \"ilosc".$i."\" value = \"".$_SESSION['koszyk'][$i]['ilosc']."\" /></td><td>".
          $_SESSION['koszyk'][$i]['wartosc'] = $_SESSION['koszyk'][$i]['cena_cz'] * $_SESSION['koszyk'][$i]['ilosc']."</td></tr>";
  $sum += $_SESSION['koszyk'][$i]['wartosc'];
}

echo "<tr><td><input type = \"submit\" name = \"przelicz\" value = \"Przelicz\" /></td></tr>";
echo "</table>";
echo "</form>";

$_SESSION['suma'] = $sum;
echo "<a href = \"katalog.php?id_kat=".$_SESSION['id_kat']."\">Kontynuuj zakupy</a><br />";
echo "<a href = \"oproznij.php\">Opróżnij koszyk</a>";

echo "<br />j =".$j."<br />";
echo "i =".$i;

tworz_kon();

?>
szakal_kp
nie jestem biegły w php ale w nauce pomaga mi debugowanie kodu za pomoca vim-a z wtyczką debugera. Oczywiście musisz sobie skonfigurować php z obsługą xdebug. Jeśli używasz windowsa to notepad++ możesz użyć zamiast vim-a. Konfiguracja jest bardzo prosta i dobrze opisana.
Chrom
Czy nie lepiej trzymać tylko identyfikator sesji a koszyk utworzyć w bazie danych i do wybranych artykułów dopisywać ten identyfikator?
230005
Może i lepiej :] . Zaczynając pisać ten koszyk założyłem sobie, że przejdę od najbardziej oczywistych rzeczy do trudniejszych. Najbardziej oczywiste na początku wydało mi się stworzenie koszyka za pomocą sesji. Plan w każdym razie jest taki:
1. piszę proceduralny kod z koszykiem w sesji
2. jeśli wszystko działa, to robię to w bazie danych
3. zmieniam kod proceduralny w obiektowy

A cała ta robota trochę na około po to tylko żeby się nauczyć. Jasne, że od początku mogłem to zrobić obiektowo i w bazie, ale w tym przypadku pewnie nie dowiedziałbym się wiele o sesjach i tym jak bardzo popieprzone mogą być :] . W każdym razie wiem już częściowo co robiłem źle. Teraz skrypt domyślną wartość ustala prawidłowo - na 1, ale cały czas po zmianie któregokolwiek inputa przez użytkownika, wyświetla się dodatkowy pusty input :/ . Poprawiony kod w pierwszym poście.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.