Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wiele warunków, pusty wynik ostatniego else
szuki
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2012

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


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.

Ten post edytował szuki 5.12.2012, 21:48:37
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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ć.
Go to the top of the page
+Quote Post
szuki
post
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2012

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


Nie pomyślałem. Dziękuję.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 17:17