Forum Webscript.Ru
Программирование => PHP => Тема начата: scasic от 09 Июля 2002, 14:48:34
-
критикуйте пожалуйста
Код:
// Переменные
$links_number=3; // коли-во ссылок на странице
$lines_number=7; // кол-во строк на странице
// Проверяем данные от броузера
if (!isset($a)){$a=0;} // где $a - идентификатор для LIMIT
// Подключение к базе данных
$db=mysql_connect ("localhost","user","user");
if (!$db){
echo "Ошибка при соединении с базой данных";
}
mysql_select_db("base");
// получаем количество строк
$query = "SELECT * FROM table WHERE zapros=\'$do\'";
$result = MYSQL_QUERY($query);
$number = MYSQL_NUMROWS($result);
//проверка наличия идентификатора страницы
if (!isset($page)){$page="0";}
// получаем общее кол-во страниц для вывода
$number_of_pages=$number/($links_number*$lines_number);
$number_of_pages1=(int)$number_of_pages;
if ($number_of_pages>$number_of_pages1){$number_of_pages=$number_of_pages1+1;}
// получаем количество общее кол-во ссылок
$number_of_links=$number/$lines_number;
$number_of_links1=(int)$number_of_links;
if ($number_of_links>$number_of_links1){$number_of_links=$number_of_links1+1;}
// проверяем сколько ссылок на последней странице
if ($page==($number_of_pages-1)){
$cycle=($links_number-(($number_of_pages*$links_number)-$number_of_links));
}
else {$cycle=$links_number;}
$z=$page*$links_number*$lines_number;
// создаем навигационное меню с сылками
for ($i=1; $i <= $cycle; $i++){
if ($i==$pn){$link = $link."[".($z+1)."..".($z+$lines_number)."] ";}
else {$link = $link."href=\\"?do=$do&tab=$tab&sort=$sort&a=$z&page=$page&pn=$i\\">[".($z+1)."..".($z+$lines_number)."] ";}
// ссылки "следующие" справа и "предыдущие" слева
if ($i==$cycle){
if ($page=="0"){$lgo="";}
else {$lpage=$page-1;
$lz=$z-($lines_number*$links_number);
$lgo="href=\\"?do=$do&tab=$tab&sort=$sort&a=$lz&page=$lpage&pn=$links_number\\"><< ";}
if ($page==($number_of_pages-1)){$rgo="";}
else {$rpage=$page+1;
$rz=$z+$lines_number;
$rgo=">>";}
$link=$lgo.$link.$rgo;}
$z=$z+$lines_number;
}
// извлекаем информацию из базы данных
$query = "SELECT * FROM table WHERE zapros=\'$do\' ORDER BY $sort LIMIT $a,$lines_number";
-
Чё велик изобретать. Есть готовые решения:
http://detail.phpclub.net/technique/01-04-28/
Хотя не везде эта беда - лучшее решение.
Т.к., например, у меня в нек. скриптах нет возможности подсчитать общее количество записей.
-
А у меня вот так:
function multipage($num_rows_per_order, $pagesize, $num_articles, $pageurl, $page) {
echo "";
if ( $num_rows_per_order > $pagesize ) {
$total_pages = ceil($num_rows_per_order / $pagesize); // How many pages are we dealing with here ??
echo "$num_rows_per_order "._STORIESFOUND." ($total_pages "._PAGES.", $num_articles "._SHOWN.")
";
echo "[";
if ($num_rows_per_order >= $pagesize)
{
$num_rows_per_order++;
$pages = $num_rows_per_order / $pagesize;
$pages = ceil($pages);
if ($page == $pages) { $to = $pages; }
elseif ($page == $pages-1) { $to = $page+1; }
elseif ($page == $pages-2) { $to = $page+2; }
else { $to = $page+3; }
if ($page == 1 || $page == 2 || $page == 3) { $from = 1; }
else { $from = $page-3;}
$prev_page = $page - 1;
if ( $prev_page > 0 ) {
$fwd_back .= " 1 | ... | << |";
} else {
}
for ($i = $from; $i <= $to; $i++)
{
if($i != $page) { $fwd_back .= " $i |"; }
else { $fwd_back .= " $i |"; }
}
$next_page = $page + 1;
if ( $next_page <= $total_pages ) {
$fwd_back .= " >> | ... | $pages ";
} else {
}
echo "$fwd_back";
}
echo " ]";
} else {
echo "$num_rows_per_order "._STORIESFOUND."";
}
echo "";
}
Смотреть тут http://ru-nuke.sourceforge.net/ внизу и через поиск http://ru-nuke.sourceforge.net/modules.php?name=Search
Функция используется везде одна.
-
Гаррилл, я у тя глюк нашел
правь
5 горячих тем на форуме
» Апдейты
смотров: 1 ответов: 0, последним ответил Pups (Понедельник, 15 Июля 2002 7:51:36)
-
Да оба кода неплохи, хотя у меня совсем по другому сделано, буду дома - кину код ... Там правда 2 обращения к базе, одно для кол-во второе с лимитом, что-бы не ораничивать все через for ...
-
вот это
$number_of_pages=$number/($links_number*$lines_number);
$number_of_pages1=(int)$number_of_pages;
if ($number_of_pages> $number_of_pages1){$number_of_pages=$number_of_pages1+1;}
заменяется на
$number_of_pages=ceil($number/($links_number*$lines_number));
И в остальных так же.
Для того, чтобы понять дальше, надо понимать, чем ссылки на странице отличаются от строк на странице. А я не понимаю, что это вообще такое.
Да и вообще - что проверять-то? Если работает - то и пусть работает. Если не работает - задавать надо конкретный вопрос.
непонятно, зачем дублировать информация. $a можно вычислить из $page.
нормальные имена переменных соседствуют с какими-то а, з.
Неохота разбираться.
Как-то у вас, ребята, уж больно наворочено...
я передаю сразу номер записи, с котрой начинать, безо всяких страниц. И все.
собственно, вся постраничка укладывается в несколько строк
$pages=ceil($tolal_rows/$rows_per_page);
for ($i=1; $i<=$pages; $i++) {
$from=$i*$rows-($rows-1);
$to=$i*$rows;
if ($to > $total_rows) $to = $total_rows;
if ($limit==$from) echo $from,"-",$to;
else echo \'\',$from,"-",$to,\'\';
echo " ";
}
Если выводить не номера записей, а номера страиц, то получится еще проще
$pages=ceil($tolal_rows/$rows_per_page);
for ($i=1; $i<=$pages; $i++) {
$from=$i*$rows-($rows-1);
if ($limit==$from) echo $i," ";
else echo \'\',$i,\' \';
}
еще только в запросе писать LIMIT $limit-1, $rows_per-page
-
из еще красивостей
Вместо
db=mysql_connect ("localhost","user","user");
if (!$db){
echo "Ошибка при соединении с базой данных";
}
пишется
mysql_connect ("localhost","user","user") or die("Ошибка при соединении с базой данных");
Если не хочешь die, то пиши просто echo. Но убивать скрипт предпочтительней - все равно ничего работать не будет уже.
-
RomikChef весьма и весьма поучительно
thanx
-
2RomikChef
заменяется на
$number_of_pages=ceil($number/($links_number*$lines_number));
правда здорово, выигрыш на лицо (я знал что есть такая функция, но в тех книжках которые имеются на руках про нее ничего не сказано)
Для того, чтобы понять дальше, надо понимать, чем ссылки на странице отличаются от строк на странице.
Здесь я имел ввиду следующее:
$links_number=3; // кол-во ссылок в навигационном меню
$lines_number=7; // кол-во строк полученных из базы и отображенных на странице
надеюсь теперь этот момент стал более прозрачным
Да и вообще - что проверять-то?
Проверять безграмотность и поучать чтобы больше неповадно было всякие навароченные глупости писать :) вот видишь сколько полезного и рационального ты уже внес в этот код
-
scasic
Это не глюк.