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
Koumak: čo sa ti na tomto kóde nezdá?
Majkl578
Profil
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
Majkl578: no, ty si tomu pomohol...
Majkl578
Profil
tiso
muzes byt konkretnejsi?
tiso
Profil
Majkl578: vyskúšaj si ten kód, zistíš sám
Majkl578
Profil
tiso
dobra, zapomel jsem prejmenovat jednu promennou.... jiny problem nevidim
Alphard
Profil
Majkl578:
if ($isInDb) {
break;
}
Co tohle? Já bych to udělal obráceně.
tiso
Profil
Majkl578: otočil si vyhodnocovaciu podmienku prerušenia cyklu
Majkl578
Profil
Alphard
tiso
diky, uteklo mi == 0 v originale ;)
tiso
Profil
Majkl578: ďalej:
- zbytočné vytváranie premenných $url a $id
- miešanie typov (spoliehanie sa na pretypovanie)
Majkl578
Profil
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
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
tiso
1. fakt, nejak mi to prislo prehlednejsi takto
2. v tom je problem? muzes tam tedy dat $isInDb === 0
tiso
Profil
Majkl578: 2. v om prípade máš zlý názov premennej $isInDb :-)
Majkl578
Profil
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
Majkl578: len toľko, že ten skript nerobí to čo mal robiť...
fuckin
Profil
aspon si tam uprav hned prvni radek na :
$name= (isset($_GET['url'] ? $_GET['url'] : null);
joe
Profil
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: