Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Spełnianie warunku else if
Forum PHP.pl > Forum > Przedszkole
szuki
Witam, mam problem. Przed wysłaniem danych do bazy, pobieram i sprawdzam czy wpis istnieje. Problem w tym, że IF się wykonuje i działa poprawnie, natomiast ELSE IF i ELSE już nie.

  1. // Pętla przekazująca za każdym razem inny numer zamówienia
  2.  
  3. $nrzamowienia= $c[0];
  4.  
  5. $sprawdzbaze = mysql_query("select * from sold where id_auction='$nrzamowienia'"); // Pobiera dany numer zamówienia (o ile występuje)
  6.  
  7. while ($row3 = mysql_fetch_array($sprawdzbaze)){
  8.  
  9. if($row3["id_auction"] == $c[0] && $row3["count"] == $c[5] && $row3["login"] == $c[2] && $row3["date"] == $unixtime_to_date){
  10.  
  11. echo "wpis znajduje się w bazie</br>"; // Ten warunek zostaje spełniony i wyświetlony.
  12.  
  13. }
  14.  
  15. else if($row3["id_auction"] != $c[0] && $row3["login"] != $c[2]){
  16.  
  17. echo "nie ma</br>"; // Ten już nie.
  18.  
  19. }
  20.  
  21. else{
  22.  
  23. echo "inny tekst</br>"; // Ten również.
  24.  
  25. }
  26.  
  27. }


Ostatnie 2 nie wykonują się, a są prawdziwe. Pewnie robię jakiś głupi błąd. Proszę o rady.

Pozdrawiam.
b4rt3kk
No bo jak się ma wykonać else skoro już pierwszy warunek jest prawdziwy? Else z angielskiego to mniej więcej w innym wypadku.

  1. if (warunek) {
  2. // jesli warunek jest prawdziwy to tutaj zakonczy sie sprawdzanie dalszych warunkow, w przeciwnym razie idzie dalej do warunek 2
  3. } else if (warunek2) {
  4. // jesli warunek2 jest prawdziwy i warunek jest falszywy jestesmy tutaj, w przeciwnym razie leci dalej
  5. } else {
  6. // jesli warunek i warunek2 sa falszywe jestesmy tutaj
  7. }
szuki
No tak, ale te warunki są w innej, większej pętli. Przy drugim wykonaniu pętli podany jest inny numer zamówienia, a wtedy pierwszy IF jest nieprawdziwy, więc powinien wykonać się else if.
nospor
Widać warunek dla ELSEIF nie jest prawdziwy wiec wykonuje się else....
b4rt3kk
Cytat(szuki @ 3.10.2012, 12:59:44 ) *
No tak, ale te warunki są w innej, większej pętli. Przy drugim wykonaniu pętli podany jest inny numer zamówienia, a wtedy pierwszy IF jest nieprawdziwy, więc powinien wykonać się else if.


Jesteś absolutnie pewien? Co wyświetla jako wynik? Nawet jeśli masz błąd w warunkach ostatnie else powinno się wykonać i wyświetlić napis: inny tekst.
szuki
Pętla wykonuje się załóżmy 2 razy.

Za pierwszym razem pobrany jest numer zamówienia: 1234. Wtedy sprawdzam bazę

  1. $sprawdzbaze = mysql_query("select * from sold where id_auction='$nrzamowienia'");


Jeżeli występuje, to spełnia warunki z IFa i wyświetla echo. No ale gdy pętla wykona się drugi raz i poda załóżmy nr zamówienia: 1222 i po sprawdzeniu bazy okazuje się, że rekord nie istnieje, to pierwszy IF jest nieprawidłowy, prawda? Powinien wykonać się else if, albo chociaż else.
b4rt3kk
Ciężko powiedzieć czy warunek jest prawidłowy czy nie, bo mamy tylko zmienne i można się tylko domyślać jakie wartości przechowują, dlatego napisz jakie treści są wyświetlane po uruchomieniu tejże pętli.
szuki
Zauważyłem, że problem polega na tym, że IF jest cały czas prawdziwy, za każdym wykonaniem pętli.

  1. if($row3["id_auction"] == $c[0] && $row3["count"] == $c[5] && $row3["login"] == $c[2] && $row3["date"] == $unixtime_to_date)


Coś rzuca się Wam w oczy, czemu tak się dzieje? Jeśli celowo go zmienię, to wtedy wykonuje się else.

b4rt3kk, przykładowe dane w bazie:

NUMER ZAMÓWIENIA|ILOSC|LOGIN|DATA|

2734|1|Szuki|2012-09-11
2124|3|xxxx |2012-09-21

No i jeżeli "numer zamówienia" jest w bazie, to powinien wykonać się IF. W przeciwnym wypadku reszta.
b4rt3kk
Ja by zaczął od sprawdzenia jakie dane wyrzuca wszystko po kolej.

  1. echo $nrzamowienia= $c[0];
  2.  
  3. $sprawdzbaze = mysql_query("select * from sold where id_auction='$nrzamowienia'"); // Pobiera dany numer zamówienia (o ile występuje)
  4.  
  5. while ($row3 = mysql_fetch_array($sprawdzbaze)){
  6.  
  7. print_r($row3);
  8. print_r($c);
  9.  
  10. if($row3["id_auction"] == $c[0] && $row3["count"] == $c[5] && $row3["login"] == $c[2] && $row3["date"] == $unixtime_to_date){
  11.  
  12. echo "wpis znajduje się w bazie</br>"; // Ten warunek zostaje spełniony i wyświetlony.
  13.  
  14. }
  15.  
  16. else if($row3["id_auction"] != $c[0] && $row3["login"] != $c[2]){
  17.  
  18. echo "nie ma</br>"; // Ten już nie.
  19.  
  20. }
  21.  
  22. else{
  23.  
  24. echo "inny tekst</br>"; // Ten również.
  25.  
  26. }
  27.  
  28. }


Bo skoro pierwszy if jest cały czas prawidłowy to coś tutaj jest nie tak.
szuki
Ok, już chyba wiem co jest nie tak. Warunek jest cały czas spełniany, bo pętla wykonuje się tylko wtedy gdy wpis znajduje się w bazie. Czyli jeżeli pobieram 20 wpisów, a 4 są w bazie, to tylko tyle razy się wykona. Ma ktoś pomysł, jak przerobić else ifa? By wykonywał się, jeżeli zapytanie nic nie zwróci. Chyba count == 0 będzie najlepszym rozwiązaniem?
b4rt3kk
Najlepszym rozwiązaniem jest sprawdzenie liczby wyników ZANIM zaczniesz cokolwiek innego.

  1. $sprawdzbaze = mysql_query("select * from sold where id_auction='$nrzamowienia'"); // Pobiera dany numer zamówienia (o ile występuje)
  2.  
  3. if (mysql_num_rows($sprawdzbaze) > 0) {
  4.  
  5. while ($row3 = mysql_fetch_array($sprawdzbaze)){
  6. // cała ta pętla
  7. }
  8.  
  9. } else echo "nie ma</br>";
szuki
Działa, dziękuje.
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.