Otóż co jest za zmienna $result? Jeśli to id połączenia (resource) to musisz dodać warunek sprawdzający czy doszło do połączenia.
Dlaczego dublujesz zmienną $kat, a potem sprawdzasz czy jest pusta [empty($kat)]? Jakiego typu jest zmienna $kat? Jeśli integer to inny warunek musisz zastosować niżby to był typ string. Dla przykładu:
Integer:
$kat = isset($_GET['kat']) ? (int)$_GET['gat'] : 0;
// i dalej
if ($kat) {...
// lub jeśli istnieje $kat == 0
if (is_numeric($kat)) {...
String:
$kat = isset($_GET['kat']) ? trim($_GET['gat']) : '';
//i dalej
if ($kat) {...
Odpada wtedy kolejne sprawdzanie zmiennej $kat i do powyższego kodu dopiszesz tylko:
} else {
// jakiś kod
}
Tak samo postępujesz ze zmiennymi $_GET[‘count’] i $_GET[‘offset’], czyli:
A co się stanie jeśli zmienna $pages będzie miała wartość zero [ceil($r[0]/$count) ]? Przed pętlą FOR daj warunek sprawdzający:
if ($pages) {
for($i=0;$i<$pages;$i++)
{
...
Dalej trudno mi to przeanalizować, bo nie widzę struktury tabel w bazie. Może coś źle próbujesz wyciągnąć? Powyższe błędy to pierwsze co mi się rzuciło na oczy :).
@Tajgeer. Tak. Tu jest mnóstwo zapytań, ale tez nie widzimy struktury tabel (domyślam się tylko) i nie wiemy, czy w tym przypadku jest to dopuszczalne. Ale niepewna jest zmienna ‘$row[0]’. Ciągle te same tabele i ciągle ta sama zmienna, a potem jeszcze jedne zapytanie przy zm. ‘$link2’ i kolejna pętla. To musi zarżnąć serwer ;]. Wydaje się, że to jednym zapytaniem idzie zrobić, ale jak wspomniałem, nie znamy struktury tabel… .
PS Mam wątpliwość. Po co wyświetlać kategorię, jak i tak nie ma podkategorii i/lub obrazków? Jednym zapytaniem można utworzyć takie menu nawigacyjne. Poza tym zmienna $_GET[‘kat’] u Ciebie odwołuje się do głównej kategorii, a powinna do podkategorii :). [EDIT] Pierwsza część kodu jest poniżej. Przynajmniej ta część powinna pracować szybciej i mniej obciążać bazę. Druga wymaga dopracowania, a i przydałoby się wyświetlić nazwę kategorii/podkategorii i usunąć tagi w tytułach obrazków ;). Pisałem na szybko, więc kod wyszedł jaki wyszedł. Ja pewnie zrobiłbym inaczej, ale starałem się wykorzystać maksymalnie Twój sposób ;). Najlepiej by było abyś nazwy pól w tabelach MySQL pozmieniał (np. we wszystkich trzech masz id):
<?php
require_once('connect.php');
$kat = isset($_GET['kat']) ? (int)$_GET['kat'] : 0;
if (!$kat)
{
$sql = 'SELECT k.id AS catid, k.kategoria AS catname, p.id AS subid, p.nazwa AS subname
FROM foty_kat k, foty_podkat p, foty f
WHERE k.id=p.idkat AND p.id=f.kat';
if ($link = mysql_unbuffered_query($sql, $result))
{
while($row[] = mysql_fetch_assoc($link));
if ($row)
{
array_pop($row);
foreach ($row as $k => $v)
{
$catlinks[$v['catid']][$v['subid']] = ''.$v['subname'].'';
$output[$v['catid']] = array(
'catname' => $v['catname'],
'catlinks' => $catlinks[$v['catid']]
);
}
unset($catlinks, $k, $v, $row);
if ($output)
{
foreach ($output as $k => $v)
{
$menu_kat .= "\t"
.''.$v['catname'].''."\n\t"
.''.join(''."\n\t".'', $v['catlinks']).''."\n";
}
}
}
}
echo $menu_kat ? '' : 'Brak galerii!';
}
else
{
// Pozostały kod, który wydaje się w miarę ok, ale wymaga przemyślenia i lekkiej modyfikacji.
}
mysql_close();
?>[/code]