Autor | Zpráva | ||
---|---|---|---|
Školník Profil |
#1 · Zasláno: 30. 3. 2006, 23:34:35
Stalo se vám někdy, že switch přeskočil několik podmínek? Na jedné stránce mam aspoň 4 switch podmínky a vždycky, kdy že case 08: prikaz a case 09: prikaz. Vzdycky to preskočí osmičku a devítku, ve všech případech. 10 už zase funguje v pohodě...:-?
|
||
WertriK Profil * |
#2 · Zasláno: 30. 3. 2006, 23:57:06
Samo od sebe by to php nepreskocilo, chyba bude nekde v scriptu ...
|
||
Peca Profil |
#3 · Zasláno: 31. 3. 2006, 00:00:22
Hoď sem kus zdrojáku, podíváme se na to... Nechybí tam třeba někde break?
|
||
Školník Profil |
#4 · Zasláno: 31. 3. 2006, 00:05:27 · Upravil/a: Školník
Je to trochu delší... [menu1_id i 2 i 3 i 4 nabývá správných hodnot] DÍKY
|
||
jozob Profil |
#5 · Zasláno: 31. 3. 2006, 00:22:29
Tak to je čistá šialenosť, ani sa mi to nechce čítať. :-)
Malá poznámka / otázočka pre odborníkov: Ako je to s číselnými konštantami v PHP? Je to rovnaké ako v C? Pretože v tom prípade by bol zápis 01, 02, 03 atď... chápaný ako číselná konštanta v osmičkovej sústave. |
||
Školník Profil |
#6 · Zasláno: 31. 3. 2006, 00:24:29
jozob O šílenosti mi povídej, já to musel napsat..:-) O zápisu konstant nevím. Je to takové moje malé kousek řešení drobečkové navigace...
|
||
jozob Profil |
#7 · Zasláno: 31. 3. 2006, 00:31:24 · Upravil/a: jozob
"O zápisu konstant nevím."
Aby som to upresnil hovorím o číselných konštantách, nie o symbolických konštantách (symbolické sú tie klasické, ktoré poznáme). Číselné konštanty sú všetky čísla: napríklad zápis 12 je konštanta a má hodnotu 12 v desiatkovej sústave, zápis 012 je konštanta a má hodnotu 12 v osmičkovej sústave, zápis 0x12 je konštanta a má hodnotu 12 v hexadecimálnej sústave. Toto mi je známe z Céčka, na ktoré sa PHP celkom podobá, preto by mohli nastávať problémy ak sa v PHP číselné konštanty interpretujú rovnako ako v Céčku. Ale práve som to skúšal a podobnosť zápisu číselných konštánt s Céčkom vylučujem. To len tak OT, už to nemusíme riešiť, v tom problém nie je. |
||
Školník Profil |
#8 · Zasláno: 31. 3. 2006, 00:33:47
jozob Doufám, že jsem nikde nepřehlédl nějakou maličkost, to by mě mrzelo. Díky za osvětu co se týče interpretace v céčku, o povědomí víc.. Připadám si, jako bych seděl v létě u ohně a čekal. Jen nevím na co.:-)
|
||
Peca Profil |
#9 · Zasláno: 31. 3. 2006, 00:38:52
Zkus dát ty hodnoty 01,02,... (nebo aspoň 08, 09) do apostrofů, třeba to pomůže...
|
||
Školník Profil |
#10 · Zasláno: 31. 3. 2006, 00:40:39
Peca Bohužel nepomohlo...
|
||
Školník Profil |
#11 · Zasláno: 31. 3. 2006, 00:42:01
Ať dám podmínku 08 nebo 09 do jakýhokoli switche na stránce, tak to nejde.
|
||
jozob Profil |
#12 · Zasláno: 31. 3. 2006, 00:44:47
Školník
Skús tam dať nejaký výraz. Napríklad 2*4 |
||
Školník Profil |
#13 · Zasláno: 31. 3. 2006, 00:47:32
Dopytle.:-) Díky kluci, fungujou (už) jak apostrofy , tak výraz... Paráda..:-) A ví někdo proč tomu tak bylo? DÍKy
|
||
jozob Profil |
#14 · Zasláno: 31. 3. 2006, 00:53:22
Školník
Skús to ešte zmeniť z 08 -> 8, či to pôjde. |
||
jozob Profil |
#15 · Zasláno: 31. 3. 2006, 00:53:58
Takisto to skús hodiť do if podmienky. Možno nájdeš bug. :-)
|
||
Školník Profil |
#16 · Zasláno: 31. 3. 2006, 00:58:10
jozob 8 nefunguje, protože v proměnný mam 08, dvojčíslí. Bug..;-)
|
||
jozob Profil |
#17 · Zasláno: 31. 3. 2006, 01:03:12
Školník
Premenná je string? |
||
Školník Profil |
#18 · Zasláno: 31. 3. 2006, 01:05:34
Řekl bych že integer.
|
||
jozob Profil |
#19 · Zasláno: 31. 3. 2006, 01:10:32
Školník
V akej forme sa to zapisuje do premennej, niečo takéto?: $a=08;? |
||
Školník Profil |
#20 · Zasláno: 31. 3. 2006, 01:12:17
$menu4_id = SubStr($_GET['velkapromenna'],6,2); a $velkapromenna vznika v .htaccess jako index.php?velkapromenna=01010308 -> z toho právě 08.
|
||
jozob Profil |
#21 · Zasláno: 31. 3. 2006, 01:18:00
Školník
Skús si tento kód: $a=08; echo $a; Vypíše 0. |
||
Školník Profil |
#22 · Zasláno: 31. 3. 2006, 01:20:03
A $a='08'; echo $a; vypíše 08..:-) $a='07'; echo $a; vypíše 7. Dívám se na LOST, nemůžu z toho bláznit?:-) Je pozdě...
|
||
souki Profil |
#23 · Zasláno: 31. 3. 2006, 15:08:25
co to tu řešíte?
když je to v apostrovech, považuje se proměnná za řetězec.... možná by úplně stačilo do podmínky switche dát přetypování na integer a bylo by vystaráno... když je předčíslem 0, automaticky se považuje za šetnáctkové číslo.... když tedy v $id předáš 8 tak to ale není rovno 08 pokud přímo neřekneš jakého je typu... v tomhle případě by ale mělo stačit pracovat s $id jako řetezcem => takže case do uvozovek a případně přetypovat switch podmínku na string.... |
||
mila Profil |
#24 · Zasláno: 31. 3. 2006, 15:55:33
Zapřemýšlel bych nad celým řešením.
Asi bych si ty texty uložil do pole. Něco jako
Dále bych nedělal odkaz ve tvaru neco=08121368, ale raději neco=08-12-13-68, nebo ještě lépe /08/12/13/68. Pak bych místo: $menu4_id = SubStr($_GET['velkapromenna'],6,2); //(asi tam budou 4 takové řádky) a toho hrozného swich raději prošel $_GET['velkapromenna'] v cyklu: 1. $polozka = $menu; 2. $vyber = další číslo na řadě, pokud je - jinak skonči 4. $polozka = $polozka[$vyber] 3. Vypíše $polozka[0] 5. Zpět na 2 |
||
jozob Profil |
#25 · Zasláno: 31. 3. 2006, 16:50:44
souki
"když je předčíslem 0, automaticky se považuje za šetnáctkové číslo" S tým nemôžem súhlasiť, ak sa pred číslom uvedie 0, číselná konštanta je v osmičkovej sústave, nie v šestnástkovej. Pre zápis číselných konštánt predstavujúcich čísla v šestnástkovej sústave sa pred číslo zapisuje 0x. "když je to v apostrovech, považuje se proměnná za řetězec..." PHP automaticky pretypuje číselné konštanty, reťazce a premenné. Tam problém vôbec neviazne. Toľko k pripomienkám. A konečne som na to prišiel! (ono to je úplne jednoduché, stačí mať len minimálnu matematickú predstavivosť, ktorú som o toľkej hodine v noci nemal) Takže. Povedali sme si niečo o číselných konštantách. Každé samostatne zapísané číslo v zdrojovom kóde predstavuje číselnú konštantu. Návratová hodnota tejto konštanty nemusí byť vždy v desiatkovej sústave, ako by sme mohli predpokladať. Už som načŕtol podobnosť PHP s "Cé" jazykom. V tomto jazyku používame 3 typy číselných konštánt: 1.) číselné konštanty vyjadrujúce desiatkovú sústavu - tie sú zapísané vo formáte, ktorý je identický s ich čieslnou hodnotou. Príklad: 3, 5, 134 - všetky majú rovnaký zápis ako aj hodnotu v desiatkovej sústave. 2.) číselné konštanty vyjadrujúce osmičkovú sústavu - tie sú zapísané s prefixom 0 (slovom - "nula"). Príklad: 03 - predstavuje číslo 3, 05 - predstavuje číslo 5, 0134 - predstavuje číslo 134... Všetko v osmičkovej sústave (pre vyjadrenie v desiatkovej sústave je samozrejme potrebný prepočet). 3.) číselné konštanty vyjadrujúce šestnástkovú sústavu - tie sú zapísané s prefixom 0x. Príklad: 0x154, 0x54AB41, 0xACF21... No tie nás momentálne nezaujímajú... Poďme späť k číselným konštantám predstavujúcim čísla v osmičkovej sústave. Tam viazne Školníkov problém. Zapisuje číselné konštanty s prefixom 0, čo znamená, že všetko za nulou sa považuje za číslo vyjadrené v osmičkovej sústave. A prečo problém pri číslach 08 a 09? Ako vieme, na zápis čísla používame číslice (:-)). V desiatkovej sústave používame číslice 0 - 9, v dvojkovej sústave číslice 0 a 1, v šestnástkovej sústave číslice 0 - 9 a písmena A - F... V osmičkovej sústave používame spolu osem číslic a to 0 - 7. Dáme si malú ukážku postupnosti čísiel v desiatkovej sústave: prvá je 0, potom 1, 2, 3, 4, 5, 6, 7, 8, 9, a čo teraz, keď došli číslice? No predsa 10, ako každý vieme. Teraz to isté, ale osmičkovej sústave: prvá je 0, potom 1, 2, 3, 4, 5, 6, 7, a čo teraz? No predsa 10. A ďalej 11, 12, 13, 14, 15, 16, 17, a čo teraz? No predsa 20. Atď... Teraz sa vráťme k problému. Problém bol s číselnými konštantami 08 a 09. V osmičkovej sústave takéto čísla jednoducho neexistujú a tieto číselné konštanty v PHP vracajú 0. Takže tam nastal problém. Je to to isté, ako keby ste zapísal 1AF1 - používate desiatkovú sústavu, ale A a F sa v desiatkovej sústave nevyskytujú, našli by sme ich napríklad v šestnástkovej sústave. Toľko na okraj :-) Prepáčte mi za článok, ale nedalo mi to :-). Možno si niektorí poviete, že je to samozrejmé a jozob to zbytočne takto opisuje. Ale nie každý tomu pochopí, takže radšej som to rozpísal, aby sa poučili aj začiatočníci. A ak nájdete nejaké nepresnosti, opravte ma. Ďakujem za pozornosť. ;-) |
||
souki Profil |
#26 · Zasláno: 31. 3. 2006, 16:53:26
ommouvám se.... spletl jsem se... je to osmičková..... ten dlouhý text sem nečetl ale konečně to dává smysl.... protože co se stane když se v osmičkové na píše 8 nebo 9 a může s epoužívat jen 01234567? stane se z toho 10 (nebo tak nějak)
|
||
jozob Profil |
#27 · Zasláno: 31. 3. 2006, 16:55:52
souki
"stane se z toho 10 (nebo tak nějak)" Nič sa nestane :-). Osobne si myslím, že by mohol parser fungovať tak, aby vyhodil chybu. No nie je to tak a číslo jednoducho nadobudne hodnotu 0. |
||
souki Profil |
#28 · Zasláno: 31. 3. 2006, 16:59:01
Nič sa nestane
určitě? snad se proměnná přetypuje podle toho co se s ní počítá a ta nula tam fungule jako "Int2osmičková" (ted nevim jak to je přesně=) ) asi tu plácám úplný nesmysli.. je to docela možný =) Vycházim jen ze zkušeností =) Tak se kdyžtak omlouvám =( |
||
jozob Profil |
#29 · Zasláno: 31. 3. 2006, 17:02:05
souki
No ono by sa nemalo nič stať, pretože také číslice v osmičkovej sústave neexistujú, takže je to blbosť. Malo by to vyhodiť chybu (podľa mňa). Ale pokiaľ hovoríme o PHP, tak áno - stane sa niečo - číselná konštanta vráti hodnotu 0. |
||
souki Profil |
#30 · Zasláno: 31. 3. 2006, 17:04:51
aha.... tak děkuju za objasnění.....
u data jde taky zadat 40.2. a projde to a ještě se to převede... string jde taky vydělit dvěma.... tak jsem předpokládal že je liberálnější |
||
Téma pokračuje na další straně.
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0