Autor | Zpráva | ||
---|---|---|---|
BramBurky Profil * |
#1 · Zasláno: 3. 12. 2008, 17:14:46
Dobrý den,
rád bych se zeptal na nějaké zasady, či doporučení pro psaní php kódu. Např. tento kód, který použím pro přihlášení uživatelů a vypsání jejich možností v pravé časti stránek. <?php if($_SESSION["nick"] == ""){ ob_start(); require_once ("nastaveni_databaze.php"); if(isset($_POST['tlacitko_prihlasit'])) { if ($_POST['heslo'] == "" and $_POST['nick'] == "" ) {?><script>alert("Pole \"Pøihlašovací jméno\" a \"Heslo\" jsou nevyplnìné!"); </script><? ;} elseif($_POST['nick'] == "") {?><script>alert("Pole \"Pøihlašovací jméno\" je nevyplnìné!"); </script><? ;} elseif ($_POST['heslo'] == "") {?><script>alert("Pole \"Heslo\" je nevyplnìné!"); </script><? ;} else { $nick=$_POST['nick']; $heslo=$_POST['heslo']; //ochrana DB $nick = stripslashes($nick); $heslo = stripslashes($heslo); $nick = mysql_real_escape_string($nick); $heslo = mysql_real_escape_string($heslo); $overeni_uzivatele="SELECT * FROM uzivatele WHERE nick='$nick' and heslo='$heslo' and random_id = 1"; $result=mysql_query($overeni_uzivatele); $kontrola=mysql_num_rows($result); if($kontrola == 1){ session_register("nick"); $overeni_uzivatele_tym=mysql_query("select * from uzivatele where nick = '".$_SESSION["nick"]."'"); while ($klub=MySQL_Fetch_Array($overeni_uzivatele_tym)): $nazev_klubu = $klub["nazev_klubu"]; $jmeno_managera = $klub["jmeno_managera"]; $nazev_haly = $klub["nazev_haly"]; $mesto = $klub["mesto"]; endwhile; session_register("nazev_klubu"); if ($nazev_klubu == "" and $jmeno_managera == "" and $nazev_haly == "" and $mesto == "") { $presmerovani = "?page=tvorba-profilu"; } else { $presmerovani = "?page=prihlasen"; } mysql_query ("insert into host set je_pripojen='".$_SESSION["nick"]."'"); presmerovani($presmerovani); } else { $overeni_uzivatele_ran="SELECT * FROM uzivatele WHERE nick='$nick' and heslo='$heslo'"; $result_ran=mysql_query($overeni_uzivatele_ran); $kontrola_ran=mysql_num_rows($result_ran); if($kontrola_ran == 1) { echo "<strong>Zatím jste si neaktivoval úcet.</strong>"; } else { echo "<strong>Špatnì zadané Přihlašovací jméno nebo heslo.</strong>"; } } ob_end_flush(); } } ?> <form class="form" method="post" action="/index.php" > <table cellpadding="1" cellspacing="0" align="center"> <tr><td align="left">Nick:</td><td><input class='loginy' id='nick' type='text' name='nick' value="<? echo "".$_POST['nick']."" ?>" /></td></tr> <tr><td align="left">Heslo:</td><td><input class='loginy' id='heslo' type='password' name='heslo' value="<? echo "".$_POST['heslo']."" ?>" /></td></tr> <tr><td colspan="2" align="right"> <input type="submit" name="tlacitko_prihlasit" value="Pøihlásit se" /></td></tr> </table> </form> <? } else { $overeni_uzivatele_tym=mysql_query("select * from uzivatele where nick = '".$_SESSION["nick"]."'"); while ($klub=MySQL_Fetch_Array($overeni_uzivatele_tym)): $nazev_klubu = $klub["nazev_klubu"]; $jmeno_managera = $klub["jmeno_managera"]; $nazev_haly = $klub["nazev_haly"]; $mesto = $klub["mesto"]; endwhile; if ($nazev_klubu == "" and $jmeno_managera == "" and $nazev_haly == "" and $mesto == "") { echo "žádné funkce<br/>"; odhlasit(); } else { echo "užvitel prihlášen jako <strong>".$_SESSION["nick"]."</strong><br/>"; require ("prave-menu.php"); odhlasit(); } } ?> |
||
Měsíček Profil |
#2 · Zasláno: 3. 12. 2008, 17:26:05 · Upravil/a: Měsíček
Reaguji na Bramburku:
Třeba bys nemusel mít nastavený tolik mezer na tabe(u)látor :) tohle jsi psal ve (WIN) Notepadu? Jinak někteří píší místo $_POST['heslo'] == "" spíše empty($_POST["heslo"]), ale IMHO ve výsledku rozdíl není žádný. Pak možná zápisem if () { příkaz; příkaz; } if () { příkaz; příkaz; } |
||
igamenir Profil |
#3 · Zasláno: 3. 12. 2008, 17:38:04
u kódu jde spíš o to aby ses v něm vyznal ty, ale tak co dodržuji já a vyhovuje mi to:
- tabulátory (které mám v PSpadu nastavené na šířku dvou, aby nebyli tak velké) dávám jenom ve vnořených částech, tj. v if, for, atd, abych se v tom vyznal a věděl c ukončovat - poměrně dost komentuji, abych se v kódu vyznal, i když se k němu vrátím za pár měsíců - a v poslední době jsem si místo složených závorek zvykl na endy, líp se mi pak kontroluje, k čemu jaký konec je, když je za tím připojené dané slovíčko: if (): nějaký kód for(): další kód endfor; endif; |
||
Měsíček Profil |
#4 · Zasláno: 3. 12. 2008, 17:46:28
Reaguji na igamernira:
Upřímně mi to nepříjde moc přehledné .. u mě vyhrává [2] i když jsem viděl už mnohokrát i [1]. <?php $x = 3; $y = 4; /****************** 1 *********************/ if ($x < 10) { echo "$x je menší než 10"; if ($y > 10) { echo "$y je větší než 10"; } # Ukončení 2 <IF>u } # Ukončení 1 <IF>u /****************** 2 *********************/ if ($x < 10) { echo "$x je menší než 10"; if ($y > 10) { echo "$y je větší než 10"; } } /****************** 3 *********************/ if ($x < 10) : echo "$x je menší než 10"; if ($y > 10) : echo "$y je větší než 10"; endif; endif; /***************************************/ ?> |
||
bohyn Profil |
#5 · Zasláno: 3. 12. 2008, 18:00:45
„ Jinak někteří píší místo $_POST['heslo'] == "" spíše empty($_POST["heslo"]), ale IMHO ve výsledku rozdíl není žádný.“
Rozdil je IMHO podstatny: Returns FALSE if var has a non-empty and non-zero value. The following things are considered to be empty: "" (an empty string) 0 (0 as an integer) "0" (0 as a string) NULL FALSE array() (an empty array) var $var; (a variable declared, but without a value in a class) Zdroj: PHP manual Ke stylu psani: Pouzivam #2 co posilal Měsíček. Zkousel sem i #1 ale prehlednosti sem tim moc nepridal, tak sem se na to vykaslal a vratil se k #1. Na metodu #3 muzou byt zvykli lide z ASP a jinych jazyku pouzivajicich tuto syntax. Dale se nekdy ztracim pri vynechavani slozenych zavorem if(true) if(true) echo "neco"; else echo "neco2"; Ad odsazovani: odsazuju dvema mezerama - je to ve vsech editorech stejne. |
||
Měsíček Profil |
#6 · Zasláno: 3. 12. 2008, 18:10:46 · Upravil/a: Měsíček
Reaguji na bohyna:
Máš pravdu malý rozdíl tam je, no :) <?php $x = Array("X",null,0,1,0.33,"", false, array(), "0"); for ( $y = 1; $y < 9; $y++) { if (empty($x[$y])) { $z_1[$y] = $x[$y]; } if ($x[$y] == "") { $z_2[$y] = $x[$y]; } } print_r($z_1); // Array ( [1] => [2] => 0 [5] => [6] => [7] => Array ( ) [8] => 0 ) print_r($z_2); // Array ( [1] => [2] => 0 [5] => [6] => ) ?> |
||
joe Profil |
#7 · Zasláno: 3. 12. 2008, 18:21:04 · Upravil/a: joe
1. Nechápu proč odsazuješ i jednotlivé bloky if-else, tj. proč místo Měsíčkova kódu:
if ($x < 10) { echo "$x je menší než 10"; if ($y > 10) { echo "$y je větší než 10"; } } if ($x < 10) { echo "$x je menší než 10"; if ($y > 10) { echo "$y je větší než 10"; } } 3. Piš si tak, jak uznáš za vhodný, já bych ale po tobš tenhle kód číst nechtěl. Rozhodně by mě nebavilo pořád posouvat posuvníkem na obě strany a ještě scrollovat. bohyn Stejné to není, ale pokud se to použije k tomuto účelu, tak to skutečně jedno je. |
||
BetaCam Profil |
#8 · Zasláno: 3. 12. 2008, 18:26:22
BramBurky
Styl psaní je věc subjektivní. Nelze dost dobře říct co je lepší a co horší. Tvůj problém je hlavně to, že nemáš vůbec žádnej styl. Ten kód co si sem postnul je toho krásná ukázka. 1) Odsazení používáš jak se ti zachce 2) Ohraničení obloku závorkami taky jak se ti zachce K bodu 1) : a) někde odsazuješ jedním tabulátorem někde zas dvěma. b) odsazuješ i hodnoty v rámci jednoho bloku : $nick=$_POST['nick']; $heslo=$_POST['heslo']; //ochrana DB $nick = stripslashes($nick); $heslo = stripslashes($heslo); $nick = mysql_real_escape_string($nick); $heslo = mysql_real_escape_string($heslo); $overeni_uzivatele="SELECT * FROM uzivatele WHERE nick='$nick' and heslo='$heslo' and random_id = 1"; $result=mysql_query($overeni_uzivatele); $kontrola=mysql_num_rows($result); K bodu 2 : používáš : if(){ } nebo if() { } nebo if() { } Osobmě používám : tab = 4 mezery Styl zápisů bloků : if(){ echo $aaa; }else{ echo $bbb; } Inline if zápis : if() echo $aaa; else echo $bbb; Ale prostě to sou věci které sou subjektivní. Pokud mi někdo donese kód podobný tomu tvému tak si to stejně nechám přerovnat na styl na který sem zvyklí. |
||
BramBurky Profil * |
#9 · Zasláno: 3. 12. 2008, 18:47:23
Děkuji za příspěvky, určitě se z vašich názorů budu snažit poučit.
|
||
srigi Profil |
#10 · Zasláno: 3. 12. 2008, 18:48:57
Kcem sa vas PHPckarov spytat, ked tu mame taku zivu temu, ktory styl if/else (try/catch) so slozenymi zatvorkami pouzivate?
// (1.) if () { ... } else { ... } // (2.) if () { ... } else { ... } Vdaka za odpovede. |
||
Měsíček Profil |
#11 · Zasláno: 3. 12. 2008, 18:49:50 · Upravil/a: Měsíček
Reaguji na srigiho:
Já druhý .. tedy <?php if (3 < 4) { // Do 1 } else { // Do 2 } ?> |
||
DJ Miky Profil |
#12 · Zasláno: 3. 12. 2008, 18:50:58
Já zase nerad odsazuju závorky u funkcí, operátory apod., pro mě je přehlednější napsat
if($a==4) $b=$a+1; if ($a == 4) $b = $a + 1; Na druhou stranu nešetřím řádky, takže místo BetaCamova způsobu psaní if-else: if(){ echo $aaa; }else{ echo $bbb; } if() echo $aaa; else echo $bbb; if() { echo $aaa; } else { echo $bbb; } if() echo $aaa; else echo $bbb; |
||
bohyn Profil |
#13 · Zasláno: 3. 12. 2008, 18:58:01
joe
S tabulatorama je problem ze ne v kazdym editoru to jde zmenit. Treba v kdevelop (nebo notepadu) se mi to nejak nedari. |
||
BetaCam Profil |
#14 · Zasláno: 3. 12. 2008, 19:08:25
DJ Miky
„Na druhou stranu nešetřím řádky, takže místo BetaCamova způsobu psaní if-else:“ if() echo $aaa; else echo $bbb; To neni ani tak o šetření řádků jako o tom kdy tento zápis používám. Já ho používám v určitých případech pro nahrazení ternárního operátoru. Proto ho píši inline stejně jako bych tak napsal ternár. |
||
joe Profil |
#15 · Zasláno: 3. 12. 2008, 19:13:50
bohyn
To je možné, ale pokud bych dělal nějaké úpravy, tak na to nepotřebuju změnit tabulátory. Psát celý kód v notepadu není zrovna rozumný nápad, stejně tak jako psát to snad v jakémkoli editoru na Linuxu, kde se ten kód ani nedá číst. Třeba ve škole je jakýsi editor KAte, ve kterém nenapíšu snad ani pár řádků dobře, ještě že existujou ty Windows :) |
||
nightfish Profil |
#16 · Zasláno: 3. 12. 2008, 19:14:03
|
||
bohyn Profil |
#17 · Zasláno: 3. 12. 2008, 19:23:31
joe
Nepodcenuj kdevelop, je to velmi schopny editor a rad ho pouzivam (pod Linuxem IMHO lepsi neni). Co se tyce notepadu a spol. tak je to nouzovka dostupna vsude. Cele weby v nem taky nepisu. |
||
Timy Profil |
#18 · Zasláno: 3. 12. 2008, 21:17:30
Mně maximálně vyhovuje C# styl:
for (int i = 0; i < hraciDeska.rozmer; i++) { for (int j = 0; j < hraciDeska.rozmer; j++) { if (ValidniTah(i, j, radekOdkud, sloupecOdkud, hrac) && hraciDeska.MuzemeTahnout(i, j)) { PlatnyTah tah = new PlatnyTah(); tah.Kam = new Pole(i, j); tah.Preskoceno = preskoceno; platneTahy.Add(tah); } } } Kód je na jednu stranu dlouhý, ale na druhou stranu je všechno hezky označené a hned na první pohled jasně vidím všechny začátky a konce. |
||
Časová prodleva: 3 dny
|
|||
joe Profil |
#19 · Zasláno: 6. 12. 2008, 10:35:08 · Upravil/a: joe
OT: bohyn
Já bych v tom psát nemohl nic, protože na linuxu je takové divné vyhlazení písma. Editor může být sice dobrý, ale když nemá normální písmo, nevyhlazené, je pro mě k ničemu. nightfish Můžeš mi prosím tě vysvětlit, proč nepoužívat ?> ? Nejsem si jenom jistý jestli to z toho anglického textu chápu správně :) |
||
Jan Tvrdík Profil |
Osobně preferuji "skutečné tabulátory" se šířkou 4 mezery + formátování téměř velmi podobné http://nettephp.com/cs/coding-standard
BramBurky Ten kód je napsán tak strašně, že ho ani přeformátování nezachrání :) Timy Ten jsem kdysi taky používal, ale pak jsem přešel variantu Měsíček:2 (myslím styl závorek) a v editoru pro C# jsem si to taky nastavil (bohudík, že to jde). "Shazování" otevírací složené závorky na nový řádek používám jen u funkcí a tříd. nightfish „http://nettephp.com/cs/coding-standard“ To je tak staré, že ani David už některé části nedodržuje. joe „Můžeš mi prosím tě vysvětlit, proč nepoužívat ?> ? “ Eliminuješ možnost, že na konci dokumentu omylem odešleš nějaké bílé znaky, které zabraní zapnutí session apod. |
||
joe Profil |
#21 · Zasláno: 6. 12. 2008, 12:12:21
Jan Tvrdík
Díky. Já to zakončení píšu jen tam, kde je to potřeba. Překládal jsem si to dobře, ale stejně to moc dobře nechápu. Je to asi myšlené tak, že pokud tam bude ?> a za ním nějaké znaky, tak pak abych eliminoval nějaký výpis, když bych pak includoval třeba nějaký další soubor. Ale když bude nějaký bílý znak před ?> tak to nevadí, jestli to teda chápu dobře. Tak to potom jo :-) |
||
Časová prodleva: 15 let
|
0