Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z pętlą wyświetlającą rekordy z tablicy
sebap123
post
Post #1





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Napisałem wydaje mi się dość prostą pętlę, której zadaniem jest wypisywanie danych (id produktów) z tabeli MySQL. Prawie wszystko działa, z wyjątkiem drobnego szczegółu. Gdy dodam nowy produkt do tabeli MySQL to w koszyku w którym powinny pojawić się wszystkie produkty brak jest produktu ostatnio dodanego. Jak bym chciał go wyświetlić to muszę dodać kolejny produkt. Nie do końca wiem co może być tego przyczyną.
Poniżej jest cały kod odpowiedzialny za to wszystko:
kod koszyka który ma wyświetlać produkty
  1. $wynik=mysql_query("SELECT * FROM koszyk WHERE user='".$_SESSION["user"]."' ");
  2. if(mysql_fetch_array($wynik)>0){
  3. while($product = mysql_fetch_array($wynik)){
  4. $pr_id=$product['pr_id'];
  5. koszyk($pr_id);
  6. }}

fragment kodu (w innym pliku, który dodaje produkt do listy:
  1. $dodaj = mysql_query("INSERT INTO koszyk (user, pr_id, qty)
  2. VALUES ('".$_SESSION['user']."', '".$pr."', '35')");
  3. header("Location: twoj-koszyk.php?podstrona=aktualnie-w-koszyku");


Co w tym jest nie tak?
Już myślałem o dodaniu jakiejś drugiej pętli, ale to już by było zbyt skomplikowane a ja jestem niemal pewien, że da się to zrobić łatwiej, czyli w moim kodzie jest jakiś nieduży błąd.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
cycofiasz
post
Post #2





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


Spróbuj zamienić

if(mysql_fetch_array($wynik)>0){

na:

if(mysql_num_rows($wynik)>0){

Go to the top of the page
+Quote Post
lord2105
post
Post #3





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

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


  1. if(count(mysql_fetch_array($wynik))>0){


i pokaz jeszcze funkcje koszyk()

Ten post edytował lord2105 12.12.2010, 15:05:47


--------------------
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
sebap123
post
Post #4





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Już problem naprawiony. Wystarczyło zrobić to co powiedział cycofiasz.

Dzięki za pomoc.
Go to the top of the page
+Quote Post
lord2105
post
Post #5





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

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


to co napisal cycofiasz ma taka sama zasadę działania jak moje rozwiązanie.... btw.


--------------------
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
cycofiasz
post
Post #6





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


Cytat(lord2105 @ 12.12.2010, 16:15:15 ) *
to co napisal cycofiasz ma taka sama zasadę działania jak moje rozwiązanie.... btw.


Mylisz się, Twój kod nic nie da.
Go to the top of the page
+Quote Post
lord2105
post
Post #7





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

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


Cytat(cycofiasz @ 12.12.2010, 16:58:43 ) *
Mylisz się, Twój kod nic nie da.


A może na początek sprawdziłbyś czy coś da i zainteresował się jak działa funkcja count() ? a później pisał takie bzdury.


--------------------
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
cycofiasz
post
Post #8





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


Cytat(lord2105 @ 12.12.2010, 17:11:03 ) *
A może na początek sprawdziłbyś czy coś da i zainteresował się jak działa funkcja count() ? a później pisał takie bzdury.


Bez napinki dry.gif

Sprawdź jak działa funkcja mysql_fetch_array oraz przetestuj te kody na jakimś sql który zwraca więcej niż 1 rekord.
Go to the top of the page
+Quote Post
lord2105
post
Post #9





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

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


jeżeli mysql_fetch_array zrobi tablice z rekordow w bazie to chyba wiadomo, ze cos znalazl i czy zastosujesz count do spr czy cos znalazl czy mysql_num_rows to jeden pies...

mozesz dac:

  1. if(count($tab = mysql_fetch_array($wynik)) > 0)


a pozniej dac:
  1. while($tab)


albo inaczej:

  1. if (is_array(mysql_fetch_array($wynik))) {
  2. //kod
  3. }


Ten post edytował lord2105 12.12.2010, 17:20:55


--------------------
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
cycofiasz
post
Post #10





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


Problem autora tematu nie zostałby rozwiązany twoim sposobem bo nie chodzi tu o wynik ifa ale o przycinanie rezultatu zapytania
Go to the top of the page
+Quote Post
lord2105
post
Post #11





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

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


zostałby rozwiązany z tego względu iż if byłby spełniony


--------------------
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
cycofiasz
post
Post #12





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


Cytat(lord2105 @ 12.12.2010, 17:46:39 ) *
zostałby rozwiązany z tego względu iż if byłby spełniony


Założymy się o 50zł że nie zostałby?
Go to the top of the page
+Quote Post
lord2105
post
Post #13





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

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


zbędna dyskusja, mogę się założyć nawet o 1000zl...

Moze ktoś się wypowie i uświadomi kolegę, ze sie myli?


--------------------
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
sebap123
post
Post #14





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Żeby zakończyć ten spór powiem, że formuła lorda2105 daje identyczny efekt co cycofiasza.

Tak więc jest chyba remis.

A tak na marginesie, to nie jestem pewien, czy warunki do testu są same bo nie wiem czy jakaś inna funkcja w razie błędu nie przejmuje tej opcji bo już trochę zmieniłem kod.
Go to the top of the page
+Quote Post
cycofiasz
post
Post #15





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


lord2105, stwórz sobie tabelę:

  1. CREATE TABLE IF NOT EXISTS `koszyk` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `user` int(11) NOT NULL,
  4. `pr_id` int(11) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
  7.  
  8.  
  9. INSERT INTO `koszyk` (`id`, `user`, `pr_id`) VALUES
  10. (1, 2, 56),
  11. (2, 2, 40),
  12. (3, 2, 23);




A następnie odpal ten kod php:

  1. <?php
  2.  
  3. $connection = mysql_connect('localhost', 'root', 'pass')
  4. or die('<b>Brak połączenia z serwerem MySQL</b><br/>'.mysql_error());
  5.  
  6.  
  7. $db = mysql_select_db('test', $connection)
  8. or die('<b>Nie mogę połączyć się z bazą danych:</b><br/>'.mysql_error());
  9.  
  10.  
  11.  
  12.  
  13. $wynik=mysql_query("SELECT * FROM koszyk WHERE user='2' ");
  14.  
  15.  
  16. echo 'COUNT+mysql_fetch_array:<br />';
  17.  
  18. if(count(mysql_fetch_array($wynik))>0){
  19.  
  20. while($product = mysql_fetch_array($wynik)) {
  21.  
  22. echo $product['pr_id'] , '<br />';
  23.  
  24. }
  25. }
  26.  
  27.  
  28.  
  29.  
  30. $wynik=mysql_query("SELECT * FROM koszyk WHERE user='2' ");
  31.  
  32.  
  33. echo '<br /><hr /><br />mysql_num_rows:<br />';
  34.  
  35. if(mysql_num_rows($wynik)>0) {
  36.  
  37. while($product = mysql_fetch_array($wynik)) {
  38.  
  39. echo $product['pr_id'] , '<br />';
  40.  
  41. }
  42. }
  43. ?>
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: 21.08.2025 - 07:57