Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP]Lista zakupów
andrzejlechniak
post 11.12.2010, 11:03:20
Post #1





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


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...
Go to the top of the page
+Quote Post
CuteOne
post 11.12.2010, 11:21:17
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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
Go to the top of the page
+Quote Post
andrzejlechniak
post 11.12.2010, 11:30:47
Post #3





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


OK, zastosowałem pierwszą poradę, ale teraz nic mi się nie ukazuje, tak jakby nie było wyników w bazie...
Go to the top of the page
+Quote Post
lord2105
post 11.12.2010, 11:50:16
Post #4





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


pokaz to zapytanie co zmieniles


--------------------
40% rozwiązań znajduje się tutaj.
59,9% tutaj.

Jeśli pomogłem rozwiązać Twój problem wciśnij
Go to the top of the page
+Quote Post
andrzejlechniak
post 11.12.2010, 11:55:04
Post #5





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


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'];
Go to the top of the page
+Quote Post
lord2105
post 11.12.2010, 12:03:44
Post #6





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


  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


--------------------
40% rozwiązań znajduje się tutaj.
59,9% tutaj.

Jeśli pomogłem rozwiązać Twój problem wciśnij
Go to the top of the page
+Quote Post
andrzejlechniak
post 11.12.2010, 12:15:12
Post #7





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


Oto screenshot tabeli customers:
http://axem.az.pl/screenshooter/uploads/nketceb28240hky.jpg
Go to the top of the page
+Quote Post
lord2105
post 11.12.2010, 12:24:16
Post #8





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


daj pod spodem echo $sql;


--------------------
40% rozwiązań znajduje się tutaj.
59,9% tutaj.

Jeśli pomogłem rozwiązać Twój problem wciśnij
Go to the top of the page
+Quote Post
andrzejlechniak
post 11.12.2010, 12:28:49
Post #9





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


Wychodzi na to, że mam wynik zerowy, ale nie wiem czemu. Echo wykonuje

  1. SELECT * FROM customers WHERE customers_custnum = 0
Go to the top of the page
+Quote Post
CuteOne
post 11.12.2010, 13:05:34
Post #10





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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
Go to the top of the page
+Quote Post
andrzejlechniak
post 11.12.2010, 13:11:27
Post #11





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


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?
Go to the top of the page
+Quote Post
lord2105
post 11.12.2010, 13:14:12
Post #12





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


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?

Ten post edytował lord2105 11.12.2010, 13:16:28


--------------------
40% rozwiązań znajduje się tutaj.
59,9% tutaj.

Jeśli pomogłem rozwiązać Twój problem wciśnij
Go to the top of the page
+Quote Post
andrzejlechniak
post 11.12.2010, 13:25:13
Post #13





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


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;
Go to the top of the page
+Quote Post
lord2105
post 11.12.2010, 13:29:42
Post #14





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


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


--------------------
40% rozwiązań znajduje się tutaj.
59,9% tutaj.

Jeśli pomogłem rozwiązać Twój problem wciśnij
Go to the top of the page
+Quote Post
andrzejlechniak
post 11.12.2010, 13:51:56
Post #15





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


Taki adres pojawia mi się w przeglądarce:
http://localhost/.../admin.php?id=admin_sprzedaz
znaczy się faktycznie bez idKlienta, ale czemu?
Go to the top of the page
+Quote Post
lord2105
post 11.12.2010, 13:54:50
Post #16





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


zadajesz troszkę bezsensowne pytania...

W wcześniejszej fazie programu musisz wygenerować link z odpowiednim id klienta


--------------------
40% rozwiązań znajduje się tutaj.
59,9% tutaj.

Jeśli pomogłem rozwiązać Twój problem wciśnij
Go to the top of the page
+Quote Post
andrzejlechniak
post 11.12.2010, 14:02:54
Post #17





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


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).
Go to the top of the page
+Quote Post
lord2105
post 11.12.2010, 14:09:16
Post #18





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


wiec dane musisz wyciągać z tabeli orderdet, a nie customers


--------------------
40% rozwiązań znajduje się tutaj.
59,9% tutaj.

Jeśli pomogłem rozwiązać Twój problem wciśnij
Go to the top of the page
+Quote Post
andrzejlechniak
post 11.12.2010, 14:28:36
Post #19





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

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


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).

Ten post edytował andrzejlechniak 11.12.2010, 14:29:59
Go to the top of the page
+Quote Post
lord2105
post 11.12.2010, 14:40:28
Post #20





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


wiec LEFT JOIN po id produktu


--------------------
40% rozwiązań znajduje się tutaj.
59,9% tutaj.

Jeśli pomogłem rozwiązać Twój problem wciśnij
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 31.07.2025 - 06:11