Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z pętlą wyświetlającą rekordy z tablicy
Forum PHP.pl > Forum > PHP
sebap123
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.
cycofiasz
Spróbuj zamienić

if(mysql_fetch_array($wynik)>0){

na:

if(mysql_num_rows($wynik)>0){

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


i pokaz jeszcze funkcje koszyk()
sebap123
Już problem naprawiony. Wystarczyło zrobić to co powiedział cycofiasz.

Dzięki za pomoc.
lord2105
to co napisal cycofiasz ma taka sama zasadę działania jak moje rozwiązanie.... btw.
cycofiasz
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.
lord2105
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.
cycofiasz
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.
lord2105
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. }
cycofiasz
Problem autora tematu nie zostałby rozwiązany twoim sposobem bo nie chodzi tu o wynik ifa ale o przycinanie rezultatu zapytania
lord2105
zostałby rozwiązany z tego względu iż if byłby spełniony
cycofiasz
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?
lord2105
zbędna dyskusja, mogę się założyć nawet o 1000zl...

Moze ktoś się wypowie i uświadomi kolegę, ze sie myli?
sebap123
Ż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.
cycofiasz
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. ?>
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.