Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Niejasny problem z pętlą w funkcji
Forum PHP.pl > Forum > Przedszkole
sebap123
Napisałem sobie funkcję, która wyświetla produkty w koszyku. Wszystko ładnie działało, Każdy produkt miła swoje "okienko". Postanowiłem dodać jeszcze opcje ilości. Czyli przy produkcie jest lista rozwijana z wartościami od 1 do 10 i zaznaczona jest wartość odpowiadająca wcześniej podanej ilości (wszystko jest pobierane z bazy MySQL).
Kod wygląda następująco:
funkcja wykonująca wszystko:
  1. function cart($id, $qty){
  2. echo'<div class="item">
  3. <div class="item_pic">
  4. <img width="84" height="87" src="'.IMAGES.'k'.$id.'.jpg">
  5. <div class="item_button">
  6. <a href="'.PATH.'adder.php?id='.$id.'&op=0"><span><b>Usun z koszyka</b></span></a>
  7. </div>
  8. </div>
  9. <div class="item_data">
  10. <span>Numer kat: '.$id.'</span>
  11. <br />
  12. <span>Cena: 425,00 zl</span>
  13. <br />
  14. <div class="item_selector">
  15. <label for="Ilosc">Ilosc:</label>
  16. <select name="'.$id.'" id="item_selector">';
  17.  
  18. // Utworzenie listy wyboru ilości na bazie dostarczonej liczby z MySQL
  19. $il=1;
  20. while($il!=$qty){
  21. echo'<option value="'.$il.'">'.$il.'</option>';
  22. $il=$il+1;
  23. }
  24. echo'<option value="'.$qty.'" selected="selected">'.$qty.'</option>';
  25. if($qty<10){
  26. while($qty<11){
  27. echo'<option value="'.$il.'">'.$il.'</option>';
  28. $qty=$qty+1;
  29. }}
  30. else{}
  31.  
  32. echo'</select>
  33. </div>
  34. </div>
  35. </div>';
  36. }


Fragment w kodzie który wywołuje funkcje i podaje jej parametry:
  1. $match=mysql_query("SELECT * FROM koszyk WHERE user='".$_SESSION["user"]."' LIMIT ".$h.",6");
  2. while($product = mysql_fetch_array($match)){
  3. $pr_id=$product['pr_id'];
  4. $pr_qty=$product['qty'];
  5. cart($pr_id, $pr_qty);
  6. }


Wynikiem działania tego skryptu jest nic. Po prostu biały ekran. I teraz nie mam nawet pojęcia co jest nie tak. Podejrzewam, jak że zdarzyło mi się coś takie wcześniej, że błędem może być jakiś malutki fragmencik, którego nie zauważam, mam jednak nadzieję, że ktoś go zauważy i zechce mi pomóc.
Kostek.88
Przed wykonaniem funkcji cart(); daj sobie var_dump'a na zmienne powyżej. Czy na pewno zawierają te dane co trzeba? Nie wysyłasz pustych wartości?

  1. var_dump($pr_id);
  2. var_dump($pr_qty);
sebap123
Dodałem to do skryptu, ale nie wiem co jest grane, bo nadal nic nie widać. Nie ukrywam też, że nie znam się na tej komendzie którą mi podałeś, ale w manualu, też jakoś jej działanie nie jest specjalnie wytłumaczone (w sensie jak ją właściwie wykorzystać i może tutaj jest błąd, że nic nie widzę). Ne sądze,żebym wysyłam puste zmienne, bo wcześniej kod był nieco "biedniejszy" i ładnie działał (wysyłał tylko $pr_id). Poza tym wcześniej mam zabezpieczenie, przed wywołaniem tej funkcji jeśli w tabeli nie ma pasujących wyników. Tak więc nie sądzę, żeby to było to.
lord2105
Zamiast:

  1. $il=$il+1;


To tak:

  1. $il++;


To nie apropo błędu, a teraz apropo błędu - po tym:

  1. while($product = mysql_fetch_array($match)){


daj:

  1. var_dump($product);
  2. echo '<br>';


kolega @Kaloryfer:

Cytat
Przed wykonaniem funkcji cart(); daj sobie var_dump'a na zmienne powyżej. Czy na pewno zawierają te dane co trzeba? Nie wysyłasz pustych wartości?


Czy te zmienne Twoim zdaniem to tablice? Bo mi sie nie wydaje...

@sebap123:
Cytat
Poza tym wcześniej mam zabezpieczenie, przed wywołaniem tej funkcji jeśli w tabeli nie ma pasujących wyników.


Pokaz je
sebap123
Sądzę, że są to tablice, bo niby jakim sposobem by mi wcześniejszy "model" skryptu miał działać?
Mówię, że wcześniej pobierał tylko pr_id.

A co do zabezpieczenia to jest to zwykły if. Ale, żeby mieć 100% pewność to sprawdziłem, że tablica jest niepusta (jest tam parę testowych rekordów, które wcześniej działały). Mówię, że to jest chyba coś z pętlą. Bo w momencie kiedy ją napisałem wszystko się posypało.

A i te twoje polecenie nic nie dało. Cały czas upiera się przy białym ekranie.
lord2105
zmienne $pr_id i $pr_qty to nie tablice!

tablica jest $product


  1. var_dump($product);


nic nie pokazuje?
sebap123
No wiem, że tablicą jest tylko product, a reszta to jej komórki. A var dump nic nie pokazuje. Może skierować wysyłanie info z var dump do jakiegoś pliku? Chociaż nie ukrywam, że trochę w ten pomysł nie wierze.
lord2105
To:

  1. $match=mysql_query("SELECT * FROM koszyk WHERE user='".$_SESSION["user"]."' LIMIT ".$h.",6");
  2. while($product = mysql_fetch_array($match)){
  3. $pr_id=$product['pr_id'];
  4. $pr_qty=$product['qty'];
  5. cart($pr_id, $pr_qty);
  6. }


zamień chwilowo na, zobaczymy czy masz połączenie z mysql, a później dokladaj do zapytania WHERE i LIMIT :

  1. $match=mysql_query("SELECT * FROM koszyk");
  2. while($product = mysql_fetch_array($match)){
  3. var_dump($product);
  4. echo '<br>';
  5. }


Pokaz jeszcze nad while echo $h;
sebap123
Trochę zrobiłem inaczej niż powiedziałeś, i teraz coś udało mi się odkryć, ale średnio wiem jak to teraz zinterpretować. Mianowicie schowałem wszystko co dopisałem i co było związane z $pr_qty w pętli w funkcji. Potem kazałem mu tylko tą zmienną wyświetlić, a reszta kodu jest już przetestowana i w 100% działa, tak więc już wiem co powoduje błędy (w pewnym sensie). Tak teraz wyglądają kody:

wywołanie funkcji:
  1. $match=mysql_query("SELECT * FROM koszyk WHERE user='".$_SESSION["user"]."' LIMIT ".$h.",6");
  2. while($product = mysql_fetch_array($match)){
  3. $pr_id=$product['pr_id'];
  4. $pr_qty=$product['qty'];
  5. $pr_size=$product['size'];
  6. cart($pr_id, $pr_qty);
  7. }


w sumie to to się nie zmieniło.

I tutaj już pozmieniana funkcja (dla wygody czytania wywaliłem ten ukryty kod, bo jest on umieszczony parę postów wyżej.
  1. function cartk($id, $qty){
  2. echo'<div class="item">
  3. <div class="item_pic">
  4. <img width="84" height="87" src="'.IMAGES.'k'.$id.'.jpg">
  5. <div class="item_button">
  6. <a href="'.PATH.'adder.php?id='.$id.'&op=0"><span><b>Usun z koszyka</b></span></a>
  7. </div>
  8. </div>
  9. <div class="item_data">
  10. <span>Numer kat: '.$id.'</span>
  11. <br />
  12. /////////////////////////////////////////////////////
  13. // w tym miejscu dopisałem wyświetlenie $qty
  14. <span>Cena: 425,00 zl il: '.$qty.'</span>
  15. /////////////////////////////////////////////////////
  16. <br />
  17. <div class="item_selector">
  18. <label for="Ilosc">Ilosc:</label>
  19. <select name="'.$id.'" id="item_selector">';
  20. echo'<option value="1">1</option>';
  21.  
  22. echo'</select>
  23. </div>
  24. <div class="item_selector">
  25.  
  26. <label for="Rozmiar">Rozmiar:</label>
  27. <select name="data[Ilosc][name]" id="item_selector">
  28. <option value=""></option>
  29. <option value="1">Rozmiar1</option>
  30. <option value="2">Rozmiar2</option>
  31. </select>
  32. </div>
  33. </div>
  34. </div>';
  35. }


No a teraz najciekawsze, czyli co widać. Właśnie widać wszystko oprócz $qty która jest tutaj:
  1. <span>Cena: 425,00 zl il: '.$qty.'</span>
lord2105
  1. $match=mysql_query("SELECT * FROM koszyk WHERE user='".$_SESSION["user"]."' LIMIT ".$h.",6");
  2. while($product = mysql_fetch_array($match)){
  3. $pr_id=$product['pr_id'];
  4. $pr_qty=$product['qty'];
  5.  
  6. echo $pr_qty.'<br>';// co pokazuje?
  7.  
  8. $pr_size=$product['size'];
  9. cart($pr_id, $pr_qty);
  10. }


Poprosze jeszcze zrzut tabeli koszyk
sebap123
Dobra już naprawiłem. Błąd był w innym miejscu, o którym zupełnie zapomniałem. Miałem w innym miejscu jeszcze wywołanie funkcji cart i tam właśnie w czasie aktualizacji zapomniałem dodać drugiej zmiennej. To był błąd. Nie mniej jednak wielkie dzięki za zainteresowanie i w pewnym sensie pomoc.

A tak na marginesie:
1. czy jak mam funkcję if to muszę koniecznie dodać opcję else? bo z innych języków pamiętam, że to nie jest obowiązkowe.
2. czy to był jakiś błąd, że wpisywałem zmienna=zmienna+1 a nie zmienna++? Czy to nie jest po prostu taka zasada pisowni takich fragmentów wśród programistów?
lord2105
1. nie musisz
2. nie był to błąd, który oddziaływał na niepoprawne działanie programu, nie mniej jednak kod jest wtedy bardziej czytelny
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.