Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Lista zakupów
Forum PHP.pl > Forum > Przedszkole
andrzejlechniak
Hej. Piszę sklep internetowy, a raczej kończę go. Nie ukrywam, że jako początkujący korzystam z wielu różnych skryptów, np. z książki PHP5, Apache i MySQL. I stamtąd mam właśnie sam skrypt sklepu, to znaczy akurat zakupów, zamówienie. Resztę, tzn. np. panel administratora napisałem sam. I teraz mam problem. Chcę wyświetlić listę zakupów poszczególnych klientów.
Mam takie tabele:
carttemp (tymczasowa tabela przechowująca rzeczy w koszyku),
products (tabela w której są towary w sklepie, poducts_prodnum --> jako id produktu),
customers (tabela z danymi klientów customers_custnum --> jako numer klienta)
orderdet (tabela gdzie trzymane są dane o produktach, które dany klient kupił orderdet_ordernum --> jako numer zamówienie).

Mam listę klientów: np. Jan Kowalski kupił (link). dnia: data

I w tym (link) powinno się wyświetlać zakup tylko dla TEGO JEDNEGO klienta, a mi wyświetlają się w każdym kliencie te same wartości, tak jakby każdy klient kupił to samo, za tyle samo itd. Pokażę kod, może to coś ułatwi:
  1. $orderid = (int)$_GET['idKlient'];
  2. $query = "SELECT * FROM orderdet WHERE orderdet_ordernum = '$orderid'";
  3. $results = mysql_query($query) or die (mysql_query());
  4. while ($row = mysql_fetch_array($results))
  5. {
  6. extract($row);
  7. $prod = "SELECT * FROM products WHERE products_prodnum = '$orderdet_prodnum'";
  8. $prod2 = mysql_query($prod);
  9. while($prod3 = mysql_fetch_array($prod2))
  10. {
  11. extract($prod3);
  12. echo 'Ilość: '.$orderdet_qty.' - Nazwa: ';
  13. echo $products_name.' - Cena: ';
  14. echo $products_price.' - ';
  15. // ustalenie łącznej ceny za produkt
  16. $extprice = number_format($products_price * $orderdet_qty, 2);
  17. echo 'Razem: '.$extprice;
  18. }
  19. }


Podaję też kod tej części, gdzie znajduje się link do TEJ strony, która ma wyświetlać wynik dla JEDNEGO zakupu:

  1. $sql = 'SELECT * FROM customers';
  2. $result = mysql_query($sql);
  3. while($row = mysql_fetch_array($result))
  4. {
  5. $orderid = (int)$_GET['idKlient'];
  6. echo '<table class="admin_panel_dane">
  7. <tr>
  8. <td width="5%">'.$row['customers_custnum'].'</td>
  9. <td width="15%">'.$row['customers_firstname'].'</td>
  10. <td width="10%">'.$row['customers_lastname'].'</td>
  11. <td width="15%">'.$row['customers_city'].'</td>
  12. <td width="25%">
  13. <a href="admin.php?id=admin_sprzedaz&idKlient='.$orderid.'" title="zobacz szczegóły tej transakcji">Szczegóły</a> |
  14. <a href="admin.php?id=admin_sprzedaz&idKlientow='.$orderid2.'" title="zobacz wszystkie transakcje tego użytkownika">Wszystkie</a>
  15. </td>
  16. <td width="10%">'.$row['customers_phone'].'</td>
  17. <td width="20%"><a href="mailto:'.$row['customers_email'].'" title="napisz do tego klienta">'.$row['customers_email'].'</a></td>
  18. </tr>
  19. </table>';
  20. }


Dodam tylko, że na swój sposób kod działa dobrze, znaczy wyświetla COŚ, problem w tym, że nie wyświetla TEGO co akurat mi potrzeba. A chodzi mi o to, aby za pomoca linku można było wyświetlić pojedynczy rekord dla danego zakupu, aby dany rekord był różny od poprzedniego i kolejnego.
Po drugie pytanko, jak wyświetlić listę wszystkich zakupów dla JEDNEGO klienta?

Ewentualnie, mógłbym wysłać na PW całe skrypty...

Proszę o pomoc, pozdrawiam...
CuteOne
Dlaczego pobierasz wszystkich a linki pasują tylko do jednego użytkownika??
  1. $sql = 'SELECT * FROM customers'; // tu chyba powinieneś dodać WHERE customer_id = '$orderid'
  2. $orderid = (int)$_GET['idKlient']; // to wrzuć przed zapytaniem do bazy a usuń z pętli


Po co dwa zapytania do bazy?
  1. $query = "SELECT * FROM orderdet WHERE orderdet_ordernum = '$orderid'";
  2. $prod = "SELECT * FROM products WHERE products_prodnum = '$orderdet_prodnum'";

Połącz to używając LEFT JOIN
andrzejlechniak
OK, zastosowałem pierwszą poradę, ale teraz nic mi się nie ukazuje, tak jakby nie było wyników w bazie...
lord2105
pokaz to zapytanie co zmieniles
andrzejlechniak
Oto i ono:
  1. $orderid = (int)$_GET['idKlient'];
  2. $sql = 'SELECT * FROM customers WHERE customers_custnum = '.$orderid;
  3. $result = mysql_query($sql);
  4. while($row = mysql_fetch_array($result))
  5. {
  6. echo '<table class="admin_panel_dane">
  7. <tr>
  8. <td width="5%">'.$row['customers_custnum'].'</td>
  9. <td width="15%">'.$row['customers_firstname'].'</td>
  10. <td width="10%">'.$row['customers_lastname'].'</td>
  11. <td width="15%">'.$row['customers_city'].'</td>
  12. <td width="25%">
  13. <a href="admin.php?id=admin_sprzedaz&idKlient='.$orderid.'" title="zobacz szczegóły tej transakcji">Szczegóły</a> |
  14. <a href="admin.php?id=admin_sprzedaz&idKlientow='.$orderid2.'" title="zobacz wszystkie transakcje tego użytkownika">Wszystkie</a>
  15. </td>
  16. <td width="10%">'.$row['customers_phone'].'</td>
  17. <td width="20%"><a href="mailto:'.$row['customers_email'].'" title="napisz do tego klienta">'.$row['customers_email'].'</a></td>
  18. </tr>
  19. </table>';
  20. }
  21.  


Dodam tylko, że error_reporting(E_ALL); mówi mi, że Undefined index: idKlient w linii 70 (u mnie w kodzie), tzn. w tym miejscu $orderid = (int)$_GET['idKlient'];
lord2105
  1. $sql = 'SELECT * FROM customers WHERE customers_custnum = '.$orderid;
  2.  


zle zadane pytanie tak przynajmniej podejrzewam bo nie mam podgladu Twojej bazy danych powinno byc

  1. $sql = 'SELECT * FROM customers WHERE customer_id = '.$orderid;
  2.  


Pokaz zrzut tabeli customers

A apropo Undefined index:
Temat: PHP Notice Undefined index
andrzejlechniak
Oto screenshot tabeli customers:
http://axem.az.pl/screenshooter/uploads/nketceb28240hky.jpg
lord2105
daj pod spodem echo $sql;
andrzejlechniak
Wychodzi na to, że mam wynik zerowy, ale nie wiem czemu. Echo wykonuje

  1. SELECT * FROM customers WHERE customers_custnum = 0
CuteOne
Undefined index: idKlient w linii 70 mówi, że nie podałeś w adresie id użytkownika smile.gif adres powinien wyglądać mniej więcej tak:

http://www.example.com/index.php?idKlient=23
andrzejlechniak
To wiem, co powinien wyświetlać, ale mam takie coś:

  1. $orderid = (int)$_GET['idKlient'];
  2. $sql = "SELECT * FROM customers WHERE customers_custnum = '$orderid'";
  3. $query = mysql_query($sql);
  4. $orderid = mysql_fetch_array($query);
  5. echo $orderid['customers_custnum'];

i nie wiem, gdzie nie deklaruję $orderid, skoro $orderid = (int)$_GET['idKlient']; chyba właśnie ten wiersz wyświetla jak powinna wyglądać akcja ($_GET) i jaki powinien być numer (pobiera z customers_custnum). Gdzie zatem mam tutaj błąd?
lord2105
pomieszanie z poplataniem:

  1. $orderid = (int)$_GET['idKlient'];
  2. $sql = "SELECT * FROM customers WHERE customers_custnum = '".$orderid."'";
  3. $query = mysql_query($sql);
  4. $custom= mysql_fetch_array($query);
  5. var_dump($custom);
  6.  

daj tak ^^

Podaj adres jaki widzisz w przegladarce podczas odpalania tego skryptu?
andrzejlechniak
Dziwne, wychodzi, że mam błąd, tzn. coś takiego mi wychodzi:

  1. bool(false) SELECT * FROM customers WHERE customers_custnum = '0';


  1. $orderid = (int)$_GET['idKlient'];
  2. $sql = "SELECT * FROM customers WHERE customers_custnum = '".$orderid."'";
  3. $query = mysql_query($sql);
  4. $custom= mysql_fetch_array($query);
  5. var_dump($custom);
  6.  
  7. $result = mysql_query($sql);
  8. echo $sql;
lord2105
czytałeś uważnie mój poprzedni post?

Cytat
Podaj adres jaki widzisz w przegladarce podczas odpalania tego skryptu?


Nie podajesz w linku parametru idKlient.

www.dlaczegotoniedziala.pl/index.php?idKlient=2
andrzejlechniak
Taki adres pojawia mi się w przeglądarce:
http://localhost/.../admin.php?id=admin_sprzedaz
znaczy się faktycznie bez idKlienta, ale czemu?
lord2105
zadajesz troszkę bezsensowne pytania...

W wcześniejszej fazie programu musisz wygenerować link z odpowiednim id klienta
andrzejlechniak
Ta dyskusja chyba zmierza na inne tory od zamierzonych. Chodziło mi nie o to, aby wyświetlać od razu transakcje danego klienta, tylko aby link kierował do tego (abym widział transakcje klientów - każda po kolei).
lord2105
wiec dane musisz wyciągać z tabeli orderdet, a nie customers
andrzejlechniak
No dobra, mniej - więcej załapałem, ale jak połączyć to z tabelą customers i products, tzn. wiem że dwie można za pocą LEFT JOIN, ale jak to zrobić z trzema, kiedy żadna z nich nie ma takiej samej nazwy pola w tabeli (choć niektóre mają taką samą wartość). Chodzi mi o to, abym widział nie tylko co było kupowane, ale jaki produkt i za ile a te dane są w innej tabeli (table products).
lord2105
wiec LEFT JOIN po id produktu
user767
  1. $query="SELECT DISTINCT osoby.id, osoby.imie, osoby.nazwisko, osoby_proj.id_osoba, osoby_proj.id_projekt FROM osoby left join osoby_proj on (osoby_proj.id_osoba=osoby.id and osoby_proj.id_projekt=$id)";


Może to przyda się następny left join dajesz po prostu za poprzednim
andrzejlechniak
OK, mam w takim razie tabele:
orderdet (jego 'id' to orderdet_prodnum),
products(jego 'id' to products_prodnum),
i tabele customers
to jak to połączyć, abym miał schemat taki:
id zakupu ----- klient, który kupił -- produkt -- ilość -- cena --
(tab. orderdet) (tab. customers) (tab. products) (tab.orderdet)(tabl. orderdet)
dodam tylko, że wszystkie dane z tabeli orderdet są zapisanymi z tabeli carttemp (tabela koszyka)
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.