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

jedinstveni if/switch

[es] :: PHP :: jedinstveni if/switch

[ Pregleda: 5513 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

maliX
ivan malik
bgd/ srbija i crna gora

Član broj: 1796
Poruke: 67
*.atlas.co.yu

ICQ: 47807731
Sajt: www.xajckop.co.yu


Profil

icon jedinstveni if/switch01.08.2003. u 14:39 - pre 251 meseci
do stranica dolazim na osnovu raznih parametara iz $_GET[] niza. postoji li neki nacin da se uradi nesto poput:
Code:

switch($_GET[]) {
case "id":
// some code goes here
break;
case "s":
//some code goes here:
break;
default:
//some code goes here
break;
}


pri cemu su "id", "s",... potebni parametri, jer su mi adrese poput:
Code:

/?s=info
/?id=58
itd

Hu is having fun :)
Nevaspitanje nije opravdanje
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at

Sajt: www.baze-podataka.net


+2 Profil

icon Re: jedinstveni if/switch01.08.2003. u 15:26 - pre 251 meseci
Hmmm, ti checkirash koja varijabla je proslijedjena u queryu, ali kako checkirash koja je vrijednost te varijable ?
Recimo da imas query u formatu /?s=info , /?s=kontakt, /?s=blabla ...
Sa switchem si checkirao da je u queryu zadana varijabla "s", ali kako mislis utvrditi njenu vrijednost? Malo si nezgodno postavio rjesenje za ovo.

Evo ti neko improvizovano rjesenje:
Code:

$url = $_SERVER['HTTP_REFERER'];
$parsovano = parse_url($url);
$query_array = explode("=",$parsovano['query']);
$switch1 = $query_array[0];
$switch2 = $query_array[1];

switch($switch1)
{
    case "s":
        funkcija_uradi_nesto_sa_s($switch2);
        break;
    case "id":
        funkcija_uradi_nesto_sa_id($switch2);
        break;
    default:
        funkcija_uradi_nesto_defaultno();
}

Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: jedinstveni if/switch01.08.2003. u 17:01 - pre 251 meseci
tipicna programerska/pocetnicka greska :) - switch <izraz> {} radi samo sa celobrojnim vrednostima (promenljivama)! Dakle ispitivanje da li je u izrazu neki string se NE MOZE uraditi sa switch. Predlazem malo zagrevanje stolice i citanje PHP manuala. Nece skoditi.

Solucija?

- Napisati funkciju (recimo) Sta($sArg) koja vraca broj u zavisnosti kakav argument joj se da, recimo:
Code:

function Sta($sArg) {
  if ($sArg == "s")
    return 0;
  if ($sArg == "id")
    return 1;
  if ($sArg == "trt")
    return 2;
}

,a onda umesto
Code:

switch($switch1)

koristiti
Code:

switch (Sta($switch1))


Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

caboom
Igor Bogicevic
bgd

Član broj: 255
Poruke: 1503
195.252.98.*

ICQ: 60630914


+1 Profil

icon Re: jedinstveni if/switch01.08.2003. u 18:20 - pre 251 meseci
Citat:

tipicna programerska/pocetnicka greska :) - switch <izraz> {} radi samo sa celobrojnim vrednostima (promenljivama)! Dakle ispitivanje da li je u izrazu neki string se NE MOZE uraditi sa switch. Predlazem malo zagrevanje stolice i citanje PHP manuala. Nece skoditi.


hmm... zasto optuzujes nekoga da je napravio pocetnicku gresku, a sam mu dajes potpuno pogresnu informaciju. switch() kod php-a nacelno radi sa bilo kojim skalarnim tipom, a za ostale ne mogu da potpisem.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: jedinstveni if/switch01.08.2003. u 20:37 - pre 251 meseci
Ne izvrci moje reci - ja nikoga nisam nigde optuzio. A sto se tice toga sto si rekao - to je donekle logicno, jer PHP ce uvek u letu da odradi konverziju u odgovarajuci tip. :) Dok naravno string "id" bas i nece znati da konveruje okako kako to programeru odgovara. Jel' tako ili nije? - Ili je ovo jos jedan tvoj pateticni pokusaj napada na nesto sto sam rekao, uz tipicno izvrtanje reci i kritikovanje bez smisla? Ponavljam ono je tipicna pocetnicka greska, jer na istu nailazim vise puta (na nesrecu ne pratim samo ovaj forum)...

Na kraju ponovo o "optuzivanju" - molim te da objasnis gde sam to optuzio coveka za nesto? Ukoliko vidis optuzbu, molim te uputi me na istu. Ako ipak optuzbe nema, onda bih voleo ili da mi se izvines, ili da svoj tekst izmenis kako bi on bio vise kulturan i fer.

Na kraju i tebi predlazem da pogledas dokumentaciju i vidis da su u istoj svi switch primeri sa celobrojnim promenljivama (u slucaju, kao sto rekoh, da promenljiva sadrzi realni broj verujem da ce PHP da taj broj zaokruzi). http://se2.php.net/switch
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at

Sajt: www.baze-podataka.net


+2 Profil

icon Re: jedinstveni if/switch01.08.2003. u 21:01 - pre 251 meseci
Citat:
leka:
tipicna programerska/pocetnicka greska :) - switch <izraz> {} radi samo sa celobrojnim vrednostima (promenljivama)! Dakle ispitivanje da li je u izrazu neki string se NE MOZE uraditi sa switch.


U PHP-u se u switch-u mogu koristiti i stringovi, a ne samo integeri, kao sto je slucaj recimo kod Jave. U manualu nigdje ne pise niti je posebno navedeno da se MORAJU koristiti samo cjelobrojne vrijednosti.
Tvoje rjesenje je takodje prihvatljivo.


[Ovu poruku je menjao Goran Rakić dana 01.08.2003. u 23:33 GMT]
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: jedinstveni if/switch01.08.2003. u 23:16 - pre 251 meseci
Stripy, niti tvoj niti caboom-ov odgovor me nimalo ne iznenadjuju, jer godinama slusam istu pricu :) Ljudi kojima se ukaze na greske uvek to smatraju napadom na svoju licnost (u najboljem slucaju). Umesto da odmah ospete paljbu na moj racun (kako je caboom prvi uradio) trebalo je da ukazete na mesto gde ja gresim u svom postu. Ovo sam govorio sto puta pa cu opet - sa mnom ovde mozete samo argumentovano da komunicirate. Ja sam covek koji ovde funkcionise na tipicno matematicki nacin - nista bez dokaza.

Elem ako si izjavio ono sto si izjavio zbog toga sto sam ti PREDLOZIO da zagrejes stolicu i pogledas PHP, onda ja nemam komentara. Taj predlog bi ti rekao i nastavnik, profesor ili ucitelj da si na nekom kursu , ti bi sta rekao profesoru na to? Isto sto i meni? Daaaaaj. :)
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: jedinstveni if/switch01.08.2003. u 23:23 - pre 251 meseci
Necu da se pravdam nekim svojim navikama iz C/C++ sveta. Prosto sam pogresio, provereno sam pogresio.
Code:

<?php
  $sVar = $_GET["var"];        // switch.php?var=nesto -> $sVar = "nesto"

  switch ($sVar)
  {
    case "jedan":
      echo "Rezultat: 1";
      break;
    case "dva":
      echo "Rezultat: 2";
      break;
    default:
      echo "Rezultat: 0";
  } // switch
?>

Seo sam za PHP manual u kome nista ne pise da switch moze da koristi stringove, onda sam napisao ovaj gore navedeni kodic i uverio se da moze. - Za switch.php?var=jedan daje Rezultat: 1 ; dok za switch.php?var=dva daje "Rezultat: 2". Dakle caboom je bio u pravu kada je rekao da se mogu koristiti stringovi, a ja sam totalno pogresio, a bogami i malo zagrejao stolicu uz PHP manual. :)
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: jedinstveni if/switch01.08.2003. u 23:36 - pre 251 meseci
dobro sada smo svi malo zagrejali stlice, ja sam malo pročistio neki flame, a evo šta ima još o switch-u:

Citat:

using switch() when you wish to compare against strings can be dangerous:

$bug = 0;
switch ($bug) {
case 'fly':
echo 'flies buzz';
break;

case 'mantis':
echo 'mantes pray';
break;

default:
echo 'swat, splat, you are dead';
break;
}

Will print "flies buzz", NOT "swat, splat, you are dead".
Remember PHP says that 'fly' == 0, or in general string == 0 is true.

http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

bOkIcA
Bojan Abramovic
Novi Sad

Član broj: 1808
Poruke: 520
*.metrohive.net

Sajt: www.bokica.com


Profil

icon Re: jedinstveni if/switch01.08.2003. u 23:49 - pre 251 meseci
Za ovo sto Goran nabaci nisam znao, ali ono sto je Leka postovao (zadnje) nije ono sto je pitanje u temi, ali je, takodje, moguce da se odradi.

...tj. da switch reaguje na odredjenu promenjivu a ne na njegovu vrednost.

Code:
<?php
$daj_key = array_keys($_GET);

switch($daj_key[0]){
case "id": 
        // some code goes here
        break;
case "s": 
        // some code goes here:
        break;
default: 
        // some code goes here
        break;
}
?>


Naravno, ovo vazi za prvu promenjivu u _GET-u.
 
Odgovor na temu

caboom
Igor Bogicevic
bgd

Član broj: 255
Poruke: 1503
*.verat.net

ICQ: 60630914


+1 Profil

icon Re: jedinstveni if/switch02.08.2003. u 12:47 - pre 251 meseci
Citat:
Goran Rakić
using switch() when you wish to compare against strings can be dangerous


yep, ali to sustinski vazi za svako poredjenje/kontrolne strukture u jezicima gde nemas striktne tipove, vec operisu sa skalarima (mislim da je ovaj izraz preuzet od perl-a).
 
Odgovor na temu

Vuk Nikolić
Vuk Nikolić
Banovo Brdo, Beograd

Član broj: 4895
Poruke: 244
*.tehnicom.net

ICQ: 42139643
Sajt: www.letva.org


Profil

icon Re: jedinstveni if/switch18.08.2003. u 11:46 - pre 250 meseci
znam da sam malo zakasnio sa ovom temom...ali... switch sasvim normalno radi sa stringovima...cesto ga tako koristim i nema problema :)
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: jedinstveni if/switch18.08.2003. u 13:43 - pre 250 meseci
hajde sada pročitaj šta sam ja napisao pa ponovo odgovori. naravno da radi, ali može doći do greške. Tipa, ti u GET zahtevu preneseš action=add, a imaš switch:

switch($_GET['action']) {
case 'del': echo('del');
break;
case ' add': echo('add');
break;
default: echo('unkonown');
break;
}

I korisnik ono add izmeni u 0, umesto da dobiješ unkonw na ekranu, ti ćeš dobiti del.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

bOkIcA
Bojan Abramovic
Novi Sad

Član broj: 1808
Poruke: 520
*.metrohive.net

Sajt: www.bokica.com


Profil

icon Re: jedinstveni if/switch18.08.2003. u 15:06 - pre 250 meseci
Code:

<?php
$daj_key = array_keys($_GET);

switch($daj_key[0]){
    case "zzzzzzzXXXXXYYYYyyyy":    // ako je '0'
        echo "nothing";
        break;
    case "id":
        echo "id";
        break;
    case "s":
        echo "s";
        break;
    default:
        echo "nothing";
        break;
}
?>


A ovako se izbegne ta greska, recimo.
 
Odgovor na temu

Vuk Nikolić
Vuk Nikolić
Banovo Brdo, Beograd

Član broj: 4895
Poruke: 244
*.tehnicom.net

ICQ: 42139643
Sajt: www.letva.org


Profil

icon Re: jedinstveni if/switch18.08.2003. u 23:35 - pre 250 meseci
hehe... iskusno
 
Odgovor na temu

[es] :: PHP :: jedinstveni if/switch

[ Pregleda: 5513 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

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