Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> dwa problemy ze sklepem
john_doe
post
Post #1





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

Ostrzeżenie: (0%)
-----


Witam,
tworzę sobie zupełnie dla treningu koszyk zakupów. Mam już dodawanie i edycję ilości. Pojawiły się dwa problemy. Jeden estetyczny drugi nie.
Mam sobie plik addToCart.php w którym wyświetlam koszyk. Ma on postać takiego linku

http://127.0.0.1/myShop/addToCart.php?id=1&productId=3

gdzie id to id kategorii a produktId wiadomo. plik ten ma postać

  1. <?php
  2.  
  3. include('connect.php');
  4. include('functions.php');
  5.  
  6. print '<h1>Zawartosc koszyka</h2>';
  7.  
  8. if(isSet($_SESSION['koszyk']))
  9. {
  10.    $checkExistance = findValue($_GET['productId'], $_SESSION['koszyk']);
  11. }
  12. if( $checkExistance == 1 )
  13. {
  14.    print 'TOWAR JEST JUZ w KOSZU <br />';
  15. }elseif(isSet($_GET['productId'])) {
  16.  
  17.        $_SESSION['koszyk'][$_SESSION['id']] = array('id' => $_GET['productId'], 'ile' => 1);
  18.        
  19.        $_SESSION['id']++;    
  20. }
  21.  
  22.  
  23. print '<a href="shop.php">Enter to my shop centre</a><br /><br />';
  24. print '<a href="dump.php">Dump</a><br /><br />';
  25.  
  26.  
  27.  
  28.  
  29. if ( count($_SESSION['koszyk'] ) > 0)
  30. {
  31.  
  32.        print '<table border="1">
  33.                    <tr>
  34.                        <th>ID</th>
  35.                        <th>NAME</th>
  36.                        <th>PRICE</th>
  37.                        <th>VOLUME</th>
  38.                        <th>ILE</th>
  39.                        <th>edit</th>
  40.                    </tr>';
  41.        
  42.        $iter = -1;
  43.        
  44.        foreach($_SESSION['koszyk'] as $product)
  45.        {    
  46.            $iter++;
  47.            
  48.            $id = $product['id'];    
  49.            
  50.            $sql = "SELECT product_id, product_name, product_price, product_volume
  51.                            FROM products
  52.                    WHERE product_id = " . $id;
  53.            
  54.            $result = mysql_query($sql);
  55.            
  56.            while ($row = mysql_fetch_array($result))
  57.            {
  58.                print '<tr>';
  59.                print '<td>' . $row[0] . '</td>';
  60.                print '<td>' . $row[1] . '</td>';
  61.                print '<td>' . $row[2] . '</td>';
  62.                print '<td>' . $row[3] . '</td>';
  63.                print '<td>' . $product['ile'] . '</td>';
  64.                print '<td><a href="java script:showEditForm('editForm.php?id=' . $iter . '')">edit</a></td>';
  65.            }
  66.            
  67.        }
  68.        print '</table>';
  69. } else print 'koszyk pusty';
  70.  
  71.  
  72. //print var_dump($_SESSION);
  73. ?>
  74.  
  75. <script type="text/javascript">
  76.  
  77. function showEditForm(address)
  78. {
  79.    okno = window.open(address, "okno", "toolbar=no, location=no, status=no, menubar=no, width=210, height=150, scrollbars=no, resizable=no, left=450, top=200");
  80. }
  81.  
  82. </script>


teraz muszę wkleić jeszcze pliki dwa służące edycji (krótkie są)

editForm.php
  1. session_start();
  2.  
  3. print_r($_SESSION['koszyk']);
  4.  
  5. print '<br>';
  6.  
  7. print 'ile: ' . $_SESSION['koszyk'][$_GET['id']]['ile'];
  8.  
  9. print '<br>';
  10.  
  11. ?>
  12.  
  13. <form action="edit.php?id=<?php print $_GET['id'] ?>" method="POST">
  14.    
  15.    <select name="increaseVolume">
  16.        <option value="0">0</option>
  17.        <option value="2">2</option>
  18.        <option value="3">3</option>
  19.        <option value="4">4</option>
  20.        <option value="4">5</option>
  21.        <option value="4">6</option>
  22.    </select>
  23.    
  24.    <input type="submit" value="Zmien" />
  25. </form>


oraz sama akcja edit.php

  1. <?php
  2.  
  3. //if( $_POST['increaseVolume'] == 0 )
  4. //{
  5.    //unset session
  6. //    unset( $_SESSION['koszyk'][$_GET['id']] );
  7. //}else {
  8.  
  9.            $_SESSION['koszyk'][$_GET['id']]['ile'] = $_POST['increaseVolume'];
  10.  //    }
  11.  
  12.  
  13. print '<script>opener.location.reload(true); window.close();</script> ';
  14. ?>


o i teraz tak. Jeden estetyczny bląd bo gdy zmienie liczbe sztuk to oczywiście zmienia ale wypisuje, że towar jest już w koszyku. I dobrze bo tak jest zakodowane i nie wiem jak to poprawić. Jest coś co namierza skąd pochodzą zmiany? wtedy by sie zrobiło że gdy z pliku edit to coś tam coś tam.
Drugi problem to usuwanie z koszyka. Linie w edit są zakomentowane bo to usuwanie jakoś nie kosi. Gdy ilość updejtowana = 0 wtedy unset session.
Nie wiem czy to, że źle działa nie jest spowodowane wyświetlaniem koszyka? nawet wtedy źle updejtuje ilość gdy <> 0. Np. jak dodam jeden towar do koszyka i chce go usunąć to nie usuwa. gdy dodam drugi to moge usunąć który kolwiek, jednak ten co zostanie nie mogę nadać mu innej ilosci. Zwariuje.
sorry za długiego posta.

pozdro
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Wez uzyj jakiegos prostego Frameworka, np Kohana, tam bedziesz mial wszystkie akcje podzielone na metody, tak ze edycja nie bedzie ci sie mieszac z dodawaniem. I prosciej bedzie zrozumiec/zakodzic co w danej chwili sie uruchomi.
Do tego odzielisz troche SQL, od PHP i od HTMLa


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
john_doe
post
Post #3





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

Ostrzeżenie: (0%)
-----


wiem i masz napewno rację, jednak robie to zupelnie na surowo i po raz 1szy i chciałbym aby najpierw mój pomysł zadziałał a potem wezmę się za frameworki.
jakieś sugestie co do poprawki mojego zamąconego kotła?

wydaje mi się, że źle używam funkcji unset(); bo po jej wykonaniu zostaje taki array

Array (
[1] => Array ( [id] => 2 [ile] => 1 ) [0] => Array ( [ile] => 4 ) )
ile: 4

czyli tam gdzie wyboldowałem nie usuwa się wszystko zostaje ile. Tablica winna przyjąć postać
Array (
[1] => Array ( [id] => 2 [ile] => 1 )

Ten post edytował john_doe 29.06.2009, 00:15:56
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Cytat
jakieś sugestie co do poprawki mojego zamąconego kotła?

No chyba zartujesz ze bede probowal to spagetti przeanalizowac, wlasnie temu sugeruje ci FW bo zmusi cie do lekkiego porzadku w kodzie./


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
john_doe
post
Post #5





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

Ostrzeżenie: (0%)
-----


bez przesady 60 linijek kodu to nie jakieś spaghetti smile.gif

Ten post edytował john_doe 29.06.2009, 08:06:52
Go to the top of the page
+Quote Post
deirathe
post
Post #6





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

Ostrzeżenie: (0%)
-----


Tragedia kolejny osc się rodzi skąd ludzie takie nawyki biorą sad.gif
To może jak w koszu masz zero to daj unset całego przedmiotu a nie zmieniasz ilość na 0, bo przedmiot Ci zostaje i podejrzewam że wyświetla że jest przez tą funkcję findValue czy jakoś tak.
A w tablicy masz indeks 'ile', który pokazuje że jest 0 sztuk.
Ablo 2 sprawa zmień funkcję findValue, żeby sprawdzała ilość sztuk danego przedmiotu w koszyku i jak jest 0 to żeby zwracała false.

Ten post edytował deirathe 29.06.2009, 08:38:03


--------------------
Kawałek mojego blogu
Everything should be as simple as possible but not simpler.
A Einstein
Go to the top of the page
+Quote Post
john_doe
post
Post #7





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

Ostrzeżenie: (0%)
-----


no właśnie jak daje

  1. <?php
  2. unset( $_SESSION['koszyk'][$_GET['id']] );
  3. ?>


to usuwam tylko id produktu z koszyka, pozostaje mi ilość sztuk

Array (
[1] => Array ( [id] => 2 [ile] => 1 ) [0] => Array ( [ile] => 4 ) )

i mam kłopot by usunąć wszystko.

P.S. Każdy się czegoś uczy. Robię to cudo po raz 1wszy. Kombinuje po swojemu i dlatego tak to wygląda. Najpierw chcę osiągnąć za wszelką cenę funkcjonalność. Potem to porządkować, przerabiać itp. Nie chce się przekomarzać ale nawyków nie mam skąd nabierać bo nie pracuję jako programista php w jakimś zespole choć byłoby fajnie. Programuje codziennie po 10 h w Transact SQLu.
Go to the top of the page
+Quote Post
deirathe
post
Post #8





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

Ostrzeżenie: (0%)
-----


Wiesz czasem po osiągnięciu funkcjonalności właśnie tym sposobem który tu przedstawiasz, będziesz musiał wszystko pisać od nowa- niestety taki fakt. Co do programowania jeżeli chcesz się nauczyć jak pisać ciekawie, a masz jakieś podstawy to polecam Ci książkę
http://webmade.org/recenzje/wzorce-projekt...e-obiektowe.php

Co do problemu- masz źle zbudowaną w takim razie tablicę. Przebuduj ją na
koszyk ->idproduktu->(ilosc,nazwa,i inne)
i wtedy jak zrobisz unset koszyk[id_produktu] to masz pewnosc ze wywali wszystko

I trochę o bezpieczeństwie poczytaj tongue.gif

Ten post edytował deirathe 29.06.2009, 10:38:56


--------------------
Kawałek mojego blogu
Everything should be as simple as possible but not simpler.
A Einstein
Go to the top of the page
+Quote Post
john_doe
post
Post #9





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

Ostrzeżenie: (0%)
-----


spoko wiem, że nie jest to bezpieczne ale nie o to chodzi. Co do funkcjonalności to na bank będę musiał napisać na nowo ale już z bogatszym portfelem doświadczenia.
Tablica może nie jest źle zbudowana tylko coś mi nie wychodzi by to zunsetować
Przecież ma postać

Array (
[1] => Array ( idProduktu, ileTegoProduktu )
)
Go to the top of the page
+Quote Post
phpion
post
Post #10





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Mając 1 produkt w koszyku musisz wykonać 1 zapytanie aby wyświetlić zawartość koszyka. Mając 10 produktów zapytań tych masz 10, przy 20 produktach 20. Niezależnie od ilości produktów możesz pobrać produkty 1 zapytaniem. Jak? Zamiast w pętli wykonywać:
  1. ... WHERE product_id=1
  2. ... WHERE product_id=2
  3. ... WHERE product_id=3

lepiej użyć do tego IN:
  1. ... WHERE product_id IN (1, 2, 3)

czyli zrobić implode(', ', $tablica_id_produktow).
Go to the top of the page
+Quote Post
john_doe
post
Post #11





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

Ostrzeżenie: (0%)
-----


racja, dzięki. podziałam po pracy. Dobre spostrzeżenie <gitara>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 06:21