Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Co nie tak z tym skryptem? Funkcja "if"?
Forum PHP.pl > Forum > Przedszkole
noob10
Elo all:D

Mam problem napisałem bardzo prosty(dla was nie dla mnie;)) skrypt, który ma za zadanie liczyć liczbe odwiedzin na stronie i zgodnie z liczbą odzwiedzin strony ma wyswietlać odpowiednie komunikaty. Ale skrypt wyświetla mi jednocześnie wszystkie komunikaty, i nie bierze pod uwagę wogóle liczby odwiedzin. Co jest nie tak w tym skrypcie??

Zródło index.php
  1. <?
  2.  $ile = $_COOKIE['ile'];
  3.  $ile++;
  4.  setcookie("ile" ,"$ile");
  5. ?>
  6. <html>
  7. <body>
  8. <?
  9.  if(($ile>0) && ($ile<=1)); {echo("Jeszcze tu nie byłeś. Witaj po raz pierwszy!");}
  10.  if(($ile>1) && ($ile<=10)); {echo("Czasami do nas zaglądasz!");}
  11.  if(($ile>10) && (ile<=30)); {echo(" Często nas odwiedzasz! Cieszymy się!");}
  12. ?>
  13. </body>
  14. </html>


Prosze o pomoc!
JoShiMa
Usuń średniki za instrukcjami if. Poza tym można to napisać ładniej. Zamiast kilku ifów, konstrukcja if elsif else Poza tym jeśłi instrukcje sa jednolinijkowe nie potrzeba nawiasów klamrowych.

  1. <?
  2. if($ile==1))echo("Jeszcze tu nie byłeś. Witaj po raz pierwszy!");
  3. elseif(($ile>1) && ($ile<=10))echo("Czasami do nas zaglądasz!");
  4. else(($ile>10) && (ile<=30))echo(" Często nas odwiedzasz! Cieszymy się!");
  5. ?>
noob10
dzięki za szybka odpowiedź, ale mam jeszcze pytanie:

Czym sie różnią te konstrukcje if , elsif oraz else??

wiem że else oznacza " w przeciwnym wypadku i moge je używać wtedy jeżli chce żeby mi się wyświetlał jakiś komunikat, jeżeli warunki które wprowadzę przy if , się nie zgadzają.

Ale to elsif to nie mam pojęcia??
Majzel
elseif a nie elsif smile.gif
http://algorytmy.pl/doc/php/control-structures.elseif.php
piotrooo89
if znaczy jeżeli czyli jeże coś czemuś to zrób
else w przeciwnym wypadku bez dodatkowych warunków
elseif to co wyżej tylko podajemy warunki.

np:
  1. <?php
  2. if ($a == $b)
  3. {
  4. echo 'to samo';
  5. }
  6. else
  7. {
  8. echo 'nie to samo';
  9. }
  10. ?>

znaczy to tyle co:
jeżeli zmienna a jest równa zmiennej b to wypisz "to samo" w przeciwnym wypadku: "nie to samo"

  1. <?php
  2. if ($a == $b)
  3. {
  4. echo 'to samo';
  5. }
  6. elseif (!= $b)
  7. {
  8. echo 'nie to samo';
  9. }
  10. ?>

znaczy to tyle co:
jeżeli zmienna a jest równa zmiennej b to wypisz "to samo" w przeciwnym wypadku sprawdz czy jest różna: "nie to samo"
noob10
No ale krócej pisania jest chyba jeżeli u używam 3 ifów a nie if , elseif oraz else questionmark.gif tak czy jakoś inaczej to jeszcze można zapisywać??
Shili
Krócej pisania może i tak, ale spadek jakości i szybkości potem może być znaczny. Przy samych ifach liczone są wszystkie warunki, a przy elseifach niekoniecznie.
noob10
Czyli jednak lepiej pisać konstrukcją: if , elseif , else questionmark.gif
Poprawniejszy kod zbudowany właśnie w ten sposób??
Majzel
gdyby 3 ify znaczyły by to samo co if elseif i else to po co by było te elseif i else skoro można by je zastąpić 3 ifami ?
Tak to nie działa, if to znaczy tylko jeżeli, nie mógłbyś spełnić tego co jest w 2 ifie jeżeli ten 1 nie był by prawdą, a elseif pozwala na takie coś. else tak samo ale zazwyczaj używa się go na zakończenie.
noob10
No i poprawiłem kod na taki jak podała mi jashimka bo jego najbardziej rozumiem, ale nadal mam jakiś błąd w 11 linii... wie ktoś jaki??

Kod
<?
$ile = $_COOKIE['ile'];
$ile++;
setcookie("ile" ,"$ile");
?>
<html>
<body>
<?
     if($ile==1)echo("Jeszcze tu nie byłeś. Witaj po raz pierwszy!");
     elseif(($ile>1) && ($ile<=10))echo("Czasami do nas zaglądasz!");
     else(($ile>10) && ($ile<=30))echo("Często nas odwiedzasz! Cieszymy się!");
?>
</body>
</html>
Shili
else nie może mieć warunku. On znaczy tylko: jeśli wszystkie poprzednie warunki były fałszywe wykonaj ten kod. Jeśli konieczny jest tam warunek, daj drugiego elseif

ps. JoShiMa to kobieta.

@down
tego akurat nie zauważyłam, ale "jego" bardziej pasuje mi do mężczyzny winksmiley.jpg
noob10
Aha, no tak biggrin.gif dzięki za pomoc.

PS: Wiem że JoShiMa to kobieta a przecież napisałem "podała mi"
kaem
Używanie samych if'ow jeśli istnieje możliwość użycia else jest niepoprawne. Weźmy np. wcześniejszy kod lekko zmodyfikowany z dodanym jeszcze jednym elsem:
  1. <?php
  2. if ($a == $b)
  3. {
  4. echo 'to samo';
  5. }
  6. elseif ($a > $b)
  7. {
  8. echo 'a jest wieksze';
  9. }
  10. else
  11. echo 'b jest wieksze';
  12. ?>

Najpierw program sprawdza czy spełniony jest 1-szy warunek w If'ie. Jeśli tak to wykona to co jest pod tym warunkiem, czyli wyświetli w przeglądarce tekst "to samo" oraz nie będzie sprawdzał reszty, tzn. ominie elseif i else. Idąć dalej jeśli zmienna $a jest różna od $b(czyli if jest niespełniony) to sprawdza następny warunek czyli elseif. Jeśli $a > $b jest prawdą to wyświetli odpowiedni tekst czyli: "a jest wieksze". Jeśli nie jest prawdą to wykonuje to co zawiera się w else. Jeśli byś użył tylko samych ifów, to program(parser) sprawdzał by
wszystkie warunki po kolei, co jest nie logiczne i powoduje niepotrzebne zużycie czasu a nawet może dawać niechciane wyniki jeśli napisze się kod nieprzemyślanie.
JoShiMa
Cytat(Shili @ 30.06.2008, 15:49:31 ) *
else nie może mieć warunku.


Moja kulpa, zapomniałam wyciąć z tego wszystkiego smile.gif

Podsumowując

Jeśli dobrze skonstruujesz if elseif else i w ifie dasz warunek najbardziej prawdopodobny w else najmniej prawdopodobny a w elseif (może być ich kilka) te pośrednie to możesz nieźle zyskać na szybkości skryptu. Niemalże w każdym języku instrukcje warunkowe to jedne z wolniejszych elementów kodu, więc warto nad nimi popracować i projektować je z głową. W twoim skrypcie może się to wydawać przerostem formy nad treścią, ale im wcześniej wyrobisz sobie dobre nawyki tym lepiej.
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.