Hallo Holgi!
Du willst doch pro Seite ein Bild anzeigen, oder? Und auf jeder Seite soll ein "zurück"- und ein "weiter"-Button vorhanden sein, richtig?
$abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id desc", $conn);
Hinweis: Eine SQL-Query endet immer mit einem Semikolon.
BTW: kein "SELECT * ...", siehe hierzu:
dclp-FAQ: 16.14. Warum soll ich nicht SELECT * schreiben?
http://www.dclp-faq.de/q/q-sql-select.html
Vorschlag:
Zähle alle Datensätze mit einer ersten SQL-Abfrage und speichere die Anzahl in eine Variable.
In einer zweiten SQL-Abfrage begrenzt du das Ergebnis mit "LIMIT ?, 1". Wobei "?" die aktuell anzuzeigende Datensatz ist.
Deine SQL-Abfrage sortiert deine Tabelle nach der ID und mit der von mir o.g. geschilderten Abfolge, kannst du einen Datensatz nach dem anderen bzw. eine ID nach der anderen auslesen bzw. ausgeben.
Ob ein "zurück"- oder "weiter"-Button möglich ist, kannst du anhand der aktuellen Position und der Gesamtanzahl der Datensätze ermitteln.
Schau dir die folgende Seite an und abstriehiere deine Problem von dem dort angegebenen Beispiel. Somit wäre dann dein $limit immer 1.
dclp-FAQ: 17.10. Ich habe eine Tabelle mit n Einträgen und möchte auf jeder Seite m davon anzeigen
http://www.dclp-faq.de/q/q-mysql-seitenweise.html