Autor | Zpráva | ||
---|---|---|---|
Koumak Profil * |
Ahoj, mam takovej kod od kamose, ktery vygeneruje v pripade duplicity unikatni jmeno.
Chtel bych vedet, jestli by to neslo napsat jeste jinak, vic smysluplneji. Dekuji $name = $_GET['url']; $i = 0; while(true) { if(DIBI::query('SELECT url FROM navigace WHERE url = %s AND id != %i', $name, $_GET[id])->rowCount() == 0) { break; } $name = $_GET['url']."-".++$i; } Moderátor Chamurappi: Vkládej prosím kód mezi značky [pre] a [/pre] (stačí kliknout na ) a nezakládej duplicitní vlákna!
|
||
tiso Profil |
#2 · Zasláno: 15. 7. 2009, 21:58:12
Koumak: čo sa ti na tomto kóde nezdá?
|
||
Majkl578 Profil |
#3 · Zasláno: 15. 7. 2009, 22:30:04 · Upravil/a: Majkl578
Koumak
treba takto by to slo: if (empty($_GET['url'])) { throw new LogicException('No url provided in parameter <strong>url</strong>'); } if (empty($_GET['id']) || !preg_match('~^[0-9]+$~', $_GET['id'])) { throw new LogicException('No id or non-numeric value provided in parameter <strong>id</strong>'); } $i = 1; while (true) { $ask = dibi::select('[url]') ->from('[navigace]') ->where('[url] = %s', $_GET['url'] . '-' . $i++) ->and('[id] != %i', $_GET['id']) ->execute(); if ($ask->getRowCount() === 0) { break; } } sorry, spatne to tu formatuje \t |
||
tiso Profil |
#4 · Zasláno: 15. 7. 2009, 22:35:46
Majkl578: no, ty si tomu pomohol...
|
||
Majkl578 Profil |
#5 · Zasláno: 15. 7. 2009, 22:38:24
tiso
muzes byt konkretnejsi? |
||
tiso Profil |
#6 · Zasláno: 15. 7. 2009, 22:49:36
Majkl578: vyskúšaj si ten kód, zistíš sám
|
||
Majkl578 Profil |
#7 · Zasláno: 15. 7. 2009, 22:55:07
tiso
dobra, zapomel jsem prejmenovat jednu promennou.... jiny problem nevidim |
||
Alphard Profil |
#8 · Zasláno: 15. 7. 2009, 22:59:23
Majkl578:
> if ($isInDb) { > break; > } Co tohle? Já bych to udělal obráceně. |
||
tiso Profil |
#9 · Zasláno: 15. 7. 2009, 22:59:29
Majkl578: otočil si vyhodnocovaciu podmienku prerušenia cyklu
|
||
Majkl578 Profil |
#10 · Zasláno: 15. 7. 2009, 23:04:17
Alphard
tiso diky, uteklo mi == 0 v originale ;) |
||
tiso Profil |
#11 · Zasláno: 15. 7. 2009, 23:14:43
Majkl578: ďalej:
- zbytočné vytváranie premenných $url a $id - miešanie typov (spoliehanie sa na pretypovanie) |
||
Majkl578 Profil |
#12 · Zasláno: 15. 7. 2009, 23:21:26
tiso
s temi promennymi souhlasim, slo by to referenci jestli by to neslo napsat jeste jinak, vic smysluplneji v puvodnim kodu neni kontrole typu zminka, nicmene proc to neudelat ze :) |
||
tiso Profil |
#13 · Zasláno: 15. 7. 2009, 23:25:05
Majkl578[#12]:
1. aj referencie sú zbytočné... Načo kopírovať premenné $_GET['url'] a $_GET['id'], keď ich v dibi:select môžeš použiť priamo? 2. myslel som toto: $isInDb |
||
Majkl578 Profil |
#14 · Zasláno: 15. 7. 2009, 23:30:05
tiso
1. fakt, nejak mi to prislo prehlednejsi takto 2. v tom je problem? muzes tam tedy dat $isInDb === 0 |
||
tiso Profil |
#15 · Zasláno: 15. 7. 2009, 23:33:48
Majkl578: 2. v om prípade máš zlý názov premennej $isInDb :-)
|
||
Majkl578 Profil |
#16 · Zasláno: 16. 7. 2009, 19:53:25
tiso
trosku jsem to prepracoval, viz [#3], pridal jsem kontrolu cisla pro klic id, zmenil jsem podminku a nazev promenne, odstranil zbytecne vytvarene promenne jeste neco? :) |
||
tiso Profil |
#17 · Zasláno: 16. 7. 2009, 20:06:21
Majkl578: len toľko, že ten skript nerobí to čo mal robiť...
|
||
fuckin Profil |
#18 · Zasláno: 16. 7. 2009, 20:11:19
aspon si tam uprav hned prvni radek na :
$name= (isset($_GET['url'] ? $_GET['url'] : null); |
||
joe Profil |
#19 · Zasláno: 16. 7. 2009, 22:50:59 · Upravil/a: joe
Možná bych přemýšlel nad jiným dotazem, třeba
SELECT url FROM navigace WHERE url='...' AND id = (SELECT max(id) FROM navigace) A né cyklus s dotazy na db. |
||
Časová prodleva: 15 let
|
0