[ Boyka @ 05.09.2012. 08:57 ] @
Nov sam u PHP programiranju i imam neke probleme...

Trenutno pravim neki veći dinamički sajt čisto radi vežbanja svega onog što sam do sada naučio...

Problem je da mi php ne reaguje na button klik događaj pri prostoj registraciji... verovatno je problem u php-u jer prvi put i bez ikakvog kopiranja radim registracionu formu, daću ceo kod PHP i HTML register strane, pa vi vidite, verujem da ima mnogo grešaka...

znaci ne reaguje na button klik, konektovati se moze i ubaciti vrednosti, ali bez $_POST-a...
register.php
Code (php):

<?php
$host_name = "localhost:3307";
$db_username = "root";
$password = "123";
$db_name = "vezba";

if(!$_POST['btn'])  
{
     //ako button nije pritisnut ne radi nista...
}
else
{
$con = mysql_connect("$host_name", "$db_username", "$password");
//ako jeste konektuj se...
if(!$con)
{
     echo 'Could not connect...';
     //ako se ne moze konektovati ispisi...
}
mysql_select_db("$db_name") or die("No Database"); //selektuj bazu vezba
if($_POST['txt1']!=0 & $_POST['txt2'] !=0 & $_POST['txt3'] !=0 & $_POST['txt4'] !=0 & $_POST['txt3'] == $POST['txt4'])
{
$ubaci = mysql_query("insert into useri(username, email, pass) values("$_POST["txt1"]","$_POST["txt2"]","$_POST["txt3"]")");
//ako je vrednost tekst polja rzlicita od nula, i password polje jednako confirm pass polju ubaci vrednosti iz polja u bazu
$selektuj = mysql_query('select '$_POST["txt1"]' from useri');
//selektuj vrednost text polja username iz baze...
while($red = mysql_fetch_array($selektuj)) //dok citas podatke iz baze smesti ih u varijablu '$red'..
  {
  echo 'Thank you'. " " . $red['username'] . 'for registration...';
  }
}
else{die("password is not same, or text values are null...")}
mysql_close($con); //
}
?>
 


register.html
Code (html):

<html !DOCTYPE html lang="en">
<head>
<meta name="google-site-verification" content="6kwmiqZvj-FJfGuyK8biPc-H8MXuZvxcd6xWsdhwxL4" />
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<meta http-equiv="Content-Language" content="en">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>vezba.com</title>
<script language="JavaScript" type="text/javascript">
function Prikazi()
        {
          var headerTitle = document.getElementById('id');
          var initialColor = document.body.style.color;
          var newColor = '#FFFFFF';
          setInterval(function()
          {
             if (headerTitle.style.color == initialColor) {
         headerTitle.style.color = newColor;
     } else {
         headerTitle.style.color = initialColor;
     }
          }
          ,1000);
        }
 </script>
<link rel="stylesheet" a href="stil.css">
</head>
<body onLoad="Prikazi()">
<div id="header">
<header>
<a href="index.html" id='id' class="header">vezba.com</a>
</header>
</div>
<div id="nav">
<nav>
<a href="index.html" class="home">Home</a> &nbsp | &nbsp <a href="about.html" class="home">About</a> &nbsp | &nbsp <a href="tutorials.html" class="home">Tutorials</a>&nbsp | &nbsp <a href="exercises" class="home">Exercises</a> &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp <a href="login.php" class="home">Log In</a> | <a href="register.html" class="home">Register</a> </div>
</nav>
<aside id="aside">
<div id="side1"><a href="http://w3schools.com/html5/default.asp" target="blank"><img src="http://www.wikinoticia.com/ima...ia.com/files/2011/01/HTML5.jpg" width="245" height="195"></img></a></div>
<p id="side2"><a href="http://w3schools.com/css3/default.asp" target="blank"><img src="http://blogs.microsoft.co.il/blogs/gilf/CSS3Logo_406A9E5E.jpg" width="245" height="195"></img>
</a></p>
<p id="side3"><a href="http://w3schools.com/js/default.asp" target="blank"><img src="http://2.bp.blogspot.com/-9vrJ...1600/best-javascript-sites.jpg" width="245" height="195"></img>
</a></p>
<p id="side4"><a href="http://w3schools.com/php/default.asp" target="blank"><img src="http://drupal.org/files/project-images/php.png" width="245" height="195"></img>
</a></p>
<p id="side5"><a href="http://w3schools.com/asp/default.asp" target="blank"><img src="http://blog.monitor.us/wp-content/uploads/2012/04/LogoAspNet2.png" width="245" height="185"></img>
</a></p>
</aside>
<div id="register-content">
<content id="text2">
<form action="register.php" method="post">
User Name:
<p></p>
<input type="text" name="txt1" id="textbox">
<p></p>
E-mail:
<p></p>
<input type="text" name="txt2" id="textbox">
<p></p>
Password:
<p></p>
<input type="password" name="txt3" id="textbox">
<p></p>
Confirm Password:
<p></p>
<input type="password" name="txt4" id="textbox">
<p></p>
<p></p>
<p></p>
<center><input type="button" value="Register" id="btn"></center>
</form>
</content>
</div>
</body>
</html>
 
[ MoDcHe @ 05.09.2012. 10:04 ] @
Code:

<input type="button" value="Register" id="btn" name="btn">


Propustio si name.

Code:

<?php
$host_name = "localhost:3307";
$db_username = "root";
$password = "123";
$db_name = "vezba";

if($_POST['btn'])  { // samo ako se klikne
$con = mysql_connect("$host_name", "$db_username", "$password");
//ako jeste konektuj se...
if(!$con)
{
     echo 'Could not connect...';
     //ako se ne moze konektovati ispisi...
}
mysql_select_db("$db_name") or die("No Database"); //selektuj bazu vezba
if($_POST['txt1']!=0 & $_POST['txt2'] !=0 & $_POST['txt3'] !=0 & $_POST['txt4'] !=0 & $_POST['txt3'] == $POST['txt4'])
{
$ubaci = mysql_query("insert into useri(username, email, pass) values("$_POST["txt1"]","$_POST["txt2"]","$_POST["txt3"]")");
//ako je vrednost tekst polja rzlicita od nula, i password polje jednako confirm pass polju ubaci vrednosti iz polja u bazu
$selektuj = mysql_query('select '$_POST["txt1"]' from useri');
//selektuj vrednost text polja username iz baze...
while($red = mysql_fetch_array($selektuj)) //dok citas podatke iz baze smesti ih u varijablu '$red'..
  {
  echo 'Thank you'. " " . $red['username'] . 'for registration...';
  }
}
else{die("password is not same, or text values are null...")}
mysql_close($con); //
}
?>
[ Boyka @ 05.09.2012. 10:24 ] @
ne reaguje opet...

ne mogu da verujem da sam zaboravio name :O
[ djoka_l @ 05.09.2012. 10:33 ] @
Za button stavi type="submit", a ne button.

Imaš i četiri elementa sa istim id (textbox) - id mora da bude jedinstven.
[ MoDcHe @ 05.09.2012. 10:33 ] @
Code:

<input type="submit" value="Register" id="btn" name="btn" />


submit, ne button. Sry, nisam video. :)
[ plus_minus @ 05.09.2012. 10:44 ] @
Pre svega
Code (php):

if(!$_POST['btn'])  
{
     //ako button nije pritisnut ne radi nista...
}
 


ovo ti je nepotrebno.
Probaj da kreneš sa if(isset($_POST['btn'])) { ... } ili if(!empty($_POST)) { ... } ..

Problem koji ti imaš je sličan kao problem u ovoj temi.
http://www.elitesecurity.org/p3130173
[ Boyka @ 05.09.2012. 11:08 ] @
Zamenio sam button sa submit i napokon uđe u php fajl, ali sa errorom na liniji 23

error: "Parse error: syntax error, unexpected '$_POST' (T_VARIABLE) in C:\wamp\www\vezba.com\register.php on line 23"

linija 23 je ova:
Code (php):
$ubaci = mysql_query("insert into useri(username, email, pass) values("$_POST["txt1"]","$_POST["txt2"]","$_POST["txt3"]")");


Je l' to error u navodnicima možda?
[ plus_minus @ 05.09.2012. 11:14 ] @
Uzmi i pre nego što ubaciš u bazu..

kao na linkovanom primeru..

Code (php):


$txt1 = htmlentities($_POST['txt1'], ENT_QUOTES, "UTF-8");

$txt2 = htmlentities($_POST['txt2'], ENT_QUOTES, "UTF-8");

$txt3 = htmlentities($_POST['txt3'], ENT_QUOTES, "UTF-8");

 


Dakle, $txt1, 2, 3 su bile prazne, a nakon pritiskanja dugmeta, te promenjive su preuzele vrednosti korisnika...
spremne za upis.
[ Boyka @ 05.09.2012. 11:23 ] @
Zamenio sam, ali opet isti error...

evo izmenjenog koda..

Code (php):

<?php
$host_name = "localhost:3307";
$db_username = "root";
$password = "123";
$db_name = "vezba";

$txt1 = htmlentities($_POST['txt1'], ENT_QUOTES, "UTF-8");
$txt2 = htmlentities($_POST['txt2'], ENT_QUOTES, "UTF-8");
$txt3 = htmlentities($_POST['txt3'], ENT_QUOTES, "UTF-8");

if(!$_POST['btn'])  
{
     //ako button nije pritisnut ne radi nista...
}
else
{
$con = mysql_connect("$host_name", "$db_username", "$password");
//ako jeste konektuj se...
if(!$con)
{
     echo 'Could not connect...';
     //ako se ne moze konektovati ispisi...
}
mysql_select_db("$db_name") or die("No Database"); //selektuj bazu vezba
if($txt1!=0 & $txt2!=0 & $txt3 !=0 & $txt4!=0 & $txt3 == $txt4)
{
$ubaci = mysql_query("insert into useri(username, email, pass) values("$txt1","$txt2","$txt3")");
//ako je vrednost tekst polja rzlicita od nula, i password polje jednako confirm pass polju ubaci vrednosti iz polja u bazu
$selektuj = mysql_query('select '$txt1' from useri');
//selektuj vrednost text polja username iz baze...
while($red = mysql_fetch_array($selektuj)) //dok citas podatke iz baze smesti ih u varijablu '$red'..
  {
  echo 'Thank you'. " " . $red['username'] . 'for registration...';
  }
}
else{die("password is not same, or text values are null...")}
mysql_close($con); //
}
?>
 
[ plus_minus @ 05.09.2012. 11:40 ] @
I ova mislim da će da te muči malo.

Code (php):


$selektuj = mysql_query('select '$txt1' from useri');

 


http://www.trans4mind.com/personal_development/phpTutorial/quotes.htm

ili detaljniji možda još bolji za tebe link » http://de2.php.net/manual/en/language.types.string.php

[ djoka_l @ 05.09.2012. 11:46 ] @
Zaboga, potrudi se bar da prepišeš primer kako treba.
I uzmi neku finu knjigu pre nego što počneš da bombarduješ forum (pogrešan) početničkim pitanjima. Imaš forum PHP za početnike

STRINGOVI SE KONKATENIRAJU OPERATOROM "." (tačka)
Tekst vrednosti kod inserta u bazu se stavljaju između ' (single quote)

"insert into useri(username, email, pass) values("$txt1","$txt2","$txt3")"

"insert into useri(username, email, pass) values('"$txt1"','" . $txt2 . "','" . $txt3 . "')"
[ Boyka @ 05.09.2012. 12:23 ] @
yap, but error is still there... :S

Znam da se spajaju sa ".", programirao sam ranije u C#.net-u i uvek sam izbegavao nepotrebne navodnike, u C#-u je to islo ovako:

skracena verzija
Code (csharp):

SqlCommand com = new SqlCommand();
com.CommandText = "insert into ime_baze(bla bla) values(@bla_bla)";
com.Parameters.AddWithValue("@bla_bla", odakle);
 


ti navodnici samo zbunjuju i prave kod ne citljivim...

Ovo je Php podforum nisam ni video da postoji deo za pocetnike...
Ja mislim da forum sluzi da se sticu nova znanja i resavaju problemi, na tebi je da li ces nekome pomoci ili ne, ono gore isto kao i pre sa istim Exception-om na istoj liniji ne radi.....
[ plus_minus @ 05.09.2012. 12:32 ] @
Uzmi ti i lepo sve pročitaj ovde za početak → http://de2.php.net/manual/en/language.types.string.php, a c sintaksa, to jest, php sintaksa je jako slična sa c sintaksom, međutim, što si i sam video, definitivno postoje razlike. Parser ti je rekao.. djoka_l ti je rekao.. ja pokušavam da ti dam hint, jer ako ti sve kažemo, od tebe će ispasti - ništa.. i tako. :)
[ Boyka @ 05.09.2012. 13:41 ] @
Ma ok, ne volim ni ja kad mi je sve na tanjiru, ali mi nije jasno kako pokazuje samo jednu istu liniju koda kao pogresnu..

Code (php):

$ubaci = mysql_query("insert into useri(username, email, pass) values('"$txt1 . "','" . $txt2 . "','" . $txt3 . "')";
 
[ djoka_l @ 05.09.2012. 13:52 ] @
Nedostaje ti tačka pre $txt1 i zatvorena zagrada pre ;
[ Boyka @ 05.09.2012. 14:13 ] @
O Bože ahhaa koja glupost :S
Evo zbog toga nikako ne volim navodnike, totalno se pogubim...

Hvala Vam puno, radi sve normalno, sada radim login stranu... moraću ovu registraciju još malo dopuniti sa ajax proverama i captcha generatorom, još jednom hvalaaa :)

Uy ovo je bilo jos par sličnih problema..
[ Mladjox @ 05.09.2012. 14:29 ] @
U ovom kodu lakse je naci sta nije dobro nego sta je dobro :D

<?php
$host_name = "localhost:3307"; // verovatno ti port ni ne treba ali ajde
$db_username = "root";
$password = "123";
$db_name = "vezba";

if(!$_POST['btn']) // ovdje treba da bude !isset($_POST['btn'])
{
//ako button nije pritisnut ne radi nista...
}
else
{
$con = mysql_connect("$host_name", "$db_username", "$password"); //stace ti " na promenjivoj??? Brisi to
//ako jeste konektuj se...
if(!$con)
{
echo 'Could not connect...';
//ako se ne moze konektovati ispisi...
}
mysql_select_db("$db_name") or die("No Database"); //selektuj bazu vezba ( i ovdje stace ti " na promenjivoj, isto brisi
if($_POST['txt1']!=0 & $_POST['txt2'] !=0 & $_POST['txt3'] !=0 & $_POST['txt4'] !=0 & $_POST['txt3'] == $POST['txt4']) // zar nije lakse i bolje koristiti !empty($_POST['txt1']) && ...
{
$ubaci = mysql_query("insert into useri(username, email, pass) values("$_POST["txt1"]","$_POST["txt2"]","$_POST["txt3"]")"); //query ne valja nikako treba da bude
// "INSERT INTO useri (username, email, pass) VALUES ('".$_POST['txt1']."', '".$_POST['txt1']."', '".$_POST['txt1']."')"

//ako je vrednost tekst polja rzlicita od nula, i password polje jednako confirm pass polju ubaci vrednosti iz polja u bazu
$selektuj = mysql_query('select '$_POST["txt1"]' from useri'); //ovdje "select".$_POST['txt1']."from useri"
//selektuj vrednost text polja username iz baze...
while($red = mysql_fetch_array($selektuj)) //dok citas podatke iz baze smesti ih u varijablu '$red'..
{
echo 'Thank you'. " " . $red['username'] . 'for registration...';
}
}
else{die("password is not same, or text values are null...")}
mysql_close($con); //
}
?>

Moguce da sam negde i ja pogresio. Sad ti to sve fino prepravi kako sam u komentarima napisao i onda javi radi li.

Edit:

Nemoj ovo da koristis na nekom sajtu slucajno...I koristi PDO za pristup bazi
[ Boyka @ 05.09.2012. 14:51 ] @
localhost:3307 nije default port, ako bih stavio localhost on b trazio samo 3306, na kom je MS SQL Server, a ne MySQL ;)
Ostalo nisam ni citao jer je nemoguce, koristi code:php tagove molim te :)

evo ga kod...
Code (php):

<?php
$host_name = "localhost:3307";
$db_username = "root";
$password = "123";
$db_name = "vezba";

$txt1 = htmlentities($_POST['txt1'], ENT_QUOTES, "UTF-8");
$txt2 = htmlentities($_POST['txt2'], ENT_QUOTES, "UTF-8");
$txt3 = htmlentities($_POST['txt3'], ENT_QUOTES, "UTF-8");
$txt4 = htmlentities($_POST['txt3'], ENT_QUOTES, "UTF-8");

if(isset($_POST['btn']))
{
$error = array();
     
     //username
if(empty($txt1))
{
     $error[] = 'Please enter a username. ';
}
else if( ctype_alnum($txt1) )
{
     $username = $txt1;
}
else
{
     $error[] = 'Username must consist of letters and numbers only. ';
}
     
//email
if(empty($_POST[$txt2]))
{
    $error[] = 'Please enter your email. ';
}
else if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $txt2))
{
     $email = mysql_real_escape_string($txt2);
}
else
{
     $error[] = 'Your e-mail address is invalid. ';
}    
     //password
if(empty($txt3))
{
     $error[] = 'Please enter a password. ';
}
else if($txt3<=6)
{
     $error[] = 'Password must contain minimum 6 character..';
}
else if($txt3!=$txt4)
{
     $error[] = 'Confirm password';
}
else
{
     $password = mysql_real_escape_string($txt3);
}
     
$con = mysql_connect("$host_name", "$db_username", "$password");
//ako jeste konektuj se...
if(!$con)
{
     echo 'Could not connect...';
     //ako se ne moze konektovati ispisi...
}
mysql_select_db("$db_name") or die("No Database"); //selektuj bazu vezba

$ubaci = mysql_query("insert into useri(username, email, pass) values('" . $txt1 . "','" . $txt2 . "','" . $txt3 . "')") or die('Could not insert values into database' . " " . mysql_error());
//ako je vrednost tekst polja rzlicita od nula, i password polje jednako confirm pass polju ubaci vrednosti iz polja u bazu
echo 'Thank you for registration!';
mysql_close($con);
}
?>
 


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

[Ovu poruku je menjao Boyka dana 05.09.2012. u 16:12 GMT+1]

[Ovu poruku je menjao Boyka dana 05.09.2012. u 16:18 GMT+1]
[ Mladjox @ 05.09.2012. 15:40 ] @
Sad na nesto i lici ali opet koristis "$nesto", shvati da ti na promenjivoj NE TREBAJU navodnici!

I par saveta:
1.Koristi PDO, em je lakse em je sigurnije za upotrebu.
2.Procitaj malo ovo http://php.net/manual/en/control-structures.switch.php
3.Nauci neki od frameworka(moj predlog CodeIgniter).
[ Boyka @ 05.09.2012. 15:50 ] @
da izmeniću sada...

hvala na savetima...
ne znam ni sam zašto sam greške proveravao if-om :O
lakše mi je bilo da sam ovako:

switch($txt3)
case empty:
case <= 6:
itd...
[ Burgos @ 05.09.2012. 19:57 ] @
Ne, ne možeš da imaš veće, manje itd. unutar uslova za izvršenje case blokova - mora da bude tačna vrednost.
[ Boyka @ 05.09.2012. 20:20 ] @
Znam, greška... Nisam duuugo koristio switch petlju
[ plus_minus @ 05.09.2012. 20:27 ] @
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;
 
[ Boyka @ 05.09.2012. 20:44 ] @
Pa i ja sam čini mi se ranije koristio upite u switch-u...
[ Burgos @ 06.09.2012. 02:33 ] @
@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).
[ Burgos @ 06.09.2012. 03:05 ] @
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

[ Boyka @ 06.09.2012. 09:11 ] @
Izvini, ali ne znam sta je to 'PDO'..
[ Tyler Durden @ 06.09.2012. 09:44 ] @
Onda fino odeš na Google, ukucaš PDO+PHP i Gugi će te zatrpati sa relevantnim linkovima.
[ plus_minus @ 06.09.2012. 09:54 ] @
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.
[ Burgos @ 06.09.2012. 13:07 ] @
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.
[ plus_minus @ 06.09.2012. 14:02 ] @
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.
[ Burgos @ 06.09.2012. 14:08 ] @
Ok.
[ plus_minus @ 06.09.2012. 14:20 ] @
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
[ Boyka @ 06.09.2012. 14:21 ] @
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. :)
[ japan @ 06.09.2012. 14:30 ] @
@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
[ plus_minus @ 06.09.2012. 14:30 ] @
@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]
[ plague @ 06.09.2012. 14:48 ] @
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.
[ plague @ 06.09.2012. 14:54 ] @
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.
[ japan @ 06.09.2012. 14:54 ] @
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.
[ plus_minus @ 06.09.2012. 15:07 ] @
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.
[ japan @ 06.09.2012. 15:13 ] @
pokušaću još jednom, pa odustajem... izvrši prvo ovo:
Code (php):

$var = 0;

switch ($var) {
    case ($var == 0) :
        echo "equals 0";
        break;
    case ($var == 3) :
        echo "equals 3";
        break;
    case ($var == 5) :
        echo "equals 5";
        break;
    default:
        echo "can't determine";
}
 


pa onda ovo:
Code (php):

$var = 0;

switch (true) {
    case ($var == 0) :
        echo "equals 0";
        break;
    case ($var == 3) :
        echo "equals 3";
        break;
    case ($var == 5) :
        echo "equals 5";
        break;
    default:
        echo "can't determine";
}
 

[ plus_minus @ 06.09.2012. 15:15 ] @
Ama, neću da izvršavam.. :) :D te vežbičice, pliz.. :)

I reci mi, za šta će ti DEFAULT? case.. u ovom slučaju? :)
[ plague @ 06.09.2012. 15:28 ] @
@plus_minus
Pogledaj primer:
Code (php):

$var = 0;

     switch($var) {

          case($var < 1):
               function2();
          break;
         
          case($var < 3):
               function3();
          break;
         
          case($var < 5):
               function4();
          break;

          default:
               function1(); break; //hocu da se izvrsi funkcija1() ako je $var 5 ili vece
         
     }
 

Ako je $var == 0 se nece ni jedan od ovih blokova izvrsiti sem defaulta. A ako uradimo kao sto si ti rekao (stavimo default blok ispred i ne stavimo break) izvrsice se i funkcija1 i funkcija2. A ako izbacimo default blok (kao sto si rekao) ne postoji case koji ce se izvristi sem ako namerno ne prosledimo false, tj ako se pravimo ludaci i napisemo ($var > 5). Onda ce se izvrsiti iako je $var zapravo 0 i nema smisla da se nesto izvrsi ako je netacno.
[ plus_minus @ 06.09.2012. 15:38 ] @
Ok. Super, to je TAČNO. I ja to nisam ni poricao. Al' opet postavljam pitanje, na koje ne dobijam odgovor.

Zašto "default: .. " ?
Jel' znate da default nije moranje niti obavezno?

I zbog toga, ko meni ili tebi brani da upotrebimo switch/case varijantu onda kada za to ima potrebe i neće dolaziti do ovakvih situacija?
Navodno pokušavate nekome nešto da pojasnite i da uspešno pronađete bugove ili pros/cons i da idete tom filozofijom da je if else uvek bolje koristiti a da switch/case ne valja i nije dobro..

Takav utisak na kraju ove konverzacije može imati neko ko čitucka sa strane.
A takav utisak je pogrešan.

Ono što vi nikako da se setite jeste da postoji objašenjenje i za te stvari.

razlika između if/else i switch/case kontrolne strukture.

Lepo i piše, it is almost identical/similar as if/else i šta još?

Switch/case radi loose comparsion, kraj. Tabela. → http://www.php.net/manual/en/types.comparisons.php#types.comparisions-loose

E nakon toga, pojedinačno možemo da izvučemo logiku i da primenimo switch/case tamo gde treba ukoliko više pasuje od if/else.

Meni narod nešto da objasni.. lol.

"Ko je bolji i brži i jači, Switch/case ili if/elseif/else .. ? "

"e saću da vam pokažem." :p

Raiden Wins! Fatality!
Round 2, Sub-zero wins.. fatality...

E, na to liči ova diskusija.
[ plague @ 06.09.2012. 15:52 ] @
Citat:
plus_minus:
@japan

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


Samo sam ti naveo primer da to ne resava uvek problem.

Citat:
Zašto "default: .. " ?
Jel' znate da default nije moranje niti obavezno?

Dobro, nije obavezan. Hoce li moj primer raditi bez default? Hoce li izvrsiti funkcija2 jer je 0<1 ?

Citat:
Navodno pokušavate nekome nešto da pojasnite i da uspešno pronađete bugove ili pros/cons i da idete tom filozofijom da je if else uvek bolje koristiti a da switch/case ne valja i nije dobro..

Ja to nigde nisam rekao, rekao sam da ako ne koristis true kao switch() agrument moze doci do nepredvidivih rezultata jer si ti rekao:
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..

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.
Na sta sam ja zapravo hteo da ti ukazem da ako $_POST['something'] bude 0, switch/case nece raditi kako treba, i u situacijama kada imas potrebu da u case-u stavljas uslov treba uvek koristiti true kao switch argument. Nema razloga da radis ovako jer je identicno samo u tvom primeru mozes da prodjes kao bos po trnju ako promenljiva bude 0. To sam pokazao primerom kada se u case-u poziva funkcija za sta ne postoji resenje menjanjem pozicije default bloka

Citat:
Ono što vi nikako da se setite jeste da postoji objašenjenje i za te stvari.
Mi smo se setili objasnjenja i pokusavamo da ti objasnimo zasto paksa switch($var)/case (uslov) ne valja, ali ti odbijas da prihvatis.

Citat:
Meni narod nešto da objasni.. lol.
Argumentacija na nivou.
[ Boyka @ 06.09.2012. 16:04 ] @
Citat:
plus_minus:
@Boykahttp://www.elitesecurity.org/p...64075?refresh=MTM0Njk0MTkzNw==

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.


"Boyka, You must learn English or change profession. Stop with all things what you purposed, and try to learn at least 30% English language... Bolje čitam i govorim :)

Ja ne pišem o tome da ja ne znam Engleski, nego pišem da se ne može isto razumeti objašnjenje na Srpskom i na Engleskom jeziku...
[ Burgos @ 06.09.2012. 16:08 ] @
Videćeš da je posle par godina prakse lakše razumeti objašnjenje na engleskom, nego na srpskom (još ako je loš prevod, a 90% naše literature je prevedeno odvratnim bezličnim stilom) ;)
[ plus_minus @ 06.09.2012. 16:10 ] @
Citat:
plague: Argumentacija na nivou.


Na nivou. :)

Citat:
Mi smo se setili objasnjenja i pokusavamo da ti objasnimo zasto paksa switch($var)/case (uslov) ne valja, ali ti odbijas da prihvatis.


Ne želim, smatram drugačije. I smatram da se još niste ni dovoljno poigrali sa tim, te da niste ni kompetentni da dajete bilo kakve školske primere. Bilo kome.

My oh my.. One Zero is a big problem. And how to detect that?

I kako da detektuješ nulu a da ti kod bude - manji? Što više geekovski, jel' ?

@Boyka

Na prethodnoj strani..

Citat:
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. :)


A malopre..

Citat:
Ja ne pišem o tome da ja ne znam Engleski, nego pišem da se ne može isto razumeti objašnjenje na Srpskom i na Engleskom jeziku...


Sve u svemu, Boyka momče, ja ne pišem pomoću tastature, već je ovo što čitaš direktan izliv mastila iz nalivpera, ali vremena su takva kakva su, pa se to ipak može videti i na ekranu.

Ili znaš. Ili ne znaš. Bar kad je engleski u pitanju.

Ima i treća varijanta. A to je natucavanje nekog jezika.

A to što se tiče nerazumevanja objašnjenja, to nemoj da te plaši. Ponekad, neka zaista jesu zakukoljena.

[Ovu poruku je menjao plus_minus dana 06.09.2012. u 17:25 GMT+1]
[ Boyka @ 06.09.2012. 16:20 ] @
Citat:
Burgos:
Videćeš da je posle par godina prakse lakše razumeti objašnjenje na engleskom, nego na srpskom (još ako je loš prevod, a 90% naše literature je prevedeno odvratnim bezličnim stilom) ;)


Pa to jeste sigurno :)
[ plague @ 06.09.2012. 16:29 ] @
Citat:
plus_minus:
Ne želim, smatram drugačije. I smatram da se još niste ni dovoljno poigrali sa tim, te da niste ni kompetentni da dajete bilo kakve školske primere. Bilo kome.
[Ovu poruku je menjao plus_minus dana 06.09.2012. u 17:21 GMT+1]

Ako smatras da je drugacije i da si u pravu, slobodan si da resis onaj primer koji sam dao i da mi pokazes. Resi moj primer (sa ili bez default) tako da ce raditi i u slucaju kada je $var = 0.
[ plus_minus @ 06.09.2012. 17:29 ] @
Dodaj još jedan case(0) ili case($var==0): i radiće.
Ako već strepiš od nule.

Dakle, ne moraš ni case($var==int) već samo int

Eto, rešio sam ti tvoj čudnovati primer.

Sve i da nisam, ovaj sajt sam skoro završio. » magona.rs

I komplet sajt, tu gde može, gde sam zapravo ja lično smatrao da treba da koristim switch/case, koristio sam switch/case.
Jer switch metoda, ima svoju svrhu i lakše je mnoge stvari raditi uz takvu kontrolnu strukturu, hteo ti to sebi da dočaraš ili ne.. :)

Npr. /?prikaz=nasa_izdanja

Prikaz je konstanta zapravo, dobijam je iz same funkcije, postoji dakle jedna funkcija koja ispljuje to i još par definicija pride, dakle nešto ovako..

Code (php):


define("prikaz", filter_input(INPUT_GET, 'prikaz', FILTER_SANITIZE_STRING));

 


I kasnije, na glavnoj prekretnici..

Code (php):


switch( prikaz ){

case($pageAr[1]): /* execute something here ...  */  require_once _lang .$pageAr[1].'.php'; break;
case($pageAr[2]): /* execute ... or not, whatever.. */ require_once _lang .$pageAr[2].'.php'; break;
# itd.. itd..
}

 


Kao što sam pomenuo, svaki od tih prekidača, radi kako treba, obavlja sve kako sam i zamislio, i ne samo to, switch( prikaz ): se ponavlja više puta na više različitih mesta. Jedan je samo za dinamički css drugi je za sami html. I validacija prilikom registracije, pa i login-a.. ide kroz switch case.

Taj problem koji ti pokušavaš uporno da ilustruješ, a nema potrebe, jer ti verujemo, majke nam, se prevazilazi veoma lako i zaista nema potrebe osvrtati se na te stvari.

Slučaj da li je promenjiva možda numerička ili čist integer? Ili na kraju krajeva jedna obična Nula?
Kada neko ukuca nulu na poljiima za unos imena ili lozinke, samo nulu dakle, tretira se kao NULL. I to - ne prolazi. To se i ispisuje.
Prazno polje. Jer nula i jeste ništa. Al' to » ništa « ne može da prođe. Izađe poruka na ekranu koja detaljiše o tom i tom polju.

Sad, ko želi, neka upisuje nule dokle god hoće, ja šta da mu radim? :)

A mogu čas posla da izmenim tu definiciju za poruku i da piše samo - Greška! Nepravilan unos.
Jer, nula se u ovom mom slučaju tretira kao NULL ili case(empty($inputField))

Isto mu dođe.

[ Burgos @ 06.09.2012. 17:39 ] @
Očigledno je da u ovom primeru koristiš switch kako bi trebalo, a ne kako si propovedao dve stranice unazad.
[ plus_minus @ 06.09.2012. 17:51 ] @
Ajde ne izigravaj sada da ne kažem šta.. "propovedao".

Svašta.
[ plague @ 06.09.2012. 19:08 ] @
U tvom primeru nigde ne vidim da si koristio case(logicka_operacija), a to je sustina o kojoj pricamo.
Citat:
Dodaj još jedan case(0) ili case($var==0): i radiće.
Ako već strepiš od nule.

E vidis, odmah si napravio gresku jer neces da procitas uopste lepo ono sto mi pricamo. Slucaj: case($var==0) nece raditi kada je $var = 0.

Dalje, pricali smo o tome da se u case stavlja logicka operacija, a ne konkretna brojna/slovna vrednost, zar ne? Prvo sto si napisao ( case(0) ) ce raditi, to uopste nije problem nikada jer je to onda najobicniji switch/case primer.

Sta ces raditi ako imas slucaje kada: case ($var < $varX) i kada ne znas koji ce slucaj zapravo obuhvatiti nulu? Posto tvoje resenje se svodi na dodavanje "case : 0" tamo gde treba, a ako ne znas gde treba nego je to dinamicki odredjeno?

Code (php):

$var = 0;
$var2 = $_POST['txt1']; //npr -5
$var3 = $_POST['txt2']; //npr 5
//...
$varN = $_POST['txtN'];

switch($var) {

     case ($var < $var2): // (0 < -5) ne bi trebalo da se izvrsi. Ne sme biti prvo jer ce se desiti: 0 == (0 < -5) sledi: 0 == (false) sledi: false == false sledi: izvrsice se.
          f1();
          break;
     case ($var < $var3): // (0 < 5) -> treba da se izvrsi, znaci moramo da dodamo "case : 0" tu, i da stavimo na prvo mesto.
          f2();
          break;
     //....
     case ($var < $varN)
          fN();
          break;   

     default:
          f0();
          break;
         
}
 
?>
 


Gde ces ovde prisiti case : 0 kada moze da se izvrsi ili f1(), ili f2()...ili fN() ili nijedan(default ako postoji)?
Moja poenta je: takva praksa ce stvoriti probleme jer uvodis jos jednu promenljivu bespotrebno u jednacinu. Ovde da stoji switch(true) ne bi ni trepnuo.

Citat:
I komplet sajt, tu gde može, gde sam zapravo ja lično smatrao da treba da koristim switch/case, koristio sam switch/case.
Jer switch metoda, ima svoju svrhu i lakše je mnoge stvari raditi uz takvu kontrolnu strukturu, hteo ti to sebi da dočaraš ili ne.. :)

Switch/case je super, volim, koristim to, radim sve sto rade mladi. O tome nije rec uopste, niti je to receno. :]
[ plus_minus @ 06.09.2012. 19:28 ] @
Citat:
plague:
...
E vidis, odmah si napravio gresku jer neces da procitas uopste lepo ono sto mi pricamo.


Pa ne čitaš ni ti, zato nemoj da popuješ više, evo, boldovano i citirano.

Citat:
Eto, rešio sam ti tvoj čudnovati primer.

Sve i da nisam, ovaj sajt sam skoro završio.


Poenta priče je da smarate više sa tim.

I šta ću raditi ako je ovo ili ako je ono?

Pa uzeću možda u obzir nešto drugo osim switch/case, a?

Na kraju krajeva, ja i jesam taj koji u ovoj temi govori da su obe varijante podjednako dobre u zavisnosti od slučaja.

Dok se pojedinci hvataju za jedan od bug-ova u php-u (php ima mnogo više od samog jednog bug-a, čisto da te podsetim) ili neočekivanih rezultata.

Ne znam zašto je dalja diskusija oko ovoga uopšte potrebna.
[ Burgos @ 06.09.2012. 19:49 ] @
Zato što će nekada neko da pročita to što si napisao i da upotrebi negde.
[ plus_minus @ 06.09.2012. 20:15 ] @
A šta će neko odavde konkretno da upotrebi?

Pre svega, na stranici broj 2, postavljeno je pitanje s' moje strane, "Jesi li siguran da ovako nešto nije validno za switch?"

Pa je onda dat primer, mali, koji - RADI. I koji jeste validan.

E, onda je došlo do zaključka da ima problema da se detektuje nula kroz upoređivanje vrednosti, sa switch/case metodom.

Sa (ne mojim) zaključkom da switch/case metoda, maltene (po vama) ne treba ni da postoji..

Da vidimo tu famoznu nulu šta će da radi, ako sam baš odlučio da dobar deo proturim kroz -prekidač- ..

Code (php):


if($var==0) $result='Nothing or ZERO is not allowed';
else
switch($var):

case($var < 2 ): # ..... jel' mora baš jedinica? :)))
break;

#itd, itd..
endswitch;

 


I tvoj problem na koji uporno ukazuješ, postao - ništa.

Ahaaa.. čekaj.. pa ja sam sada nepravedan igrač...

Iskoristio sam IF !!!
Ajoj, a tu je i else.. ccc.

[sarc] to mora da se sanira, mnogo je to koda. Može sve to u jednoj liniji, tako je modernije. ;) Mislim, ko će pa da piše toliko.. do kraja života.. [/sarc]
(Tako je. Tu je i jedno i drugo u kombinaciji, što ne umanjuje upotrebljivost i jednog a i drugog načina, tamo gde je zgodno, i evo.. peti ili šesti put to navodim .. )

Mislim, ajde da mi lepo i čitko objasniš zašto ovo uvek i uvek daje error.
I to "fat and juicy one" - error.

Code (php):


     define("_word__",
     'I am not an empty constant!');
     
     (empty( _word__)) ?
     echo 'Impossible!' :
     echo 'Definitely impossible. :S';

 


Da vidimo, šta ovde ne valja?
[ japan @ 06.09.2012. 20:35 ] @
Ne valja to što si suviše sujetan da bi priznao da nešto radiš kako treba.
[ plus_minus @ 06.09.2012. 20:38 ] @
Misliš da nešto NE radim kako treba? To si hteo da kažeš?

Bez obzira, to i nije tema diskusije.

:)
[ Burgos @ 06.09.2012. 20:54 ] @
Niko nije rekao da ne treba switch da postoji i da se ne upotrebljava, i to baš onako kako si pokazao da ga koristiš u praksi. Niko tebe ne uči da programiraš ovde, niti verovatno neko ima nameru da to radi nakon viđenja tvog stava koji je ravan nekim neobrazovanim i zatucanim ribolovcima. Moja namera je da pokažem momku koji je pokrenuo temu zašto to ne treba tako da radi.
[ plus_minus @ 06.09.2012. 21:07 ] @
Pa znam i ja da nije, niko ovde ne nikoga ne bode noževima i tome slično. Ne mora uvek da se stavljaju ni sarc, nepostojeći bb tagovi. :)

I pre nego što nastaviš sa idiotskim vređanjem, budi drug pa pojasni svim zatucanim momcima koji te čitaju,
zašto se na prethodnom primeru dobija error.

:)
[ dakipro @ 06.09.2012. 21:19 ] @
Stvarno je bilo interesantno ali je vec izgubilo smisao nazalost