Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Spełnianie warunku else if
szuki
post
Post #1





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

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


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





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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. }


Ten post edytował b4rt3kk 3.10.2012, 11:58:05
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%)
-----


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.

Ten post edytował szuki 3.10.2012, 12:00:06
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




Widać warunek dla ELSEIF nie jest prawdziwy wiec wykonuje się else....
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #5





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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





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

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


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





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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





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

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


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





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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





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

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


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?
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #11





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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>";
Go to the top of the page
+Quote Post
szuki
post
Post #12





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

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


Działa, dziękuje.


Ten post edytował szuki 3.10.2012, 21:29:22
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:55