Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]If - odmiana słowa w zależności od wartości zmiennej
Forum PHP.pl > Forum > Przedszkole
czernin
Witam,

Mam taki skrypt:


  1. <?php
  2. $wiadomosci = 4;
  3.  
  4. echo $wiadomosci;
  5.  
  6. if($wiadomosci === 0) {
  7. echo 'wiadomości';
  8. }
  9.  
  10. if($wiadomosci === 1) {
  11. echo 'wiadomość';
  12. }
  13.  
  14. if($wiadomosci === 2) {
  15. echo 'wiadomości';
  16. }
  17.  
  18. if($wiadomosci === 3) {
  19. echo 'wiadomości';
  20. }
  21.  
  22. if($wiadomosci === 4) {
  23. echo 'wiadomości';
  24. }


Skrypt w zależności od wartości wyświetla odmienione słowo "wiadomość". I chodzi mi o to, jak skrócić taki skrypt, żeby w jednym warunku podać przedział od 2 do np. 1000 albo w nieskończoność.

  1. if($wiadomosci === 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11) {
  2. echo 'wiadomości';
  3. }


To oczywiście nie działa.

I tu pytanie, jak to zrobić?
KotWButach
  1.  
  2. if($wiadomosci < 1000 && $wiadomosci > 2)
  3. {
  4. //...
  5. }
  6.  
  7. if($wiadomosci === 2 || $wiadomosci === 3)
  8. {
  9. //...
  10. }
  11.  
vonski
A może po prostu:

  1. if($wiadomosci == 1) {
  2. echo 'wiadomość';
  3. } else {
  4. echo 'wiadomości';
  5. }
czernin
Mam jeszcze mały problem. Skrypt poniżej w zależności od wartości $wiad wyświetla np. 0 wiadomości, 1 wiadomość, 2 wiadomości itp. Ale gdy $wiad zwróci pusty wynik wyświetla się sam napis wiadomości. Jak zrobić, aby przy pustym wyniku było wyświetlane: "0 wiadomości"?

  1. <?php
  2. include 'config.php';
  3. db_connect();
  4.  
  5. $user_data = get_user_data();
  6. $user = $user_data['user_name'];
  7. $wiadomosci = mysql_query("SELECT SUM(wartosc) FROM wiadomosci WHERE `odbiorca` = '$user'");
  8.  
  9. if($_SESSION['logged']) {
  10.  
  11. while($row = mysql_fetch_array($wiadomosci))
  12. {
  13.  
  14. $wiad = &$row['SUM(wartosc)'];
  15.  
  16. if($wiad == 0) {
  17. echo '<div class="maly prawy">';
  18. } else {
  19. echo '<div id="wiadomosci">
  20. <div class="prawy">';
  21. }
  22.  
  23. echo '<a href="wiadomosci.php"> '.$wiad.' ';
  24. }
  25.  
  26. if($wiad == 1) {
  27. echo 'wiadomość';
  28. } else {
  29. echo 'wiadomości';
  30. }
  31.  
  32. if($wiad == 0) {
  33. echo '</div></a>';
  34. } else {
  35. echo '</div></div></a>';
  36.  
  37. }
  38. }
  39.  
  40. ?>
b4rt3kk
Najprościej to zmienić zapytanie:

  1. $wiadomosci = mysql_query("SELECT COUNT(wartosc) FROM wiadomosci WHERE `odbiorca` = '$user'");


Chyba, że kolumna wartosc przechowuje jakieś liczby konkretne, które mają być zsumowane.

Inaczej:

  1. if (isset($row['SUM(wartosc)']) OR $row['SUM(wartosc)'] != '') $wiad = $row['SUM(wartosc)']; else $wiad = 0;


Chociaż pierwszy sposób uważam za lepszy, chyba że w wartosc są liczby różne od 1 i to SUM rzeczywiście ma jakieś konkretne działanie. Bo tak w ogóle to nie wypisuje Ci liczby 0 wiadomości z konkretnej przyczyny, zapytanie nie zwraca żadnych wyników. Co oznacza, że nie ma odbiorcy o nazwie $user. COUNT pozwala wyeliminować ten problem.
czernin
No własnie liczby z kolumny wartosc są sumowane. Jest jakieś inne wyjście?
b4rt3kk
Tak jak napisałem wyżej. Popełniasz błąd uznając za pewnik, że zapytanie musi zwrócić wyniki i przechodzisz od razu do pętli. Stąd czasem pewno to przypisanie zwracało błąd, że taka zmienna nie istnieje:

  1. $wiad = &$row['SUM(wartosc)'];


Powinno nastąpić sprawdzenie, czy zapytanie zwróciło wyniki:

  1. $wiadomosci = mysql_query("SELECT SUM(wartosc) FROM wiadomosci WHERE `odbiorca` = '$user'");
  2. if (mysql_num_rows($wiadomosci)>0) {
  3. // tutaj zaczynasz działać
  4. } else echo 'brak wiadomosci';

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.