Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem PHP: Chyba s odkazem typu index.php?id=1..

Ahoj mám takový problém,mám plně funkční stránku v php, kde jsou stránky uloženy jako stranka1.php,stranka2.php a dal. Protoze maji podobny nazev a potrebuju odkazy dynamicky, tak sem se rozhodl, ze budu ty stranky includovat a odkaz bude index.php?id=1.. Jenze problem je ze odkazy nefunguji a zustava to porad na index.php. Php kod na includovani myslim ze mam spravne
test.php

$id = $_GET["id"];
if ($id == "1") {
include "forum/index.php";
}elseif ($id == "2") {
include "stranka1.php";
}elseif ($id == "3") {
include "stranka2.php";
}elseif ($id == "4") {
include "stranka3.php";
}elseif ($id == "5") {
include "stranka4.php";
}elseif ($id == "6") {
include "stranka5.php";
}else {include "index.php";}

TOTO je stranka na ktere maji ty odkazy fungovat

<body leftmargin="0" topmargin="0" marginheight="0" marginwidth="0">
	[b]<?php include ("test.php") ?>[/b]
	<div id="telo" class="wrapper">
	<div class="container"></div>
			<div class="bunka-42"></div>
			<div class="bunka-43"></div>
			<div class="domu"><a href="index.php" target="_self">Dom&#367;</a></div>
			<div class="bunka-53"></div>
			<div class="bunka-54"></div>
			<div class="forum"><a href="forum/index.php?id=1" target="_self">F&oacute;rum</a></div>
			<div class="bunka-56"></div>
			<div class="galerie"><a href="index.php?id=2" target="_blank">Galerie</a></div>
			<div class="bunka-58"></div>
			<div class="bunka-63"></div>
			<div class="bunka-64"><a href="index.php?id=3" target="_self">Odkaz3</a></div>
			<div class="bunka-65"></div>
			<div class="bunka-66"><a href="index.php?id=6" target="_self">Odkaz6</a></div>
			<div class="bunka-67"></div>
			<div class="bunka-68"></div>
			<div class="preview"><script language="javascript" type="text/javascript" src="js/thumbnails.js"></script></div>
			<div class="bunka-70"></div>
			<div class="bunka-149"></div>
		</div>
   	</body>
   </div>

odmazal sem nejake bunky protoze se to sem nevlezlo ale ty na to nemaji myslim vliv

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
- takto udělané include stránek je naprosto nevhodné - slyšel jsi o příkazu SWITCH? - vypiš si echem…
host 07.08.2010 14:28
host
Ono vůbec se to dá strašně zjednodušit a zpřehlednit: $id = $_GET["id"]; if($id >= 2 && $id <= 6) {…
marekdrtic 07.08.2010 14:38
marekdrtic
A switch už prý hodně programátorů zavrhuje, switch je prý nepřehledný. ::) Ak niekto zavrhuje swit…
los 07.08.2010 18:30
los
Ach jo, v OOP je switch považován za code smell a v 95% procentech případů se dá nahradit polymorfis…
MaSo 09.08.2010 09:38
MaSo
Skús nahradiť switch..case, o ktorom sa bavíme teraz, polymorfizmom. Buď sme sa trafili do tých 5 %…
los 09.08.2010 17:56
los
Ja se právě vůbec nebavím o tomto problému, jen jsem reagoval na to Ak niekto zavrhuje switch, tak…
MaSo 09.08.2010 18:14
MaSo
Tvoje tvrdenie, že opak je pravdou, nie je ničím podložené a spadá do kategórie tvrdení "v 95% proce…
los 09.08.2010 20:52
los
Dám příklad (nekamenujte mě jsem samouk): switch($_GET['where']){ case "galerie": write_galerie();… nový
CoWayger 09.08.2010 20:58
CoWayger
Tvrdíš, že switch..case je horší ako if..else a že sa dá takmer vždy nahradiť polymorfizmom - ale to… nový
MaSo 09.08.2010 21:10
MaSo
Takto to dáva zmysel a o tomto sa nikto neháda. Ale keď v kontexte if..else vs switch..case odpovieš… poslední
los 09.08.2010 21:29
los

- takto udělané include stránek je naprosto nevhodné
- slyšel jsi o příkazu SWITCH?
- vypiš si echem, zda má proměnná $id přiřazenou správnou hodnotu?

A teď koukám, že bys ty čísla neměl mít asi v uvozovkách, protože to není řetězec. Zkus takto:

if ($id == 1) {

Ono vůbec se to dá strašně zjednodušit a zpřehlednit:

$id = $_GET["id"];
if($id >= 2 && $id <= 6)
{
include "stranka".($id-1).".php";
}
elseif($id == 1)
{
include "forum/index.php";
}
else
{
include "index.php";
}

A switch už prý hodně programátorů zavrhuje, switch je prý nepřehledný.

V uvozovkách chyba není, PHP je na takovéto prasárny jako stavěné :-).

Ach jo, v OOP je switch považován za code smell a v 95% procentech případů se dá nahradit polymorfismem...
Možná by sis mohl zadat do google switch code smell, pokochat se vysledky a třeba se i nečemu přiučit...:-)

EDIT: Tady je hezké video... blog dokonce ukazuje i proč je dobré mit napsané na svůj kód unit testy. ;-)

Skús nahradiť switch..case, o ktorom sa bavíme teraz, polymorfizmom. Buď sme sa trafili do tých 5 % (nie), alebo si si tých 95 % vycucal z prsta (áno).

Hezké video ukazuje prípad, ktorý si zaslúžil refaktoring, ale príčinou nebol switch..case ako taký, ale to, že logika pre rôzne prípady bola definovaná v jednej monolitickej metóde. Code smell je len symptóm problému, to ale neznamená, že tam nejaký problém je. Javisti majú ale s enumom nejaký mentálny problém, keďže im aj celkom dlho trvalo (8 rokov?), kým prišli na to, že by mali enum vôbec do toho jazyka zapracovať.

Napr. chlapík vo videu na záver upravil factory metódu zo switch..case na HashMap so slovami, že to je more object-oriented way. Pritom do slovníka ukladal inštancie nových objektov, ktoré vytváral zbytočne a v prípade, že by niektorý z nich bol časovo náročnejší na vytvorenie, tak by sa mu to odrazilo na výkone. Pritom switch..case týmto neduhom netrpel, takže toto konkrétne by som skôr nazval more stupid way. Môžeš síce povedať, že to nie je podstatné (dalo by sa pridať lazy loading a neviem čo ešte), ale takisto aj ja môžem povedať, že celý ten refaktoring bol len stratou času (príliš malý problém, pre ktorý sa našlo "elegantné" a komplexné riešenie, Java way).

Ja se právě vůbec nebavím o tomto problému, jen jsem reagoval na to

Ak niekto zavrhuje switch, tak potom nie je programátor.

protože spíš opak je pravdou...:-)

Myslím, že mentální problém s enumem mají spíš ccékřížkaři, protože si ty enumy sice zavedli hned, ale dost divné. Protože nemůžou mít metody, takže jsou to asi nějaké polovíční objekty nebo co...:-)

Mně řešení komplexní nepřišlo. Zlepšila se čitelnost kódu a jeho udržovatelnost. A navíc, takových příkladu ti vygooglím milion i pro cékřížek...

Tvoje tvrdenie, že opak je pravdou, nie je ničím podložené a spadá do kategórie tvrdení "v 95% procentech případů se dá (switch..case) nahradit polymorfismem". To, že si strávil príliš veľa času s Javou, sa výrazne podpísalo na tvojom spôsobe uvažovania. Vygoogli si radšej aký je rozdiel v enumoch v Jave a ostatných programovacích jazykoch a skús sa na to pozrieť s nadhľadom, pretože v tomto je výnimkou práve Java - v Jave sú to také "polovičné objekty".

Nehovorím, že sa nezlepšila čitateľnosť kódu, ale to riešenie JE komplexnejšie. Udržiavateľnosť sa v tomto konkrétnom prípade príliš nezmenila, zlepšila sa skôr modulárnosť a tým pádom aj rozširovateľnosť. A zavedením HashMapy namiesto switch..case sa k lepšiemu nezmenilo teda vôbec nič.

Príklady mi googliť naozaj nemusíš, takéto základy sa učia v škole. Pokiaľ si si nevšimol, tak dosť jasne rozlišujem medzi prípadom switch..case vs. if..else a prípadom switch..case/if..else vs. polymorfizmus. Tvrdíš, že switch..case je horší ako if..else a že sa dá takmer vždy nahradiť polymorfizmom - ale to je totálny nonsens.

Dám příklad (nekamenujte mě jsem samouk):

switch($_GET['where']){
case "galerie":
write_galerie();
break;
case "clanky":
write_clanky();
break;
case "kalendar":
write_kalendar();
break;
case "lednice":
write_lednice();
break;
case "myčka":
write_mycka();
break;
default:
write_menu();
}

Jak vyhodíte switch ? :-P

Tvrdíš, že switch..case je horší ako if..else a že sa dá takmer vždy nahradiť polymorfizmom - ale to je totálny nonsens.

Takovou hovadinu, jsem nikdy nenapsal. Switch je urcitě lepší jako horda ifů. Tvrdil jsem jenom, že v OOP je lepší použít polymorfizmus místo switche (pokud to jde), kvůli čitelnosti kódu. Nic víc...

Takto to dáva zmysel a o tomto sa nikto neháda. Ale keď v kontexte if..else vs switch..case odpovieš na "Ak niekto zavrhuje switch, tak potom nie je programátor.", že spíš opak je pravdou, tak z toho priamo vyplýva, že by si namiesto switch..case použil polymorfizmus alebo if..else alebo niečo iné. A to už zmysel nedávalo.

Zpět do poradny Odpovědět na původní otázku Nahoru