Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Parse error: syntax error, unexpected T_IF
danon198901
post
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 26.09.2012

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


Witam,
dostaję błąd w tytule tematu. Gdy zrobię sobie coś takiego:

  1. $uzy = isset($_POST['uzy'])?$_POST['uzy']:'';


to wszystko gra i buczy. Ale, gdy rozwinę to w 'rozpisanego' if'a z dodatkowymi sprawdzeniami to dostaję już błąd:

  1. $uzy =
  2. if(isset($_POST['uzy']))
  3. {
  4. if(!is_numeric($_POST['uzy']))
  5. {
  6. echo 'Współrzędne muszą być liczbą!';
  7. }
  8.  
  9. else if($_POST['uzy']<=0)
  10. {
  11. echo 'Współrzędne muszą być liczbą dodatnią!';
  12. }
  13.  
  14. else $_POST['uzy'];
  15. }
  16. else '';


Co dokładnie sknociłem? nerdsmiley.png
Go to the top of the page
+Quote Post
Sebek87
post
Post #2





Grupa: Zarejestrowani
Postów: 74
Pomógł: 24
Dołączył: 21.10.2012
Skąd: Puławy

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


Linia 1, 16 i 18. Próbujesz instr. warunkową przypisać do zmiennej? ohmy.gif
  1. if(isset($_POST['uzy']))
  2.  
  3. {
  4.  
  5. if(!is_numeric($_POST['uzy']))
  6.  
  7. {
  8.  
  9. echo 'Współrzędne muszą być liczbą!';
  10.  
  11.  
  12. }
  13.  
  14. if($_POST['uzy']<=0)
  15.  
  16. {
  17.  
  18. echo 'Współrzędne muszą być liczbą dodatnią!';
  19.  
  20.  
  21. }
  22.  
  23. $uzy = $_POST['uzy'];
  24.  
  25. }


Ten post edytował Sebek87 25.10.2012, 21:22:25
Go to the top of the page
+Quote Post
danon198901
post
Post #3





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 26.09.2012

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


oczywiście, że nie:)

Instrukcja warunkowa służy tu tylko przypisaniu odpowiedniej wartości do zmiennej, a dokładniej, jeśli zmienna przekazywana z formularza jest ustawiona, jest liczba większą od zera to nastąpić ma przypisanie.

Oczywiście mogę to zrobić nieco inaczej, a mianowicie if(warunek) $uzy = ...; zamiast $uzy = if(warunek)...
Z tym, że nie bardzo wiem co jest źle w kodzie, który pokazałem. W końcu skrócony zapis if działa!

  1. $uzy = isset($_POST['uzy'])?$_POST['uzy']:'';
Go to the top of the page
+Quote Post
Sebek87
post
Post #4





Grupa: Zarejestrowani
Postów: 74
Pomógł: 24
Dołączył: 21.10.2012
Skąd: Puławy

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


To pierwsze wyrażenie:

  1. $uzy = isset($_POST['uzy'])?$_POST['uzy']:'';


to trójoperandowy operator warunkowy, który jest częścią składni PHP, dlatego Ci działa - logiczne.

O powyższym wyrażniu możesz przeczytać na http://www.php.net/manual/pl/language.expressions.php

Natomiast wyrażnie drugie, które zacząłeś od:

  1. $uzy =
  2.  
  3. if(isset($_POST['uzy']))
  4.  
  5. {


to już wynik próby poszerzenia funkcjonalności PHP przez Ciebie snitch.gif

Ten post edytował Sebek87 25.10.2012, 22:17:24
Go to the top of the page
+Quote Post
danon198901
post
Post #5





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 26.09.2012

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


mhm. Wiesz generalnie zasada działania jest taka sama, z tym, że else if'ów nie można robić. Dlatego zastanawiałem się dlaczego przypisując wartość będącą wynikiem instrukcji warunkowej przy pomocy zwykłego if'a (a nie trójoperandowego) doprowadza do błędu mimo, że logicznie to jest to samo.
Nigdy wcześniej w taki sposób nie przypisywałem zmiennych, ale przykład który gdzieś tam w sieci znalazłem spowodował, że chciałem się dowiedzieć o co tutaj chodzi:)

Ten post edytował danon198901 25.10.2012, 22:24:25
Go to the top of the page
+Quote Post
Sebek87
post
Post #6





Grupa: Zarejestrowani
Postów: 74
Pomógł: 24
Dołączył: 21.10.2012
Skąd: Puławy

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


Cytat
Dlatego zastanawiałem się dlaczego przypisując wartość będącą wynikiem instrukcji warunkowej przy pomocy zwykłego if'a (a nie trójoperandowego) doprowadza do błędu mimo, że logicznie to jest to samo.

Dlatego, że w PHP nie ma takiej składni:
  1. $uzy =
  2.  
  3. if(isset($_POST['uzy']))
  4.  
  5.  
  6.  
  7. {...

Sam widzisz, że wyrzuciło Ci syntax error.

Ten post edytował Sebek87 25.10.2012, 22:34:34
Go to the top of the page
+Quote Post
tehaha
post
Post #7





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


Cytat
Dlatego zastanawiałem się dlaczego przypisując wartość będącą wynikiem instrukcji warunkowej przy pomocy zwykłego if'a (a nie trójoperandowego) doprowadza do błędu mimo, że logicznie to jest to samo.
Nie to nie jest to samo. Gdybyś sięgnął do manula, dowiedziałbyś się, że to są 2 całkowicie inne konstrukcje i tylko w nielicznych przypadkach możesz to stosować zamiennie. Twoje zdumienie tym fenomenem wynika z błędnego założenia, że jest to jedna i ta sama konstrukcja w pełnej i skróconej formie co jest nieprawdą. Każdy operator trójargumentowy może zostać zapisany przy pomocy konstrukcji warunkowej if/else, ale nie każda konstrukcja if/else może zostać zastąpiona przez ten operator. Dlatego Twój przykład nie działa.
Go to the top of the page
+Quote Post
danon198901
post
Post #8





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 26.09.2012

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


OK dzięki. Temat wyczerpany. Można zamknąćsmile.gif
Go to the top of the page
+Quote Post

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 Aktualny czas: 22.08.2025 - 09:01