U are checking for the number of records for display with the query:
$numresults=@mysql_query("SELECT * FROM br_photography ORDER BY id ASC"); #QUERY RECORDS
$numrows=@mysql_num_rows($numresults);
but displaying
$sql = "SELECT * FROM br_photography WHERE public = 1 ORDER BY id ASC limit $offset,$limit ";
in your page calculations the total no of records to display assumed to be the in $numrows variable but in the real situation it could be less if not all record has the value of the public field is set to 1. So try put the where clause into the first query string also like this:
$numresults=@mysql_query("SELECT * FROM br_photography WHERE public = 1 ORDER BY id ASC"); #QUERY RECORDS
$numrows=@mysql_num_rows($numresults);