Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

09.08.2009, 15:47
|
|
Участник форума
Регистрация: 24.02.2006
Сообщений: 206
Провел на форуме: 2735257
Репутация:
103
|
|
PHP код:
<?php
class Pages
{
private $table; // таблица из которой выводить
private $page; // страница на которой мы сейчас
private $lines; // сколько выводить записей
private $where; // условие вывода из базы
private $order_by; // группировка вывода из базы
public $prefix_p; // префикс страницы
public function select_page($table, $page, $lines, $where, $order_by)
{
if(trim($where)) {
$this->where = " WHERE ".$where;
} else {
$this->where = "";
}
if(trim($order_by)) {
$this->order_by = " ORDER BY ".$order_by;
} else {
$this->order_by = "";
}
$this->page = $page - 1; // чтобы страницы выводились с 0, а считались с 1
$this->lines = $lines;
$this->table = $table;
$begin = $this->page * $this->lines;
$sql = "SELECT * FROM `".$this->table."`".$this->where.$this->order_by.
" LIMIT ".$begin.", ".$this->lines;
$result = mysql_query($sql);
$return = array();
while ($obj = mysql_fetch_object($result))
array_push($return, $obj);
return $return;
}
public function link_page()
{
$sql = "SELECT COUNT(*) FROM `".$this->table."`".$this->where.$this->order_by;
$value = mysql_query($sql);
$value = mysql_fetch_row($value);
$alllines = $value[0];
$str = ceil($alllines / $this->lines); // общее число страниц
if($str <= 6) {
for ($i = 0; $i < $str; $i++) {
if($i == $this->page) {
$return .= "[".($i + 1)."]";
} else {
$return .= "<a href='".$this->prefix_p."=".($i + 1)."'>[".($i + 1)."]</a>";
}
}
return $return;
} else {
$str = $str - 3;
for ($i = 0; $i < 3; $i++) {
if($i == $this->page) {
$return .= "[".($i + 1)."]";
} else {
$return .= "<a href='".$this->prefix_p."=".($i + 1)."'>[".($i + 1)."]</a>";
}
}
$return .= "...";
for ($a = 0; $a < 3; $a++) {
if($str == $this->page) {
$return .= "[".($str + 1)."]";
} else {
$return .= "<a href='".$this->prefix_p."=".($str + 1)."'>[".($str + 1)."]</a>";
}
$str++;
}
return $return;
}
}
}
?>
Выводиться [1][2][3]...[8][9][10], как сделать чтобы при переходе на 2, 3 и т.д страницы выводились [2][3][4]...[8][9][10], [3][4][5]...[8][9][10] и т.д
Работает так
PHP код:
class->select_page($table,$p,3,$where,$order_by);
$p это страница на который мы сейчас exapmle.php?p=1 или exapmle.php?p=3...
3 - сколько записей на страницу
Последний раз редактировалось KaMiKadZe; 09.08.2009 в 15:50..
|
|
|

09.08.2009, 16:04
|
|
Участник форума
Регистрация: 24.02.2006
Сообщений: 206
Провел на форуме: 2735257
Репутация:
103
|
|
Сообщение от FireFenix
Использовать в SQL запросе LIMIT
Код:
SELECT * FROM table LIMIT 10,100
LIMIT 10, 100 - выбрать 100 записей, начиная с 10 записи
Уже есть
PHP код:
$sql = "SELECT * FROM `".$this->table."`".$this->where.$this->order_by.
" LIMIT ".$begin.", ".$this->lines;
Проблема не в выводе записей с ними все отлично, проблема как сделать в навигации чтобы по когда переходишь по страницам они увеличивались...
сейчас по страницам как не ходи будет
[1][2][3]...[8][9][10]
а надо чтобы когда например на страницу [3] жмешь стало
[3][4][5]...[8][9][10]
|
|
|

09.08.2009, 16:26
|
|
Участник форума
Регистрация: 24.02.2006
Сообщений: 206
Провел на форуме: 2735257
Репутация:
103
|
|
Да Ё
Проблема не в выводе записей с ними все отлично, проблема как сделать в навигации чтобы по когда переходишь по страницам они увеличивались...
сейчас по страницам как не ходи будет
[1][2][3]...[8][9][10]
а надо чтобы когда например на страницу [3] жмешь стало
[3][4][5]...[8][9][10]
Еще раз! Мне нужно сделать не вывод он уже есть!
Мне нужна сделать так чтобы навигация выводилась как я написал в скрипте это функция public function link_page()...
Я не могу придумать как так сделать!
Можно сказать что вся суть в этом цикле
PHP код:
for ($i = 0; $i < 3; $i++) {
if($i == $this->page) {
$return .= "[".($i + 1)."]";
} else {
$return .= "<a href='".$this->prefix_p."=".($i + 1)."'>[".($i + 1)."]</a>";
}
}
У меня было несколько попыток что-то сделать, но почему-то не получается у меня это придумать!
Вот одна из попыток
PHP код:
for ($i = $this->page; $i < $this->page+3; $i++) {
if($i == $this->page) {
$return .= "[".($i + 1)."]";
} else {
$return .= "<a href='".$this->prefix_p."=".($i + 1)."'>[".($i + 1)."]</a>";
}
}
Делает бесконечное число страниц =(
Хоть и отражает частично суть как я хочу!
Последний раз редактировалось KaMiKadZe; 09.08.2009 в 16:33..
|
|
|

10.08.2009, 03:41
|
|
Участник форума
Регистрация: 24.02.2006
Сообщений: 206
Провел на форуме: 2735257
Репутация:
103
|
|
FireFenix,
спасибо, но моим нужды это не удовлетворились
Пришлось скурить трубку мира и создать то что сам не понимаю, но зато работает как я хотел
Вот пример того как кодить лучше не надо
PHP код:
public function link_page()
{
$sql = "SELECT COUNT(*) FROM `".$this->table."`".$this->where.$this->order_by;
$value = mysql_query($sql);
$value = mysql_fetch_row($value);
$alllines = $value[0];
$str = ceil($alllines / $this->lines); // общее число страниц
$return .= "<div class='navigation'>";
if($this->page != 0) {
$return .= "<a href='".$this->prefix_p."=".($this->page)."'><</a>";
} else {
$return .= "<span><</span>";
}
$return .= " ";
if($this->page + 1 != 1) {
$return .= "<a href='".$this->prefix_p."=1'>1</a>";
} else {
$return .= "<span>1</span>";
}
$return .= " ";
if($this->page + 1 == $str && $this->page + 1 != 1 && $str < 2) {
$return .= "<a href='".$this->prefix_p."=".($this->page - 2)."'>".($this->page -
2)."</a>";
$return .= "<a href='".$this->prefix_p."=".($this->page - 1)."'>".($this->page -
1)."</a>";
}
if($this->page > 1) {
if($str > 1 && $this->page >= 4) {
if($str >= 5 && ($this->page == $str - 1 or $this->page == $str - 2)) {
if($this->page == $str - 2 && $str != 5) {
} else {
$return .= "<a href='".$this->prefix_p."=".($this->page - 2)."'>".($this->page -
2)."</a>";
}
if($this->page == 4 && $str == 6) {
} else {
$return .= "<a href='".$this->prefix_p."=".($this->page - 1)."'>".($this->page -
1)."</a>";
}
}
}
if(($str > 4 && $str < 8 && $this->page == $str - 2) or ($str == 4 && $this->
page == $str - 1)) {
$return .= "<a href='".$this->prefix_p."=".($this->page - 1)."'>".($this->page -
1)."</a>";
}
$return .= "<a href='".$this->prefix_p."=".($this->page)."'>".($this->page).
"</a>";
}
if($this->page + 1 != 1 && $this->page < 2 && $str != 2) {
$return .= "<span>".($this->page + 1)."</span>";
}
if($this->page > 1 && $this->page + 2 <= $str) {
$return .= "<span>".($this->page + 1)."</span>";
}
if($this->page + 2 < $str) {
if($this->page + 1 == 1) {
$return .= "<a href='".$this->prefix_p."=".($this->page + 2)."'>".($this->page +
2)."</a>";
if($str > 3) {
$return .= "<a href='".$this->prefix_p."=".($this->page + 3)."'>".($this->page +
3)."</a>";
}
if($this->page + 3 >= $str) {
} else {
if($str != 4) {
$return .= "<a href='".$this->prefix_p."=".($this->page + 4)."'>".($this->page +
4)."</a>";
}
}
} else {
if($this->page + 1 == 2) {
$return .= "<a href='".$this->prefix_p."=".($this->page + 2)."'>".($this->page +
2)."</a>";
if($str != 4) {
$return .= "<a href='".$this->prefix_p."=".($this->page + 3)."'>".($this->page +
3)."</a>";
}
} else {
$return .= "<a href='".$this->prefix_p."=".($this->page + 2)."'>".($this->page +
2)."</a>";
}
}
}
$return .= " ";
if($this->page + 1 != $str) {
$return .= "<a href='".$this->prefix_p."=".$str."'>".$str."</a>";
$return .= " ";
$return .= "<a href='".$this->prefix_p."=".($this->page + 2)."'>></a>";
} else {
if($str > 1) {
$return .= "<span>".$str."</span>";
}
$return .= "<span>></span>";
}
$return .= "</div>";
return $return;
}
До сих пор удивляюсь как все работает 
|
|
|

10.08.2009, 04:01
|
|
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме: 6462214
Репутация:
3171
|
|
Я просто в шоке кажеться.
Я так понимаю ТС нужна была работающая постраничная навигация? И ради этого он накодил это гнечто? ОМГ.
|
|
|

10.08.2009, 07:22
|
|
Новичок
Регистрация: 06.07.2009
Сообщений: 18
Провел на форуме: 42940
Репутация:
0
|
|
m0Hze, дада, но ТС это топик стартёр, а тот тип просто садомаза))
|
|
|

10.08.2009, 13:28
|
|
Познающий
Регистрация: 30.01.2009
Сообщений: 81
Провел на форуме: 459860
Репутация:
46
|
|
Можно ли написать скрипт редиректа с перехватом рефера? Если рефер передаётся, то редирект происходит, а если рефер не передаётся, то редиректа не происходит просто отображается белый экран?
|
|
|

10.08.2009, 13:29
|
|
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме: 1698585
Репутация:
818
|
|
Реферер легко потделать, поетому никогда не расчитывайте на него.
|
|
|

10.08.2009, 13:52
|
|
Познающий
Регистрация: 30.01.2009
Сообщений: 81
Провел на форуме: 459860
Репутация:
46
|
|
Ну а всё же? Если да, то как будет выглядеть?
В php вообще не силён 
|
|
|

10.08.2009, 14:00
|
|
Постоянный
Регистрация: 06.02.2008
Сообщений: 494
Провел на форуме: 1754802
Репутация:
380
|
|
Сообщение от KokauH
Ну а всё же? Если да, то как будет выглядеть?
В php вообще не силён 
В simple TDS это уже есть если про это, а еcли нет то -
PHP код:
if(!empty($_SERVER['HTTP_REFERER']))
{
header("Location: http://www.example.com/");
}
die;
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|