Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]Funkcja if kilka warunków
marcus753
post 18.06.2009, 13:56:45
Post #1





Grupa: Zarejestrowani
Postów: 281
Pomógł: 3
Dołączył: 8.06.2009
Skąd: Kraków

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


witam zastanawiam się nad funkcją warunkową if a mianowicie

  1. <?php
  2. if($dlugosc1<6 || $dlugosc2>20 && $alert<>1){
  3. echo"TAK";}
  4. ?>


jeśli zmienna długość jest mniejsza od 6 lub równa 20 oraz jezeli zmienna alert jest inna niz 1 skrypt powinien sie wykonać ale wykonuje się również wtedy kiedy zmienna alert wynosi jeden a tego chciałbym uniknąć ;/ będę wdzięczny za pomoc jak sformułować takie zapytanie dry.gif


--------------------
Cokolwiek zostanie upuszczone na uklad elektroniczny, spadnie zawsze tam gdzie wyrzadzi najwiecej szkody.
Go to the top of the page
+Quote Post
Pawel_W
post 18.06.2009, 13:58:39
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


  1. <?php
  2. if($dlugosc1<6 || $dlugosc2==20 && $alert!=1){
  3. echo"TAK";}
  4. ?>
Go to the top of the page
+Quote Post
scanner
post 18.06.2009, 14:00:22
Post #3





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




  1. <?php
  2. if( ( ( $dlugosc1 < 6 ) || ( $dlugosc2 == 20 ) ) && ( $alert != 1 ) ){
  3.    echo"TAK";
  4. }
  5. ?>

Powinno działać. Grupowanie wyrażeń nawiasami bardzo pomaga - logika i matematyka się kłaniają.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
brzanek
post 25.03.2016, 08:50:40
Post #4





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


  1. if($dzien4maxwind < 30)
  2. {
  3. echo "<td>".$dzien4maxwind."km/h</td>";
  4. }
  5. if( ( $dzien4maxwind > 30 ) || ( $dzien4maxwind < 37 ) )
  6. //if($dzien4maxwind > 30 || $dzien4maxwind < 37)
  7. {
  8. echo "<td class='kolorwiatr'>".$dzien4maxwind."km/h</td>";
  9. }
  10. if( ( $dzien4maxwind > 37 ) || ( $dzien4maxwind < 50 ) )
  11. //if($dzien4maxwind > 37 || $dzien4maxwind < 50)
  12. {
  13. echo "<td class='kolorwiatr1'>".$dzien4maxwind."km/h</td>";
  14. }
  15. if($dzien4maxwind > 50)
  16. {
  17. echo "<td class='kolorwiatr2'>".$dzien4maxwind."km/h</td>";
  18. }


Dlaczego to nie działa? N stronie pojawiają mi się dwie wartości a powinna być tylko jedna.
Go to the top of the page
+Quote Post
kapslokk
post 25.03.2016, 08:54:02
Post #5





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


  1. if( ( $dzien4maxwind > 30 ) || ( $dzien4maxwind < 37 ) )
  2. ...
  3. if( ( $dzien4maxwind > 37 ) || ( $dzien4maxwind < 50 ) )


Przyjmij, że $dzien4maxwind = 30


Jeśli $dzien4maxwind >30 lub $dzien4maxwind <37 - jest ok bo jest mniejszy od 37
Jeśli $dzien4maxwind > 37 lub $dzien4maxwind < 50 - też jest ok bo jest mniejszy od 50
Zamień OR na AND i bedzie działało jak chcesz
Go to the top of the page
+Quote Post
brzanek
post 25.03.2016, 10:10:21
Post #6





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Zamiana na and nie pomogła
  1. if($dzien4maxwind < 30)
  2. {
  3. echo "<td>".$dzien4maxwind."km/h</td>";
  4. }
  5. if( ( $dzien4maxwind > 30 ) and ( $dzien4maxwind < 37 ) )
  6. {
  7. echo "<td class='kolorwiatr'>".$dzien4maxwind."km/h</td>";
  8. }
  9. if( ( $dzien4maxwind > 37 ) and ( $dzien4maxwind < 50 ) )
  10. {
  11. echo "<td class='kolorwiatr1'>".$dzien4maxwind."km/h</td>";
  12. }
  13. if($dzien4maxwind > 50)
  14. {
  15. echo "<td class='kolorwiatr2'>".$dzien4maxwind."km/h</td>";
  16. }
Go to the top of the page
+Quote Post
Pyton_000
post 25.03.2016, 10:13:43
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


1. dla warunków poza pierwszym powinno być elseif
2. musisz użyć >= lub <= bo np. 37 nigdzie Ci nie wpadnie
Go to the top of the page
+Quote Post
brzanek
post 25.03.2016, 10:27:47
Post #8





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Nadal nie widać odpowiedniego efektu
  1. if($dzien4maxwind < 30)
  2. {
  3. echo "<td>".$dzien4maxwind."km/h</td>";
  4. }
  5. elseif( ( $dzien4maxwind >= 30 ) and ( $dzien4maxwind < 37 ) )
  6. {
  7. echo "<td class='kolorwiatr'>".$dzien4maxwind."km/h</td>";
  8. }
  9. elseif( ( $dzien4maxwind >= 37 ) and ( $dzien4maxwind < 50 ) )
  10. {
  11. echo "<td class='kolorwiatr1'>".$dzien4maxwind."km/h</td>";
  12. }
  13. elseif($dzien4maxwind > 50)
  14. {
  15. echo "<td class='kolorwiatr2'>".$dzien4maxwind."km/h</td>";
  16. }
Go to the top of the page
+Quote Post
Pyton_000
post 25.03.2016, 10:29:40
Post #9





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Jakiego? Jaka wartość jest podstawiana, co się wyśiwetla... Kurna na prawdę trzeba pytać o każdą pierdołę?

PS. Nie żade "and", "or" tylko && i ||

Ten post edytował Pyton_000 25.03.2016, 10:30:21
Go to the top of the page
+Quote Post
brzanek
post 25.03.2016, 11:01:23
Post #10





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Dzięki działa
Go to the top of the page
+Quote Post
uirapuru
post 25.03.2016, 11:03:11
Post #11





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

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


ztcp && i || nie są równowazne z and i or - te drugie mają niższą "precendencję", czy tam priorytet, ale moge kłamac smile.gif
Go to the top of the page
+Quote Post
Pyton_000
post 25.03.2016, 11:06:00
Post #12





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Tak dokładnie && > and
Go to the top of the page
+Quote Post
uirapuru
post 25.03.2016, 11:08:23
Post #13





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

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


nigdy nie korzystałem, ale strzelam, że można wtedy zrezygnować z nawiasów, co poprawia czytelność pewnie: "A or B || C and D" itd ale prawde mówiąc jako ktoś spoza tematu widzac coś takiego myślałbym: skoro jest 'and' to && musi oznaczać coś innego
Go to the top of the page
+Quote Post
brzanek
post 3.02.2018, 23:25:59
Post #14





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Mam jeszcze taki kod ale nie działa tak jak powinien
  1. $result = $mysqli->query("SELECT htemperature, AVG(hhumidity) AS suma_wilgotnosc, AVG(hcloudCover) AS suma_zachmurzenie, AVG(hprecipProbability) AS suma_opadow_procenty, SUM(hprecipIntensity) AS suma_opadow FROM prognoza_godzinowa WHERE htime BETWEEN '".$start1."' AND '".$koniec1."' AND hid_miasto=1");
  2. while ( $row = mysqli_fetch_array($result) ) {
  3. $htemmperature = ''.$row['htemperature'].'';
  4. $summa_wilgotnosc = ''.round($row['suma_wilgotnosc'],2).'';
  5. $summa_zachmurzenie = ''.round($row['suma_zachmurzenie'],1).'';
  6. if( ( $htemmperature > 1 ) || ( $summa_wilgotnosc < 5 ) || ( $summa_zachmurzenie < 90 ) ){
  7. echo '<img src="http://brzanek.webd.pl/ikony_svg/21_d.svg" alt="brak" width="50px">';
  8. }
  9. elseif ( ( $htemmperature < 1 ) || ( $summa_wilgotnosc < 5 ) || ( $summa_zachmurzenie < 90 ) ){
  10. echo 'nie';
  11. }
  12. }


Troszkę zmieniłem kod ale i tak nie działa
  1. $result = $mysqli->query("SELECT htemperature, AVG(hhumidity) AS suma_wilgotnosc, AVG(hcloudCover) AS suma_zachmurzenie, AVG(hprecipProbability) AS suma_opadow_procenty, SUM(hprecipIntensity) AS suma_opadow FROM prognoza_godzinowa WHERE htime BETWEEN '".$start1."' AND '".$koniec1."' AND hid_miasto=1");
  2. while ( $row = mysqli_fetch_array($result) ) {
  3. $htemmperature = ''.$row['htemperature'].'';
  4. $summa_wilgotnosc = ''.round($row['suma_wilgotnosc'],2).'';
  5. $summa_zachmurzenie = ''.round($row['suma_zachmurzenie'],1).'';
  6. if( ( $htemmperature > 2 ) || ( $htemmperature < 4 ) && ( $summa_wilgotnosc < 5 ) && ( $summa_zachmurzenie < 90 ) ){
  7. echo '<img src="http://brzanek.webd.pl/ikony_svg/21_d.svg" alt="brak" width="50px">';
  8. }
  9. else if ( ( $htemmperature > 0 ) || ( $htemmperature < 2 ) && ( $summa_wilgotnosc < 5 ) && ( $summa_zachmurzenie < 90 ) ){
  10. echo 'nie';
  11. }
  12. }

Dane jakie obecnie są to:
Temperatura 0.3
Wilgotność 0.74
Zachmurzenie 39.5

Przy tych ustawieniach powinna wyświetlić się druga opcja czyli sam napis nie a pojawia się ikona z pierwszego warunku - dlaczego?

Ten post edytował brzanek 4.02.2018, 09:24:03
Go to the top of the page
+Quote Post
phpion
post 4.02.2018, 10:13:17
Post #15





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Nawiasy. Warunki || grupuj razem tj. ((coś || coś) && (coś || coś)) a nie (coś || coś && coś || coś).
Go to the top of the page
+Quote Post
brzanek
post 5.02.2018, 12:26:50
Post #16





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Jak zmieniłem na to co proponujesz to nic się nie wyświetla
  1. $result = $mysqli->query("SELECT htemperature, AVG(hhumidity) AS suma_wilgotnosc, AVG(hcloudCover) AS suma_zachmurzenie, AVG(hprecipProbability) AS suma_opadow_procenty, SUM(hprecipIntensity) AS suma_opadow FROM prognoza_godzinowa WHERE htime BETWEEN '".$start1."' AND '".$koniec1."' AND hid_miasto=1");
  2. while ( $row = mysqli_fetch_array($result) ) {
  3. $htemmperature = ''.$row['htemperature'].'';
  4. $summa_wilgotnosc = ''.round($row['suma_wilgotnosc'],2).'';
  5. $summa_zachmurzenie = ''.round($row['suma_zachmurzenie'],1).'';
  6. if( ( $htemmperature > 2.0 ) || ( $htemmperature < 3.0 )) && ( $summa_wilgotnosc < 0.8 ) && ( $summa_zachmurzenie < 90 ) {
  7. echo '<td><img src="http://brzanek.webd.pl/ikony_svg/20_d.svg" alt="brak" width="50px"></td>';
  8. }
  9. else if ( ( $htemmperature > 0.0 ) || ( $htemmperature < 2.0 )) && ( $summa_wilgotnosc > 0.5 ) && ( $summa_zachmurzenie < 90 ){
  10. echo '<td>nie</td>';
  11. }
  12. }


Troszkę zmodyfikowałem kod
  1. $result = $mysqli->query("SELECT htemperature, AVG(hhumidity) AS suma_wilgotnosc, AVG(hcloudCover) AS suma_zachmurzenie, AVG(hprecipProbability) AS suma_opadow_procenty, SUM(hprecipIntensity) AS suma_opadow FROM prognoza_godzinowa WHERE htime BETWEEN '".$start1."' AND '".$koniec1."' AND hid_miasto=1");
  2. while ( $row = mysqli_fetch_array($result) ) {
  3. $htemmperature = ''.$row['htemperature'].'';
  4. $summa_wilgotnosc = ''.round($row['suma_wilgotnosc'],2).'';
  5. $summa_zachmurzenie = ''.round($row['suma_zachmurzenie'],1).'';
  6. if( ( $htemmperature > 2.0 ) || ( $htemmperature < 3.0 ) && ( $summa_wilgotnosc < 0.8 ) && ( $summa_zachmurzenie < 90 ) ){
  7. echo '<td><img src="http://brzanek.webd.pl/ikony_svg/20_d.svg" alt="brak" width="50px"></td>';
  8. }
  9. else if ( ( $htemmperature > 0.0 ) || ( $htemmperature < 2.0 ) && ( $summa_wilgotnosc > 0.5 ) && ( $summa_zachmurzenie < 90 ) ){
  10. echo '<td>nie</td>';
  11. }
  12. }

Powinna wyświetlić druga opcja czyli napis Nie a pojawia się obrazek z pierwszego warunku.
Go to the top of the page
+Quote Post
nospor
post 5.02.2018, 12:34:42
Post #17





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




Jak nie rozumiesz prostej logiki w OR i AND to podstaw sobie przykladowe dane do twoich ifow i zastanow sie czy to ma jakikolwiek sens. Teraz prawidlowo wyswietla sie obrazek bo tak ustaliles to w IF - wszystko sie zgadza. 0.3 jest mniejsze od 3.0. A moze wg ciebie 0.3 jest wieksze od 3.0?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
brzanek
post 20.10.2023, 15:14:36
Post #18





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Witam mam jeszcze jeden problem

  1. $dataa = date('Y-m-d');
  2.  
  3. $result = $mysqli->query("SELECT date FROM liczniki ORDER BY date DESC LIMIT 1");
  4. while ( $row = mysqli_fetch_array($result) ) {
  5. $dzisiaj = $row['date'];
  6. }
  7.  
  8. $result = $mysqli->query("SELECT * FROM liczniki WHERE date = '".$dataa."'");
  9. while ( $row = mysqli_fetch_array($result) ) {
  10. $miastoid = $row['miasto'];
  11. }
  12.  
  13. if (( $dzisiaj = date('Y-m-d') ) && ( $miastoid = $rodzaj_danych )){
  14. $result = $mysqli->query("UPDATE liczniki SET licznik=licznik+1 WHERE date = '".$dataa."' AND miasto = '".$rodzaj_danych."'");
  15. }
  16. else if (( $dzisiaj = date('Y-m-d') ) && ( $rodzaj_danych != $miastoid )) {
  17. $result = $mysqli->query("INSERT INTO liczniki (date, miasto, licznik) VALUES ('".$dataa."','".$rodzaj_danych."',1)");
  18. }
  19. else {
  20. $result = $mysqli->query("INSERT INTO liczniki (date, miasto, licznik) VALUES ('".$dataa."','".$rodzaj_danych."',1)");
  21. }


Jeśli nie ma dzisiejszej daty w bazie danych to pojawia się nowy rekord i tu jest tak jak powinno być.
Jeśli jest dzisiejsza data ale nie ma odpowiedniego miasta (miastoid) to już nie pojawia się nowy rekord w bazie danych a powinien.

Proszę o pomoc.
Go to the top of the page
+Quote Post
nospor
post 20.10.2023, 16:43:27
Post #19





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




5 lat pozniej. No niezly czas. Mogles zalozyc nowy temat wink.gif

= - przypisanie
== - porownanie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
brzanek
post 20.10.2023, 18:19:52
Post #20





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Ok zmieniłem
  1. $dataa = date('Y-m-d');
  2.  
  3. $result = $mysqli->query("SELECT date FROM liczniki ORDER BY date DESC LIMIT 1");
  4. while ( $row = mysqli_fetch_array($result) ) {
  5. $dzisiaj = $row['date'];
  6. }
  7.  
  8. $result = $mysqli->query("SELECT * FROM liczniki WHERE date = '".$dataa."'");
  9. while ( $row = mysqli_fetch_array($result) ) {
  10. $miastoid = $row['miasto'];
  11. }
  12.  
  13. if (( $dzisiaj = date('Y-m-d') ) && ( $miastoid = $rodzaj_danych )){
  14. $result = $mysqli->query("UPDATE liczniki SET licznik=licznik+1 WHERE date = '".$dataa."' AND miasto = '".$rodzaj_danych."'");
  15. }
  16. else if (( $dzisiaj = date('Y-m-d') ) && ( $rodzaj_danych != $miastoid )) {
  17. $result = $mysqli->query("INSERT INTO liczniki (date, miasto, licznik) VALUES ('".$dataa."','".$rodzaj_danych."',1)");
  18. }
  19. else {
  20. $result = $mysqli->query("INSERT INTO liczniki (date, miasto, licznik) VALUES ('".$dataa."','".$rodzaj_danych."',1)");
  21. }


Pojawiają się nowe rekordy ale za każdym razem. Chcę aby po wybraniu tego samego miasta w tym samym dniu nie tworzył sie nowy rekord tylko dopisywało się do licznika licznik=licznik+1. Jeśli w danym dniu nie było wybranego miasta to oczywiście powinien stworzyć sie kolejny nowy rekord w BD.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 14:33