Egyforma értékek tárolásának gátlása az adatbázisban?
PHP-val és MySQL-lal gyakorlásképpen gondoltam csinálok egy kis tartalomkezelő rendszert. Eddig minden jól is ment, de most elakadtam...
Azt szeretném megvalósítani, hogy minden oldalhoz tartozzon egy "slug", ami ugye az url-ben van (pl. xy.hu/valami -> itt a slug a "valami"). Viszont ha esetleg több oldalnak is a valamit adják meg, akkor legyen valami-2, valami-3 és így tovább
Ehhez részben én írtam, részben pedig stackoverflow-ról szedtem kódot: [link]
Szóval így néz ki a funkció, ami megnézi hogy az adott slug már használatban van-e:
function slug_exist($s) {
$checkslug = $db->prepare('SELECT COUNT(*) FROM content WHERE slug = ?');
$checkslug->execute(array($s));
$slugnum = (int) $checkslug->fetchColumn();
if($slugnum !== 0) {
return false;
}
}
Így pedig a while loop, ami addig keres amíg nem talál egy szabad slugot:
$i = 1;
$baseSlug = $slug;
while(slug_exist($slug)) {
$slug = $baseSlug."-".$i++;
}
Valami mégsem jó, a while-nál megakad minden, pedig a phpcodechecker.com nem ír hibát. Mikor kiszedtem a funkción belülről a kódot és megnéztem hogy mennyit ad vissza a fetchColumn(), ott 1 volt, aminek jónak is kéne lenni. Ha valakinek van ötlete, hogy mi lehet a baj, megköszönném :)
Nem kéne egy return true is a függvényedbe véletlenül? :)
Vagy:
return 0 < $slugnum;
if($slugnum !== 0) {
return false;
Olvasd ezt össze a függvény nevével és rájöhetsz.
#2: basszus, a sok variációban véletlen . De még mindig nem jó, így se:
function slug_exist($s) {
$checkslug = $db->prepare('SELECT COUNT(*) FROM nsh_content WHERE slug = ?');
$checkslug->execute(array($s));
$slugnum = (int) $checkslug->fetchColumn();
if($slugnum !== 0) {
return true;
} else {
return false;
}
}
Végül sikerült :) A function-on belülről lemaradt a global $db;
Köszönöm a segítséget :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!