Jestem w trakcie pisania niewielkiego sklepu obsługującego sprzedaż płyt winylowych. Mam już praktycznie wszystko ukończone, poza jedną rzeczą, z którą od dwóch dni się męczę i nie mogę sobie poradzić. Koszyk oparty jest o przykład skryptu ze strony http://www.thewatchmakerproject.com/journa...p-shopping-cart, do którego pozostało mi dorobienie formularza odbierającego pozycje wrzucone do koszyka + dane zamawiającego. I tutaj pojawia się problem, ponieważ do bazy zapisywane są tylko informacje o ostatnio wrzuconej do koszyka pozycji (tytuł płyty, id, ilość itp.). Jeśli dodam do koszyka np. Przykładowy Album 1, wrócę do sklepu, dodam następnie Przykładowy Album 2, to do bazy zapisywane są tylko informacje związane z Przykładowy Album 2. Nie mogę sobie z tym poradzić, aby do bazy były zapisane wszystkie pozycje znajdujące się w koszyku.
Fragment pliku cart.php odpowiedzialnego za odebranie danych z formularza i zapisanie ich do bazy:
Kod
<?php
echo '<form action="cart.php" method="post">';
echo 'Nazwisko: <input type="text" name="nazwisko" />';
echo 'E-Mail: <input type="text" name="mail" />';
echo showCart2();
echo '<input type="submit" value="dodaj" />';
echo '</form>';
// Dane z formularza
$nazwisko = $_POST['nazwisko'];
$mail = $_POST['mail'];
$title = $_POST['title'];
$qty = $_POST['name'];
$table = "zamowienie";
if($nazwisko and $mail) {
// Polaczenie z baza danych
$connection = @mysql_connect('localhost', 'uzytkownik', 'haslo')
or die('Brak połączenia z serwerem MySQL');
$db = @mysql_select_db('nazwa_bazy', $connection)
or die('Nie moge polaczyc sie z baza danych');
// Dodajemy rekordy do bazy
$sql = "INSERT INTO $table (nazwisko, mail, title, qty, pubdate)
VALUES ('$nazwisko', '$mail', '$title', '".$_POST[$_POST['name']]."', NOW())";
$result = mysql_query($sql);
if($sql) echo "Rekord został dodany poprawnie";
else echo "Błąd nie udało się dodać nowego rekordu";
mysql_close($connection);
}
?>
echo '<form action="cart.php" method="post">';
echo 'Nazwisko: <input type="text" name="nazwisko" />';
echo 'E-Mail: <input type="text" name="mail" />';
echo showCart2();
echo '<input type="submit" value="dodaj" />';
echo '</form>';
// Dane z formularza
$nazwisko = $_POST['nazwisko'];
$mail = $_POST['mail'];
$title = $_POST['title'];
$qty = $_POST['name'];
$table = "zamowienie";
if($nazwisko and $mail) {
// Polaczenie z baza danych
$connection = @mysql_connect('localhost', 'uzytkownik', 'haslo')
or die('Brak połączenia z serwerem MySQL');
$db = @mysql_select_db('nazwa_bazy', $connection)
or die('Nie moge polaczyc sie z baza danych');
// Dodajemy rekordy do bazy
$sql = "INSERT INTO $table (nazwisko, mail, title, qty, pubdate)
VALUES ('$nazwisko', '$mail', '$title', '".$_POST[$_POST['name']]."', NOW())";
$result = mysql_query($sql);
if($sql) echo "Rekord został dodany poprawnie";
else echo "Błąd nie udało się dodać nowego rekordu";
mysql_close($connection);
}
?>
Funkcja showCart2() / na szybko przerobiona na podstawie showCart():
Kod
<?php
function showCart2() {
global $db;
$cart = $_SESSION['cart'];
if ($cart) {
$items = explode(',',$cart);
$contents = array();
foreach ($items as $item) {
$contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
}
foreach ($contents as $id=>$qty) {
$sql = 'SELECT * FROM vinylshop WHERE id = '.$id;
$result = $db->query($sql);
$row = $result->fetch();
extract($row);
$output[] = '<input type="text" name="sqty" value="'.$id.'" />';
// Przesyla zawartosc z pola z dynamicznie generowana nazwa: name="qty'.$id.'"
$output[] = '<input type="hidden" name="name" value="qty'.$id.'">';
$output[] = '<input type="text" name="title" value="'.$title.'" />';
$output[] = '<input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" />';
$output[] = '<p>PLN'.($price * $qty).'</p>';
$total += $price * $qty;
}
$output[] = '<p>Lacznie: <strong>PLN'.$total.'</strong></p>';
} else {
$output[] = '<p>Nie mozesz sfinalizowac zamowienia</p>';
}
return join('',$output);
}
?>
function showCart2() {
global $db;
$cart = $_SESSION['cart'];
if ($cart) {
$items = explode(',',$cart);
$contents = array();
foreach ($items as $item) {
$contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
}
foreach ($contents as $id=>$qty) {
$sql = 'SELECT * FROM vinylshop WHERE id = '.$id;
$result = $db->query($sql);
$row = $result->fetch();
extract($row);
$output[] = '<input type="text" name="sqty" value="'.$id.'" />';
// Przesyla zawartosc z pola z dynamicznie generowana nazwa: name="qty'.$id.'"
$output[] = '<input type="hidden" name="name" value="qty'.$id.'">';
$output[] = '<input type="text" name="title" value="'.$title.'" />';
$output[] = '<input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" />';
$output[] = '<p>PLN'.($price * $qty).'</p>';
$total += $price * $qty;
}
$output[] = '<p>Lacznie: <strong>PLN'.$total.'</strong></p>';
} else {
$output[] = '<p>Nie mozesz sfinalizowac zamowienia</p>';
}
return join('',$output);
}
?>
Przykład w działaniu: http://www.rapp-style.hip-hop.pl/betuz/index.php (wersja robocza, dla testów). Ma ktoś jakiś pomysł jak to rozwiązać, bo nie potrafię sam się z tym uporać...