Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie wartości pól formularza i zapis do bazy MySQL
Forum PHP.pl > Forum > PHP
JarasRS
Witam

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);
     }
     ?>


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);
         }
         ?>


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ć...
Babcia@Stefa
Popraw kod, masz tam kilka SQL Injection.
Na forum jest odpowiedni temat przypięty.

I ty jeszcze podajesz linka do gotowej strony na której jest ten kod...

@edit
Jeżeli takie portale jak hip-hop.pl są tak badziewnie napisane to czemu ja się boję współpracować z kimś kto ma większy portal... biggrin.gif
Uważam portal hip-hop.pl za dobry, bardzo go lubię i często odwiedzam smile.gif
JarasRS
Cytat(Babcia@Stefa @ 29.06.2008, 19:02:46 ) *
Popraw kod, masz tam kilka SQL Injection.

A mógłbyś wskazać, co i jak poprawić?

P.S. Z poratlem hip-hop.pl mam tylko wspólną domenę
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.