Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wiele warunków, pusty wynik ostatniego else
Forum PHP.pl > Forum > PHP
szuki
Witam, mam problem. Chciałbym dokończyć skrypt, ale coś robię nie tak. Całość polega na tym, że:

Zadaję pytanie do bazy, jeżeli otrzymuję pusty wynik, to mam warunek, który zadaje kolejne pytanie, jeżeli to również okaże się zwracać pusty wynik, następuje update do bazy - oznaczając aktualnie pobierany rekord (dlatego, że pobieram z bazy 1, następnie przekazuje wynik do bazy 2, aby w niej pobrać następne dane). Natomiast jeżeli wszystkie warunki są pominięte wykonuje ostatniego else.

Wszystko jest ok, jednak, jeżeli na końcu pętli wyświetlę dane (echo $artnr . "</br>";), otrzymuję wyniki poza ostatnim else. Ten wyświetla napis, że pobrał za pierwszym razem, ale wyników już nie zwraca. Pewnie robię jakiś głupi błąd.

Będę wdzięczny za pomoc.

  1. // Pobieranie rekordu z bazy 1
  2.  
  3. while ($row = mysql_fetch_array($stmt1)) {
  4.  
  5. include('class/clear_symbol_class.php');
  6.  
  7. $stmt2 = "SELECT * FROM baza2(1, NULL, 1, NULL, '$symbol')";
  8. $sth2 = ibase_query($dbh, $stmt2);
  9.  
  10. if(ibase_fetch_assoc($sth2) == false){
  11.  
  12. $stmt2 = "SELECT * FROM baza2(1, NULL, 1, NULL, '$symbol_producer')";
  13. $sth2 = ibase_query($dbh, $stmt2);
  14.  
  15. if(ibase_fetch_assoc($sth2) == false){
  16.  
  17. /* $update = "UPDATE ...";
  18. mysql_query($update) or die(mysql_error()); */
  19.  
  20. echo "Brak wyników, błędny kod. ";
  21.  
  22. }
  23.  
  24. else{
  25. echo "Użyłem drugiego symbolu. ";
  26. $row2 = ibase_fetch_assoc($sth2);
  27. $artnr = $row2["NR"];
  28. }
  29. }
  30.  
  31. else{
  32.  
  33. echo "Działa za pierwszym. ";
  34. $row2 = ibase_fetch_assoc($sth2);
  35. $artnr = $row2["NR"];
  36. }
  37.  
  38.  
  39. echo $artnr . "</br>";
  40. }
  41.  


W efekcie dla przykładu otrzymuję:

Błędny symbol.
Użyłem drugiego symbolu. 1255abc1
Użyłem drugiego symbolu. 1255abc2
Działa za pierwszym. (A TUTAJ NIC)

Jeżeli dla testu zostawię tylko ostatni warunek, to wszystko jest ok, jednak dla tych wszystkich już nie.
nospor
if(ibase_fetch_assoc($sth2) == false){

ibase_fetch_assoc zwraca rekord i przechodzi do następnego. Jeśli ty w IF używasz ibase_fetch_assoc to w tym momencie pobierasz już rekord. A ze go nie zapisujesz to go tracisz. Później wewnatrz IF znowu robisz ibase_fetch_assoc ale z racji ze był tylko jeden rekord, to w IF już rekordu nie ma. Proste.

Przed IF musisz zapisac wynik ibase_fetch_assoc i na nim dopiero operować.
szuki
Nie pomyślałem. Dziękuję.
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.