Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Šta ovde ne valja?

[es] :: PHP :: PHP za početnike :: Šta ovde ne valja?
(Zaključana tema (lock), by dakipro)
Strane: 1 2 3 4

[ Pregleda: 8258 | Odgovora: 62 ] > FB > Twit

Postavi temu

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
..106.109.adsl.dyn.beotel.net.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Šta ovde ne valja?05.09.2012. u 19:57 - pre 141 meseci
Ne, ne možeš da imaš veće, manje itd. unutar uslova za izvršenje case blokova - mora da bude tačna vrednost.
 
0

Boyka
BPS

Član broj: 287185
Poruke: 338
*.dynamic.isp.telekom.rs.



+33 Profil

icon Re: Šta ovde ne valja?05.09.2012. u 20:20 - pre 141 meseci
Znam, greška... Nisam duuugo koristio switch petlju
 
0

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Šta ovde ne valja?05.09.2012. u 20:27 - pre 141 meseci
Citat:
Burgos: Ne, ne možeš da imaš veće, manje itd. unutar uslova za izvršenje case blokova - mora da bude tačna vrednost.


Jesi li siguran da ovako nešto nije validno za switch?

Code (php):

switch($somevar):
case($somevar <= 6):
# condition..
break;
default:continue;
endswitch;
 

about:networking
 
0

Boyka
BPS

Član broj: 287185
Poruke: 338
*.dynamic.isp.telekom.rs.



+33 Profil

icon Re: Šta ovde ne valja?05.09.2012. u 20:44 - pre 141 meseci
Pa i ja sam čini mi se ranije koristio upite u switch-u...
 
0

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
..106.109.adsl.dyn.beotel.net.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 02:33 - pre 141 meseci
@plus_minus

Navika prenesena iz drugih jezika me je naterala nikad i da ne pokušam da stavljam u case nekonstantne izraze, a na internetu (uključujući php.net) sam tražeći našao jednocifren broj pojavljivanja ovakvih izraza. Međutim, dobro je znati, da se negde ne krstim za džabe.

Stvar zašto ovo treba izbegavati je što ovo NE RADI kako se očekuje:

Code:
$somevar = 0;
switch($somevar): 
case($somevar <= 6):
 echo "0";
break;
default:continue;
endswitch;


da bi proradilo, valja se upotrebiti nešto kao

Code:
$somevar = 0;
switch(TRUE): 
case($somevar <= 6):
 echo "0";
break;
default:continue;
endswitch;


a ne vidim kako je to bolje od if-else strukture (mislim da je čak i gore - switch koji se ne grana u odnosu na promenljivu).
 
0

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
..106.109.adsl.dyn.beotel.net.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 03:05 - pre 141 meseci
Još jedan hint, sad sam pročitao temu

Citat:
Boyka:

EDIT: Zasto ne treba da koristim u pravom sajtu, ovo je sad vezba, ali sam uskoro mislio jedan pravi sajt da napravim... Mislio sam i ovo kriptovati u MD5



Nemoj da čuvaš MD5 heš šifre, bolje koristi neku sporiju funkciju kao što je bcrypt ili sl.


Ako baš nećeš ili ne znaš (a bolje odmah nauči) da koristiš PDO onda:

Code (php):

$txt1 = mysql_real_escape_string($txt1); //za sva polja
 


Code (php):

$txt3<=6; //strlen($txt3) <= 6
 


Code (php):
empty($txt1); //Šta se dešava ako je $txt1 == '0' - iliti weak typing

 
0

Boyka
BPS

Član broj: 287185
Poruke: 338
*.dynamic.isp.telekom.rs.



+33 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 09:11 - pre 141 meseci
Izvini, ali ne znam sta je to 'PDO'..
 
0

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
2001:8c8:0:130:.*



+1365 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 09:44 - pre 141 meseci
Onda fino odeš na Google, ukucaš PDO+PHP i Gugi će te zatrpati sa relevantnim linkovima.
Beneath civilization's fragile crust, cold chaos churns...
 
0

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 09:54 - pre 141 meseci
Citat:
Burgos: @plus_minus

Navika prenesena iz drugih jezika me je naterala nikad i da ne pokušam da stavljam u case nekonstantne izraze, a na internetu (uključujući php.net) sam tražeći našao jednocifren broj pojavljivanja ovakvih izraza. Međutim, dobro je znati, da se negde ne krstim za džabe.

Stvar zašto ovo treba izbegavati je što ovo NE RADI kako se očekuje:

Code:
$somevar = 0;
switch($somevar): 
case($somevar <= 6):
 echo "0";
break;
default:continue;
endswitch;


da bi proradilo, valja se upotrebiti nešto kao

Code:
$somevar = 0;
switch(TRUE): 
case($somevar <= 6):
 echo "0";
break;
default:continue;
endswitch;


a ne vidim kako je to bolje od if-else strukture (mislim da je čak i gore - switch koji se ne grana u odnosu na promenljivu).


A ako je $somevar ne nula već $somevar uvek treba da bude veće od 6?
I zbog čega je, kako ti misliš, gore/lošije?

Nisu ti dovoljno dobri argumenti u ovom primeru.
Switch/case ili if/else ... ako imaš samo 2 moguća scenarija, logično je da ćeš upotrebiti jedno if i posle else ili još bolje ternarni operator.

Međutim, ako imaš if(isset($_POST['something'])) .... pa onda planiraš da na toj i toj formi nadžidžaš jedno 20 i kusur uslova, provera .. hoćeš li if elseif elseif elseif..

ili switch($_POST['something']): .. ?

I šta je tu bolje i šta ne radi kako treba?
Sve radi kako treba ako ti postupaš logički ili pravilno.

Inače, ovaj primer switch(TRUE) a pre toga jedna $varijabla je nula.. a ostale prethodne varijable? Ima li ih?
Znači, switch(TRUE) se odnosi na .. ? Na ono što upišeš kao slučaj... hmm..
Može dakle pomoću takvog switcha da se odredi šta će a šta neće, bilo koja promenjiva, ne samo jedna, uz pomoć koje se vrši neki manevar, skretnica..
Rekao bih da tvoj primer nije kako valja, nelogičan je. Dobijaš kupus na taj način.

Sve u svemu, switch/case, radi dobro. I nije "gore" od if else, već spada u još jednu alternativnu metodu ili način kontrole.. bilo čega.
about:networking
 
0

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
..106.109.adsl.dyn.beotel.net.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 13:07 - pre 141 meseci
Ne, ne radi dobro. Ako je $somevar u nekom slučaju 0, neće se izvršiti ono što se očekuje ($somevar <= 6), ne znam kakav drugi argument hoćeš - jasno sam ti pokazao šta ne radi kako treba.

Citat:
Inače, ovaj primer switch(TRUE) a pre toga jedna $varijabla je nula.. a ostale prethodne varijable? Ima li ih?


Ne razumem šta želiš da kažeš. Možda dobijam kupus na taj način, ali će mi se bar ispravno grananje uvek izvršiti, bez obzira na vrednost promenjive - a ne - nekad hoće, nekad neće.

Citat:
Sve radi kako treba ako ti postupaš logički ili pravilno.


Nemam šta tu da postupam, logički ili pravilno - zna se za šta služi i kako se koristi switch grananje već pedesetak godina. Sad, što su ovi dodali nešto što i ne radi, pritom ni u zvaničnoj dokumentaciji nisu naveli da to postoji, a to neko koristi - tu ne mogu ništa, osim da menjam taj kod kada dođe do mene.


Citat:
Međutim, ako imaš if(isset($_POST['something'])) .... pa onda planiraš da na toj i toj formi nadžidžaš jedno 20 i kusur uslova, provera .. hoćeš li if elseif elseif elseif..


Code (php):

switch($_POST['smt'])
{
    case $_POST['smt'] < 25:
    // ...
    break;
    case $_POST['smt'] < 15:
    // ...
    break;
    case $_POST['smt'] < 5:
    // ...
    break;
}
 


naspram

Code (php):

if($_POST['smt'] < 25)
{
// ...
}
else if($_POST['smt'] < 15)
{
// ...
}
else if($_POST['smt'] < 5)
{
// ...
}
 


Kao što vidiš, elseif kod je čak i manji od prvog koda, a i radi, čak i u slučaju da je $_POST['smt'] == 0. Zato je bolji.
 
0

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 14:02 - pre 141 meseci
Ej, .. ne bih da se prepucavam ovde povodom ovoga, molim te. :)

Samo ću da ti skrenem pažnju na jedan bitan detalj.

Tvoj primer..

Code (php):

switch($_POST['smt'])
{
    case $_POST['smt'] < 25:
    // ...
    break;
    case $_POST['smt'] < 15:
    // ...
    break;
    case $_POST['smt'] < 5:
    // ...
    break;
}
 


A evo ga jedan malo drugačiji primer..

Code (php):


if(isset($_POST['submit'])){

$somevar=$_POST['someinputfield'];

function checkSomething($somevar) { /* .... */ }
function checkSomethingElse($somevar) { /* .... */ }

switch($_POST['submit'])
{
    case( !checkSomething($somevar) ):
    case( !checkSomethingelse($somevar) ):
    // ... error ..
    break;

    case(empty($input1)):
    case(empty($input2)):
    case(empty($input3)):
    // ... error ..
    break;

    case(!empty($someotherothervar)):
     
     switch($someotherothervar):
       case('this'):
       # .....
      break;

       case('that'):
       # ......
      break;
     endswitch;

    break;

    default:
    case(ctype_alnum($input1)):
    case(ctype_alnum($input2)):
    case(ctype_alnum($input3)):
      $validate = TRUE;
    continue;
}

}
 


I neka postoji switch i 400 godina, ne možeš da pričaš da jedno radi, a drugo neće, jer se tebi lično ne sviđa i tako to.
Ja sam prerastao takva prepucavanja, zato, molim te, spare me. :)
To koliko je kod veći ili ne.. to je "tek bitno" u celoj priči ako govorimo o kontrolnoj strukturi, a kod u oba slučaja pravilno napisan bez i malo bloat-a.
about:networking
 
0

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
..106.109.adsl.dyn.beotel.net.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 14:08 - pre 141 meseci
Ok.
 
0

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 14:20 - pre 141 meseci
Pazi sad ovako.. :)

Code (php):


# ... switch..

case( $var == NULL ):

die('Bump!');

break;

# .... endswitch


# make it simple - if

if( $var == NULL ):

die('Bump!');

endif;

 


Primećuješ li izuzetno veliku 'razliku'?

if/case
endif/break

about:networking
 
0

Boyka
BPS

Član broj: 287185
Poruke: 338
*.dynamic.isp.telekom.rs.



+33 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 14:21 - pre 141 meseci
Citat:
Tyler Durden:
Onda fino odeš na Google, ukucaš PDO+PHP i Gugi će te zatrpati sa relevantnim linkovima.


Kucao sam iste sekunde kada sam i video šta mi je napisao...
Sva objašnjenja su na Engleskom jeziku, a ja ne da ne znam Engleski, nego ga ne nekada ne mogu razumeti, u nekim situacijama jedva Srpska objašnjenja razumem a kamoli E.J. :)
 
0

japan

Član broj: 34328
Poruke: 480
*.kbcnet.rs.



+13 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 14:30 - pre 141 meseci
@plus_minus probaj da izvršiš ovaj kod:

Code (php):


$var = 0;

switch ($var) {
    case ($var < 1) :
        echo "less than 1";
        break;
    case ($var < 3) :
        echo "less than 3";
        break;
    case ($var < 5) :
        echo "less than 5";
        break;
    default:
        echo "can't determine";
}

 


i javi da li se ponaša kako bi očekivao
 
+2

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 14:30 - pre 141 meseci
@Boyka

Ili uči engleski ili menjaj profesiju. Pauziraj sa svim što si naumio, nauči makar 30% engleskog jezika.
Imaš google translate, pa onda zaplavljuj, potom kopipejstuj i pamti.

Donekle možda i možeš da doguraš sa programiranjem bez engleskog, međutim,
jednog dana ćeš da dođeš do tačke, kada jednostavno nećeš moći dalje.

Misliš da će samo naši ljudi da imaju dovoljno dobre projekte za tebe, koje ćeš da praviš i eventualno naplatiš?
Kako ćeš da se sporazumevaš sa ljudima iz inostranstva kojima treba da se završi bilo kakav projekat?

Retko ko danas (mada ih ima) sedi u velikoj firmi kao php programer i prima platu, tad i tad u mesecu.
Većina web developera, jesu freelanceri i dubina džepa, uveliko zavisi i od - pogađaš, sporazumevanja (pored rada, logično).

A sve što je predefinisano u samom php-u, gomila klasa, konstruktora.. svi nazivi jesu kao i u svim drugim jezicima, na engleskom.

@japan

Ukoliko staviš default: kao prvu stavku, hoće.
Reći će ti da je 0 manje od 1.

Code (php):


$var = 0;

     switch($var) {

          default:
               $rs = "can't determine";
         
          case($var < 1):
               $rs = "less than 1";
          break;
         
          case($var < 3):
               $rs = "less than 3";
          break;
         
          case($var < 5):
               $rs = "less than 5";
          break;
     }

echo $rs;

 


Zašto bi inače proveravao integere sortirane od manjem ka većem, a nulu proveravaš na kraju... ?
Nula ti je valjda prva, jel' da?

Kad u php-u započinješ count, prva stavka nije pod brojem jedan, već je - 0, ukoliko mi lično ne odredimo drugačije.
I nigde ne piše da default mora da postoji.. ili da mora da bude zadnji. :)

[Ovu poruku je menjao plus_minus dana 06.09.2012. u 15:49 GMT+1]
about:networking
 
0

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 623
*.adsl.verat.net.



+373 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 14:48 - pre 141 meseci
Switch bi trebalo da radi na sledeci nacin:

Uzima switch() argument i poredi ga sa case argumentom.
Code (php):

switch($num)
{
     case 1: do stuff; break; // if($num == 1)
     case 2: do some other stuff; break; // if($num == 2)
     default: some more stuff; break; // if none condition is met
}
 


Uzimajuci to u obzir, ako zelimo da case bude neki logicki izraz, jedino kako mozemo postignuti univerzalnost je koriscenjem true/false kao switch argumenta usled cega moramo da u case-u vratimo bool vrednost ako zelimo da radi "as intended".

Code (php):

switch(true)
{
     case (1 < 3): do stuff; break; // if(true == (1<3)) sledi: if(true == true)
     case ($somevar >= 6): do some other stuff; break; // if(true == ($somevar >= 6))
     default: some more stuff; break; // if none condition is met
}
 


Medjutim, ako pravimo kombinaciju koristeci neki unapred neodredjeni argument za switch() i neku operaciju koja ce rezultirati logickim rezultatom u case-u mozemo naici na problem.

Naime, php sve sto nije 0 tumaci kao true. Ako uradimo sledece:
Code (php):

if("bla bla" == true)
     echo "Tacno";
else
     echo "Netacno";
 
Dobicemo "Tacno" kao rezultat.
Stoga, u sledecoj konstrukciji se moze javiti problem u slucaju kada je promenljiva 0.
Code (php):

$var = 0;
switch($var)
{
     case ($var < 3): do stuff; break; // if(0 == (0<3)) sledi: if(0 == true) sledi: if(false == true) sledi: nece izvrsiti kod iako je 0 < 3
     default: some more stuff; break; // if none condition is met
}
 

Ovo se desava samo kada je promenljiva 0. Bilo koja druga vrednost ce raditi. Zato @plus_minus-u radi kada koristi $_POST za button.
 
+2

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 623
*.adsl.verat.net.



+373 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 14:54 - pre 141 meseci
Citat:
plus_minus:

Ukoliko staviš default: kao prvu stavku, hoće.
Reći će ti da je 0 manje od 1.

Code (php):


$var = 0;

     switch($var) {

          default:
               $rs = "can't determine";
         
          case($var < 1):
               $rs = "less than 1";
          break;
         
          case($var < 3):
               $rs = "less than 3";
          break;
         
          case($var < 5):
               $rs = "less than 5";
          break;
     }

echo $rs;

 



Zašto bi inače proveravao integere sortirane od manjem ka većem, a nulu proveravaš na kraju... ?
Nula ti je valjda prva, jel' da?

Kad u php-u započinješ count, prva stavka nije pod brojem jedan, već je - 0, ukoliko mi lično ne odredimo drugačije.
I nigde ne piše da default mora da postoji.. ili da mora da bude zadnji. :)

[Ovu poruku je menjao plus_minus dana 06.09.2012. u 15:49 GMT+1]



Sta ces raditi u slucaju da mora da se izvrsi neka funkcija u case bloku, a ne da se upise string? Razumes da ce onda biti sigurno izvrsen default blok, a posle mozemo da biramo hoce li i onaj koji nam treba ili ne.
 
0

japan

Član broj: 34328
Poruke: 480
*.kbcnet.rs.



+13 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 14:54 - pre 141 meseci
Citat:
plague: Ovo se desava samo kada je promenljiva 0. Bilo koja druga vrednost ce raditi. Zato @plus_minus-u radi kada koristi $_POST za button.


Pa upravo to narod ovde uzalud pokušava da mu objasni - da pogrešno koristi switch, ali da mu, eto, sticajem okolnosti radi, a da bi u se nekoj drugoj situaciji to ponašalo nepredvidivo.
 
0

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: Šta ovde ne valja?06.09.2012. u 15:07 - pre 141 meseci
Citat:
plague: Sta ces raditi u slucaju da mora da se izvrsi neka funkcija u case bloku, a ne da se upise string? Razumes da ce onda biti sigurno izvrsen default blok, a posle mozemo da biramo hoce li i onaj koji nam treba ili ne.


Ukoliko nisi stavio case i za tako nešto, hoće. Biće izvršen default blok.
To piše i na manualu i to je sasvim logično.

I? Šta je pisac hteo da kaže?

Citat:
japan: Pa upravo to narod ovde uzalud pokušava da mu objasni - da pogrešno koristi switch, ali da mu, eto, sticajem okolnosti radi, a da bi u se nekoj drugoj situaciji to ponašalo nepredvidivo.


Na primerima koje sam dao.. ne možete odrediti kako neko koristi nešto, da li je pogrešno ili nije.
Jer su primeri pisani u letu.

Ajde samo malčice povucite ručnu ili otvorite temu Switch vs if/else ako vam je toliko stalo.

I koji to 'narod' uzalud pokušava da objasni?

Ne razumem u kom ste fazonu vas dvojica, ali ste smešni pomalo. :)

Ispada da vi zapravo niste ni koristili other than just if/else & sqlquery...
Ispada, ne mora da znači.

No offence.
about:networking
 
0

[es] :: PHP :: PHP za početnike :: Šta ovde ne valja?
(Zaključana tema (lock), by dakipro)
Strane: 1 2 3 4

[ Pregleda: 8258 | Odgovora: 62 ] > FB > Twit

Postavi temu

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.