[php]Sklep internetowy

0

Napisałem skrypt koszyka. Problem jest następujący - kiedy zmienię ilość jakiegoś produktu w koszyku (w polu input), to pod wszystkimi produktami pojawia się kolejny input, ale pusty - bez nazwy producenta, produktu i domyślnej wartości (powinno nią być 1). Dzieje się to jednak tylko raz. Dodanie kolejnych produktów i zmiana ich ilości nie powoduje pojawienia się kolejnego pustego inputa. Spędziłem nad tym ładnych kilkanaście godzin i wciąż nie mam pojęcia co jest nie tak [glowa] . O co chodzi, przecież w skrypcie nie ma żadnej linii kodu dodającej puste rekordy do tabeli :/ . Będę cholernie wdzięczny za pomoc: (od razu uprzedzam, że to ma być zrobione w sesji - robię to po to, żeby się nauczyć - potem zrobię koszyk w bazie, a na samym końcu kod proceduralny stanie się obiektowym, ale najpierw chciałbym się dowiedzieć co tu nie gra)

session_start();

tworz_pocz();

$wynik = dodaj_do_koszyka($_GET['id_cz']);

//pętla poniżej zapobiega zwiększeniu stanu wybranego produktu o 1 w wyniku odświeżenia strony
//dwie ostatnie linie tej pętli ustawiają ilość poszczególnych produktów 
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($_GET['przelicz'])
    $_SESSION['koszyk'][$j]['ilosc'] = $_GET['ilosc'.$j];
}

if(!isset($_GET['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 = \"get\">";

//alternatywnie można użyć pętli foreach, wtedy liczniki nie będą się różnić o 1, co dla działania aplikacji nie ma znaczenia - wygląda na to, że
//pomimo różnicy liczników skrypt dopisuje wartości we właściwych miejscach, licznik z poniższej pętli jest większy o 1 od $j przez dziwnego inputa ;)
//foreach ($_SESSION['koszyk'] as $i => $v)

for ($i = 0; $i < count($_SESSION['koszyk']); $i++) 
{
  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();
0

To wygląda na jakiś grubszy problem. Jakbyś podrzucił cały kod z tymi funkcjami, których w tym fragmencie nie deklarujesz, to bym to wrzucił na swój serwerek i posprawdzał. Po kodzie bardzo mało widać. Ja bym wrzucił debuga wszędzie gdzie potrzeba i by wszystko wylazło.

0

Ok, możemy tak zrobić, że wyślę ci wszystko na mejla, ale już nie dziś, bo mam trochę pracy. Jak to zrobię, to wyślę ci PW.

0

Dobrze. Jako że to jest unikalny przypadek, to nie będę stawiał oporu. Mimo to jestem jednak za załącznikami :) "Nie jesteś sam."

0

Tragedia, że tu prywatnych wiadomości słać nie można :/ . W każdym razie wrzuciłem do debuga i nie wylazło nic :] . Powiedz mi tylko, czy kod bazy też dorzucić do paczki?

0
the_number_23 napisał(a)

Tragedia, że tu prywatnych wiadomości słać nie można :/ . W każdym razie wrzuciłem do debuga i nie wylazło nic :] . Powiedz mi tylko, czy kod bazy też dorzucić do paczki?

Jak nie można jak można, wchodzisz na swój profil->wiadomości->napisz nową.

0

Wrzuć wszystko ;)

0

Właśnie wysłałem Ci mejl. Z góry dzięki :] .

0

Ano działa i za to biję pokłony <bije pokłony i nie używa takiej emoty, bo nie ma :D>. Ale nie przychodzi Ci nic na myśl dlaczego działo się to co się działo?

0

Ja dodałem tylko łatkę, która usuwa puste rekordy. Czemu tak jest, to i ja nie wiem. Trzeba by nad tym dłużej posiedzieć.

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