Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.84/266: Рейтинг темы: голосов - 266, средняя оценка - 4.84
Даниэль
0 / 0 / 0
Регистрация: 21.08.2014
Сообщений: 5
#1

Обмен готовыми решениями

02.07.2008, 12:02. Просмотров 48033. Ответов 91
Метки нет (Все метки)

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?PHP 
echo getfilesize($_GET['name']); 
 
// Функция для определения размера 
function getfilesize($filename) 
{ 
  // Проверяем, существует ли файл 
  if(!file_exists($filename)) return "файл не существует"; 
  // Определяем размер файла 
  $filesize = filesize($filename); 
  // Если размер файл превышает 1024 байта, 
  // пересчитываем размер в Кбайты 
  if($filesize > 1024) 
  { 
    $filesize = (float)($filesize/1024); 
    // Если размер файл превышает 1024 Кбайта, 
    // пересчитываем размер в Мбайты 
    if($filesize > 1024) 
    { 
      $filesize = (float)($filesize/1024); 
      // Округляем дробную часть до 
      // первого знака после запятой 
      $filesize = round($filesize, 1); 
      return $filesize." Мб"; 
    } 
  } 
  else 
  { 
    return $filesize." байт"; 
  } 
} 
?>
Взято с [Ссылка удалена!]

 Комментарий модератора 
Если хотите поделиться готовыми решениями, то выкладывайте их в эту тему, а не ссылки на Ваш форум и сайт
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2008, 12:02
Ответы с готовыми решениями:

Обсуждение класса постраничной навигации из темы "Обмен готовыми решениями"
Выделено из темы: http://www.cyberforum.ru/php/thread158262-page2.html Para...

Обмен между php и javascript
$.ajax({ url: './', type: 'POST', data: {reg_login:...

обмен данными между серверами
Всем доброго времени суток! Пишу дипломную работу, тема - модуль обмена...

Обмен сообщениями
Как отправить сообщение через свой сайт в браузер тому кто на сайте (без...

Обмен сообщениями (новичек)
Вопрос такой: как грамотно организовать обмен сообщениями между пользователями,...

91
Даниэль
0 / 0 / 0
Регистрация: 21.08.2014
Сообщений: 5
02.07.2008, 12:05  [ТС] #2
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php 
  // Сервер ftp 
  $ftp_server = "ftp.server.ru"; 
  // User 
  $ftp_user = "user"; 
  // Password 
  $ftp_password = "password"; 
  // Устанавливаем время исполнения программы 
  set_time_limit(120); 
  // Соединение
  $link = ftp_connect($ftp_server); 
  if(!$link) exit("К сожалению, не удается установить 
                   соединение с FTP-сервером $ftp_server"); 
  // Регистрация на сервере 
  $login = ftp_login($link, $ftp_user, $ftp_password); 
  //$login = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 
  if(!$login) exit("К сожалению, не удается зарегистрироваться на 
            сервере. Проверьте регистрационные данные."); 
 
  $ret = ftp_nb_put($link, "/path/", "C:\\denwer.zip", FTP_BINARY); 
  // Цикл загрузки
  while ($ret == FTP_MOREDATA) 
  { 
    echo "."; 
    $ret = ftp_nb_continue($link); 
  } 
  if ($ret != FTP_FINISHED) 
{ 
     exit ("<br>Во время загрузки файла произошла ошибка..."); 
} 
?>
взято с Форум php
0
nepster
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
10.01.2011, 19:01 #3
Собственно изучая классы оформил пагинацию, все работает замечательно, вот кому нужно держите.

Делал под себя, для меня очень удобно )


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
 
include '/system/config_bd.php'; // соединение с базой
 
class pagination_start {
public $page;
public $CountListPage=10; 
public $sql="SELECT * FROM `news`";
public $start;
public $limit;
public $ires;
 
public function page_settings() {
$this->page_get();
$this->start=($this->page-1)*$this->CountListPage; 
$this->limit=" LIMIT $this->start,$this->CountListPage";
$this->ires=mysql_query($this->sql.$this->limit);
}
 
public function page_get() {
if(empty($_GET['page'])){$this->page=1;} 
else {$this->page=$_GET['page'];} 
}
 
}
 
 
#//////////////////////////////////////////
 
class pagination_end extends pagination_start{
public $link_interval;
public $i;
public $sp;
 
 
 
 
public function pagination($class_all,$class_once) {
 
$link_page = '';
 
$this->page_get();
 
$count=mysql_num_rows(mysql_query($this->sql)); 
 
if($count>$this->CountListPage){ 
$CountList=ceil($count/$this->CountListPage); 
 
if($this->page > 3 && $CountList > 5){echo '<span class="'.$class_all.'"><a href="?page=1'.$this->link_interval.'">1</a></span><span class="'.$class_all.'">...</span>';} 
if($this->page > 3 && $CountList > 5){$this->sp=$this->page-2;}else{$this->sp=1;} 
if($this->page > $CountList-3 && $CountList > 5){$this->sp=$CountList-4; } 
if($CountList>5)$cpc=5;else $cpc=$CountList; 
for($this->i=$this->sp;$this->i<$this->sp+$cpc;$this->i++){ 
 
if($this->i == $this->page){  printf ('<span class="'.$class_once.'">%s</span>',$this->i); }
 
else{ $suit=$this->link_interval.$this->i; 
 
 
$links_cent = '<span class="'.$class_all.'"><a href="?page='.$suit.'">'.$this->i.'</a></span>';
 
echo $links_cent;  } } 
$suit=$this->link_interval."?page=".$CountList.""; 
if($this->page<=$CountList-3 and $CountList>5){echo '<span class="'.$class_all.'">...</span>  <span class="'.$class_all.'"><a href="'.$suit.'">'.$CountList.'</a></span> ';} }
}
}
 
////////////////////////////////////////////////////***********************//////////////////////////////////////////
 
// Выносим в отдельный файл 
 
 
 
/* Входящие данные */
$CountListPage = 5;   // Сколько объектов отображать на странице # по умолчанию 10
$sql="SELECT * FROM `news` ";  // SQL запрос # по умолчанию "SELECT * FROM `news`"
$class_all='page_all'; // Css класс всех страниц кроме текущей
$class_once='class_once'; // Css класс всех страниц кроме текущей
/* --------------- */
 
/* Формирование страниц и sql запрос */
$pagination = new pagination_start();
$pagination->CountListPage = $CountListPage;
$pagination->sql = $sql;
$pagination->page_settings();
/* --------------- */
 
 
 
/* Цикл вывода данных */
while($ires_result=mysql_fetch_array($pagination->ires))
{
echo $ires_result['id']."<br/>";
} 
/* --------------- */
 
 
 
/* Пагенирование */
$pagination_end = new pagination_end();
$pagination_end->CountListPage = $CountListPage;
$pagination_end->sql = $sql;
$pagination_end->pagination($class_all,$class_once); // От css клас от 2 страници до предпоследней 
/* --------------- */
 
 
?>

Пример css классов


CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<style type="text/css">
 
.page_all {
display:block;
width:20px;
height:20px;
color:Red;
border:solid 1px rgb(0,79,109);
background:rgb(175,233,255);
float:left;
margin-left:2px;
text-align:center;
color:rgb(15,38,46);
}
 
 
.page_all a {
text-decoration:none;
font-size:8px;
font-family:verdana;
width:20px;
height:20px;
display:block;
padding-top:4px;
color:rgb(15,38,46);
}
 
 
 
.class_once{
display:block;
width:20px;
height:16px;
color:Red;
border:solid 1px rgb(0,79,109);
background:rgb(49,199,255);
float:left;
color:rgb(15,38,46);
font-size:8px;
font-family:verdana;
text-align:center;
padding-top:4px;
margin-left:2px;
font-weight:bold;
}
 
 
</style>
9
blackbanny
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707
05.05.2011, 22:02 #4
написал счетчик посещений используя MySQL. Подсчитывает уникальные посещения, количество посещений сегодня и общее число посещение сайта, если есть какие либо предложения по доработке или замечания - пишите...

скрипт изпользует БД(counter) c таблицами list_ip и statistics. Можете сами создать(название полей посмотрите в коде ниже) либо вот сам код для создания БД с таблицами:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$date = date('Y-m-d', time());
$db = mysql_connect('host_name', 'user_name', 'password'); //напишите свои данные
mysql_query("DROP DATABASE `counter`");
mysql_query("CREATE DATABASE `counter`");
mysql_select_db("counter");
mysql_query("CREATE TABLE `list_ip` (`id` INT(10) NOT NULL AUTO_INCREMENT,
                                     `ip` TEXT(15) NOT NULL,
                                     `date` TEXT(10) NOT NULL,
                                     PRIMARY KEY(`id`))");
 
mysql_query("CREATE TABLE `statistics` (`hosts` INT(10) NOT NULL,
                                        `hits` INT(10) NOT NULL,
                                        `total` INT(15) NOT NULL,
                                        `date` TEXT(10) NOT NULL)");
mysql_query("INSERT INTO `statistics` (`hosts`, `hits`, `total`, `date`) VALUES (0,0,0, \"$date\")");
mysql_close($db);
?>
сам счетчик:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
$date = date('Y-m-d', time()); //узнаем сегодняшнюю дату
$db = mysql_connect('localhost', 'root', '123'); //подключаемся к серверу MySQL
mysql_select_db("counter"); //выбираем нашу БД
mysql_query("DELETE FROM `list_ip` WHERE (`date`!=\"$date\")"); //удаляем строки, где не текущая дата
mysql_query("UPDATE `statistics` SET `hosts`=0, `hits`=0 WHERE (`date`!=\"$date\")"); //обнуляем хосты и хиты на сегодня
mysql_query("UPDATE `statistics` SET `date`=\"$date\""); //меняем дату на сегодняшнею
 
$ip = $_SERVER['REMOTE_ADDR']; //получаем ip пользователя
$result = mysql_query("SELECT * FROM `list_ip` WHERE (`ip`=\"$ip\") "); //проверяем его наличие в БД
$row = mysql_num_rows($result);
 
if ($row > 0) //если есть, то...
{
    $result = mysql_query("SELECT `hosts`, `hits`, `total` FROM `statistics`");
    $row = mysql_fetch_array($result);
    $new_hits = ++$row['hits']; //увеличиваем хиты на сегодня и...
    $new_total = ++$row['total']; //общее количество посещений
    mysql_query("UPDATE `statistics` SET `hits`=\"$new_hits\", `total`=\"$new_total\""); //обновляем данные 
    output_img($row['hosts'], $new_hits, $new_total); //вызываем функцию вывода
} else  //иначе..
{
    mysql_query("INSERT INTO `list_ip` (`ip`, `date`) VALUES (\"$ip\", \"$date\")") or die(mysql_error());
    $result = mysql_query("SELECT `hosts`, `hits`, `total` FROM `statistics`");
    $row = mysql_fetch_array($result);
    $new_hosts = ++$row['hosts']; //увеличиваем хосты на сегодня,...
    $new_hits = ++$row['hits']; //хиты на сегодня и...
    $new_total = ++$row['total']; //увеличиваем хиты на сегодня и...
    mysql_query("UPDATE `statistics` SET `hosts`=\"$new_hosts\", `hits`=\"$new_hits\", `total`=\"$new_total\""); //обновляем данные
    output_img($new_hosts, $new_hits, $new_total); //вызываем функцию вывода
}
mysql_close($db);
 
function output_img($hosts, $hits, $total)
{
    $img = imagecreatefrompng('bg.png'); //созаем новое изображение из файла
    $color = ImageColorAllocate ($img, 0, 0, 0); //выбираем цвет цифр
    Imagestring($img, 5, 5, 3, $hosts, $color); //"рисуем" хосты
    Imagestring($img, 5, 45, 15, $hits, $color); //"рисуем" хиты
    Imagestring($img, 5, 45, 30, $total, $color); //"рисуем" общее количество посещений
    // Выводим изображение в стандартный поток вывода
    header ("Content-type: image/png"); 
    ImagePng ($img); 
}
?>
надо будет создать шаблон изображения пд названием bg.phg Скрипт внедряйте либо
PHP
1
 include "имя скрипта";
либо
HTML5
1
<IMG SRC="имя скрипта" WIDTH="100" HEIGHT="50">
вроде все...

чуть не забыл подключите библиотеку GD, т.к. вывод происходит графически... ну вот теперь все...
5
FrenchOpen
13 / 13 / 4
Регистрация: 08.12.2010
Сообщений: 42
22.07.2011, 13:21 #5
Работающий код для определения размера файла (вместо первого поста :)
PHP
1
2
3
4
5
6
7
8
9
10
11
12
function getfilesize($filename) 
{ 
    if(!file_exists($filename)) // Проверяем, существует ли файл
        return "file not found";  
    $filesize = filesize($filename); // Определяем размер файла 
    $unit_index=0; // Сбрасываем индекс
    $units=array("B","KB","MB","GB","TB","PB");
    while($filesize>=1024)//Пока размер больше или равен 1024
    {   $filesize/=1024;// Делим размер на 1024
        $unit_index++; } // И увеличиваем индекс        
    return round($filesize,2)." ".$units[$unit_index]; //Возвращаем округленное значение размера с соответствующей единицей измерения
}
3
Alex1OPS
101 / 100 / 36
Регистрация: 14.09.2010
Сообщений: 223
01.08.2011, 19:03 #6
Самый простой способ загрузки файлов на сервер:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
   $path = "каталог_файлов"
   if (@($_REQUEST['submit'])) {                           //если нажата кнопка
   if($_FILES["filename"]["size"] > 1024*3*1024*10*10*100)  //если файл > 3 МБ
   {
     echo ("Размер файла превышает три мегабайта");
     exit;
   }
   if(copy($_FILES["filename"]["tmp_name"], //копируем файл из временной папки в назначенную
     $path.$_FILES["filename"]["name"]))    
   {                                                     //выводим характеристики файла
     echo("Файл успешно загружен <br>");
     echo("Характеристики файла: <br>");
     echo("Имя файла: ");
     echo($_FILES["filename"]["name"]);
     echo("<br>Размер файла: ");
     echo($_FILES["filename"]["size"]);
     echo("<br>Каталог для загрузки: ");
     echo($_FILES["filename"]["tmp_name"]);
     echo("<br>Тип файла: ");
     echo($_FILES["filename"]["type"]);
   } else {
      echo("Ошибка загрузки файла");
   }
   }
?>  
       /* Форма отправки файла */
      <h2><p><b> Форма для загрузки файлов </b></p></h2>
      <form action="<?=$_SERVER['SCRIPT_NAME'] ?>" method="post" enctype="multipart/form-data">
      <input type="file" name="filename"><br> 
      <input type="submit" value="Download" name="submit"><br>
      </form>
3
Vovan-VE
13154 / 6538 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
02.08.2011, 07:17 #7
Цитата Сообщение от Alex1OPS Посмотреть сообщение
PHP
1
2
copy($_FILES["filename"]["tmp_name"],
$path.$_FILES["filename"]["name"])
Во-первых, уязвимость, ибо в $_FILES["filename"]["name"] кулхацкер может послать все что угодно, и в том числе вместе с путем, что приведет к копированию в любой путь, который он захочет.

Во-вторых, есть специальная функция для перемещения только залитых файлов move_uploaded_file(). Если у Вам залили файл 3 МБ, а на сервере свободного места осталось 2 МБ, то скопировать просто не получится, хотя временный файл будет удален после завершения скрипта, и тогда свободно станет 5 МБ.
3
Alex1OPS
101 / 100 / 36
Регистрация: 14.09.2010
Сообщений: 223
02.08.2011, 12:35 #8
Улучшенный вариант Загрузка файлов на сервер:
Форма:
HTML5
1
2
3
4
<form action="./upload.php" method="post" enctype="multipart/form-data">
<p><input type="file" name="userfile" id="file"></p>
<p><input type="submit" value="Загрузить фаил"></p>
</form>
Файл upload.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
 
$allowed_filetypes = array('.jpg','.gif','.bmp','.png'); // Здесь мы перечисляем допустимые типы файлов
 
$max_filesize = 524288; // Максимальный размер загружаемого файла в байтах (в данном случае он равен 0.5 Мб).
 
$upload_path = './files/'; // Место, куда будут загружаться файлы (в данном случае это папка 'files').
 
$filename = $_FILES['userfile']['name']; // В переменную $filename заносим точное имя файла (включая расширение).
 
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); // В переменную $ext заносим расширение загруженного файла.
 
// Сверяем полученное расширение со списком допутимых расширений, которые мы определили в самом начале. Если расширение загруженного файла не входит в список разрешенных, то прерываем выполнение программы и выдаем соответствующее сообщение.
 
if(!in_array($ext,$allowed_filetypes))
die('Данный тип файла не поддерживается.');
 
// Теперь проверим размер загруженного файла и если он больше максимально допустимого, то прерываем выполнение программы и выдаем сообщение.
 
if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
die('Фаил слишком большой.');
 
// Проверяем, доступна ли на запись папка, определенная нами под загрузку файлов (папка files). Если вдруг недоступна, то выдаем сообщение, что на папку нужно поставить права доступа 777.
 
if(!is_writable($upload_path))
die('Невозможно загрузить фаил в папку. Установите права доступа - 777.');
 
// Загружаем фаил в указанную папку.
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename))
{
echo 'Ваш фаил успешно загружен <a href="' . $upload_path . $filename . '">смотреть</a>'; 
}
else
{
echo 'При загрузке возникли ошибки. Попробуйте ещё раз.';
}
?>
Добавлено через 2 минуты
Можно использовать формирование имени загруженного файла таким образом:
PHP
1
$filename = $_FILES['userfile']['name'].time();
2
Денис Н.
459 / 459 / 23
Регистрация: 17.08.2011
Сообщений: 1,489
17.08.2011, 14:56 #9
Представляю вашему вниманию на мой взгляд простой и удобный пагинатор:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
 
class Paginator
{
    private $qww;
    private $query;
    private $fields;
    private $table;
    private $npp;
    public function __construct($T, $F, $NPP, $Q)
    {
        $this -> fields = $F;
        $this -> table  = $T;
        
        is_numeric($_GET['page'])?$_GET['page']:1;
        
        $this -> query  = $Q; 
        $this -> npp    = $NPP;
        $this -> start  = 
        
        1+(((isset($_GET['page'])?(is_numeric($_GET['page'])&&!empty($_GET['page']))?$_GET['page']:1:1)-1)
        *$this->npp);
        $select_count = 'SELECT COUNT(*) FROM ' . $this->table;
        $qw = mysql_query($select_count) or die(mysql_error());
        $this->limit = mysql_result($qw,0);
        
            $f = implode(',', $this->fields );
            $select_page = "SELECT {$f} FROM {$this->table} {$this->query} 
                            LIMIT {$this->start}, {$this->npp}";
                            
            $this->qww = mysql_query($select_page) or die(mysql_error());    
    }
    
    public function Fetch()
    {
        $out = '';
        $out .= '<table border=1 width=770 cellspacing=0>';
        while($row = mysql_fetch_assoc($this->qww))
        {
            $out .= '<tr>';
            for($i = 0; $i < count($this->fields); $i ++)
                $out .= '<td style=width:400px>'.$row[$this->fields[$i]].'</td>';
            $out .= '</tr>';           
        }   
        $out .= '</table>';
        echo $out;     
    }
    
    public function View()
    {
        $Numofpages = ceil($this->limit/ $this->npp);
        $i = 0;
        echo '<hr />';
        while($i < $Numofpages)
        {
            if($i+1 == $_GET['page'])
                echo '<span style=background-color:#ffcfcf><a href="?page='.++$i.'">'.$i.'</a></span> ';
            else
                echo '<span style=background-color:#cfcfff><a href="?page='.++$i.'">'.$i.'</a></span> ';
        }
        echo '<hr />';
    }
}
 
// Запуск
$Paginator =  new Paginator('ipb_content_cache_posts', array('cache_content_id', 'cache_content'), 2, 'ORDER BY cache_content_id DESC');
 
$Paginator -> View();
$Paginator -> Fetch();
$Paginator -> View();
2
blackbanny
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707
17.08.2011, 16:41 #10
Желательно к своим скриптам писать комментарии и краткое описание.
3
Денис Н.
459 / 459 / 23
Регистрация: 17.08.2011
Сообщений: 1,489
18.08.2011, 03:35 #11
Исправляюсь
index.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
class Paginator
{
    private $page;    // текущая страница 
    private $qww;     // запрос с выборкой
    private $query;   // подзапрос, который можно добавить к основному запросу
    private $fields;  // массив полей выборки
    private $table;   // таблица выборки
    private $npp;     // количество записей на страницу
    private $limit;   // количество записей в БД
    /*
    Конструктор принимает параметры:
    string $T   - таблица выборки
    array  $F   - поля выборки
    int    $NPP - количество записей на страницу
    string $Q   - подзапрос, если имеется
    */
    public function __construct($T, $F, $NPP, $Q)
    {
        $this -> fields = $F;
        $this -> table  = $T;
        
        $this -> query  = $Q; 
        $this -> npp    = $NPP;
        
        $select_count = 'SELECT COUNT(*) FROM ' . $this->table;
        $qw = mysql_query($select_count) or die(mysql_error());
        
        $this -> limit = mysql_result($qw,0); // задание кол-ва записей
       
        $this->page = ((isset($_GET['page'])?
        (is_numeric($_GET['page'])&&!empty($_GET['page']))?
        ($_GET['page'] < ($this->limit/$this->npp+1) && $_GET['page'] > 1)?
        $_GET['page']
        :1:1:1) - 1);  // магические тернарники -- обработка ГЕТа
        
        $this->start = 1 + $this->page * $this->npp; // определение начального индекса лимитирования
        
            $f = implode(',', $this->fields ); // распарсивание полей в строку
            
            $select_page = "SELECT {$f} FROM {$this->table} {$this->query} //запрос выборки  
                            LIMIT {$this->start}, {$this->npp}";
                            
            $this->qww = mysql_query($select_page) or die(mysql_error());    
    }
    /* Метод вывода выборки*/
    public function Fetch()
    {
        $out = '';
        $out .= '<table border=1 width=770 cellspacing=0>';
        while($row = mysql_fetch_assoc($this->qww))
        {
            $out .= '<tr>';
            for($i = 0; $i < count($this->fields); $i ++)
                $out .= '<td style=width:400px>'.$row[$this->fields[$i]].'</td>';
            $out .= '</tr>';           
        }   
        $out .= '</table>';
        echo $out; // собрали все в $out и выкинули на экран    
    }
    /*Метод вывода пагинации*/
    public function View()
    {
        $Numofpages = ceil($this->limit / $this->npp); // переменная для цикла в шаблоне
        $i = 0;
        include('p1.htm'); // шаблон
    }
}
 
// Запуск
 
// Создаем объект
$Paginator =  new Paginator('ipb_task_logs', array('log_title', 'log_ip', 'log_desc'), 5, 'ORDER BY log_id DESC');
 
// Используем методы
$Paginator -> View();
$Paginator -> Fetch();
$Paginator -> View(); // Пагинаторы стоят сверху и снизу контента для наглядности
?>
И довольно-таки простой тестовый шаблон
p1.htm
HTML5
1
2
3
4
5
6
7
8
9
10
11
<hr />
<a href="?page=<?php echo ($this->page) ?>">&lt;&lt;&nbsp;&nbsp;</a>
<?php while($i < $Numofpages): ?>
<?php if($i == $this->page): ?>
<span style="background-color:#ffcfcf"><a href="?page=<?php echo ++$i ?>"><?php echo $i ?></a></span>
<?php else: ?>
<span style="background-color:#cfcfff"><a href="?page=<?php echo ++$i ?>"><?php echo $i ?></a></span>
<?php endif ?>
<?php endwhile ?>
<a href="?page=<?php echo ($this->page+2) ?>">&nbsp;&nbsp;&gt;&gt;</a>
<hr />
0
Sulik78
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 646
18.08.2011, 05:41 #12
пагинатор
как на habre

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function printPages($table, $onpage, $name)
{
    /* параметры
      $table - таблица db
      $onpage - кол-во на странице
      $name - имя переменной $_GET
    */
    
    $start = !empty($_GET[$name]) ? (int)$_GET[$name] : 0;
    $start = $start > 1 ? ($start-1)*$this->_onpage : 0;
    
    $sql = 'SELECT COUNT(`id`) AS `count` FROM `' .$table. '`';
    $query = mysql_query($sql);
    $all = mysql_fetch_object($query)->count;
    
    $pages = $start > 0 ? '<a href="?page='.ceil($start/$onpage).'">в†ђ назад</a>' : '';
    $pages .= ($start/$onpage) < ($all/$onpage-1) ? '<a href="?page='.(ceil($start/$onpage)+2).'">вперед в†’</a>' : '';
    $curent = ceil($start/$onpage)+1;
    $r = 5;
    for ($i = 1; $i < ceil($all/$onpage)+1; $i++)
    {
        $pages .= (ceil($all/$onpage) - $curent > $r) && $i == ceil($all/$onpage) ? ' ... ' : '';
        $pages .= ($curent > $r + 1) && $i == 2? ' ... ' : '';
        if (($i < $curent+$r && $i > $curent-$r) || $i == 1 || $i == ceil($all/$onpage))
        {
            $pages .= $curent == $i ? '<strong>'.$i.'</strong>' : '<a href="?page='.$i.'">'.$i.'</a>';
        }
    }
        
    return $pages == '<strong>1</strong>' ? '' : $pages;    
}
Добавлено через 13 минут
в 11 строке
*$this->_onpage на $onpage надо поменять
1
hellmin
36 / 36 / 9
Регистрация: 13.07.2011
Сообщений: 95
18.08.2011, 16:57 #13
Пагинация
Писал этого монстра под свои нужды. Может кому пригодится.
Собственно сам класс.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
class pagination
{
    private $totalRows; //Общее количество записей
    private $perPage; //Количество записей на странице
    private $pages; //Количество страниц
    private $page; //Текущий номер страницы
    private $separator; //Разделитель для добавления $_GET параметра
    private $countDisplay; // Количество отображаемых ссылок слева и справа от текущей
    private $url; // Адрес
    private $config = array(); // Параметры. По умолчанию в __construct либо через __set
 
    function  __construct()
    {
        $this->config = array(
            'viewDots'=>true, // Отображение точек если количество страниц больше количества отображаемых ссылок
            'viewArrows'=>true,  // Отображение ссылок на первую и на последнюю страницу
            'leftArrow'=>"<<", // Ссылка на первую страницу
            'rightArrow'=>">>", // Ссылка на последнюю страницу
            'dots'=>"..." //
        );
        $this->page = @$_GET['page'];
    }
    
    function  __set( $name, $value )
    {
        $this->config[$name] = $value;
    }
 
    public function setParams( $totalRows, $perPage, $countDisplay )
    {
        $this->totalRows = $totalRows;
        $this->perPage = $perPage;
        $this->countDisplay = $countDisplay;
        $this->pages = $this->countPages();
        if( !is_numeric( $this->page ) || $this->page<1 || $this->page>$this->pages )
            $this->page = 1;
    }
 
    public function createPagination( $url )
    {
        $this->url = $url;
        $arr = array();
 
        $this->separator = $this->getSeparator();
 
        for( $i=1 ; $i<=$this->pages ; $i++ )
        {
            if( ( $this->page - $this->countDisplay <= $i && $this->page + $this->countDisplay >= $i) )
            {
                if( $this->page == $i )
                    $arr[$i] = array( 'name'=>$i, 'link'=>false );
                else
                    $arr[$i] = array( 'name'=>$i, 'link'=> $this->url . $this->separator . "page=" . $i );
            }
        }
 
        if( $this->config['viewDots'] )
        {
            if( $this->page > $this->countDisplay + 1 )
                $arr[0] = array( 'name'=>$this->config['dots'], 'link'=>$this->url . $this->separator . "page=" . ( $this->page - $this->countDisplay - 1 ) );
            if( $this->page < $this->pages - $this->countDisplay)
                $arr[$this->pages+1] = array( 'name'=>$this->config['dots'], 'link'=>$this->url . $this->separator . "page=" . ( $this->page + $this->countDisplay +1 ) );
        }
 
        if( $this->config['viewArrows'] )
        {
            if( $this->page != 1 )
                $arr[-1] = array( 'name'=>$this->config['leftArrow'], 'link'=>$this->url . $this->separator . "page=1" );
            else
                $arr[-1] = array( 'name'=>$this->config['leftArrow'], 'link'=>false );
 
            if( $this->page != $this->pages )
                $arr[$this->pages+2] = array( 'name'=>$this->config['rightArrow'], 'link'=>$this->url . $this->separator . "page=".$this->pages );
            else
                $arr[$this->pages+2] = array( 'name'=>$this->config['rightArrow'], 'link'=>false );
        }
 
        ksort($arr);
        return $arr;
    }
 
    private function countPages()
    {
        return ceil( $this->totalRows / $this->perPage );
    }
 
    private function getSeparator()
    {
        if( strpos( $this->url, "?") )
            return "&";
        return "?";
    }
}
?>
И использование.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$pagination = new pagination();
$pagination->leftArrow = "Первая";
$pagination->rightArrow = "Последняя";
$pagination->setParams( 312, 15, 4 );
$arr = $pagination->createPagination( "http://localhost/index.php");
?>
<html>
<style type="text/css">
span, a {
    padding: 5px;
    margin: 1px;
    border: 1px solid gray;
}
</style>
<body>
<?php
foreach( $arr AS $key=>$value ) {
    if( $value['link'] )
        echo "<a href='" . $value['link'] . "'>" . $value['name'] . "</a>";
    else
        echo "<span>" . $value['name'] . "</span>";
}
?>
</body>
</html>
3
crautcher
2018 / 1990 / 463
Регистрация: 27.05.2011
Сообщений: 6,835
08.02.2012, 12:11 #14
многии юзают функцию mail() для отправки эмайлов , решил выложит альтернативный вариант для отправки писем с вашего эмайла через smtp
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# настроен под мэйл.ру
$config['smtp_username'] = '********@mail.ru'; //Смените на имя своего почтового ящика.
$config['smtp_port'] = '25'; // Порт работы. Не меняйте, если не уверены.
$config['smtp_host'] = 'smtp.mail.ru'; //сервер для отправки почты
$config['smtp_password'] = '*************'; //пароль
$config['smtp_charset'] = 'UTF-8'; //кодировка сообщений.
$config['smtp_from'] = 'TEST'; //Ваше имя - или имя Вашего сайта. Будет показывать при прочтении в поле "От кого"
 
 
function smtpmail($mail_to, $subject, $message, $headers='') {
        global $config;
        $SEND =   "Date: ".date("D, d M Y H:i:s") . " UT\r\n";
        $SEND .=   'Subject: =?'.$config['smtp_charset'].'?B?'.base64_encode($subject)."=?=\r\n";
        if ($headers) $SEND .= $headers."\r\n\r\n";
        else
        {
                $SEND .= "Reply-To: ".$config['smtp_username']."\r\n";
                $SEND .= "MIME-Version: 1.0\r\n";
                $SEND .= "Content-Type: text/plain; charset=\"".$config['smtp_charset']."\"\r\n";
                $SEND .= "Content-Transfer-Encoding: 8bit\r\n";
                $SEND .= "From: \"".$config['smtp_from']."\" <".$config['smtp_username'].">\r\n";
                $SEND .= "To: $mail_to <$mail_to>\r\n";
                $SEND .= "X-Priority: 3\r\n\r\n";
        }
        $SEND .=  $message."\r\n";
         if( !$socket = fsockopen($config['smtp_host'], $config['smtp_port'], $errno, $errstr, 30) ) {
              return false;
         }
 
            if (!server_parse($socket, "220", __LINE__)) return false;
 
            fputs($socket, "HELO " . $config['smtp_host'] . "\r\n");
            if (!server_parse($socket, "250", __LINE__)) {
               fclose($socket);
               return false;
            }
            fputs($socket, "AUTH LOGIN\r\n");
            if (!server_parse($socket, "334", __LINE__)) {
               fclose($socket);
               return false;
            }
            fputs($socket, base64_encode($config['smtp_username']) . "\r\n");
            if (!server_parse($socket, "334", __LINE__)) {
               fclose($socket);
               return false;
            }
            fputs($socket, base64_encode($config['smtp_password']) . "\r\n");
            if (!server_parse($socket, "235", __LINE__)) {
               fclose($socket);
               return false;
            }
            fputs($socket, "MAIL FROM: <".$config['smtp_username'].">\r\n");
            if (!server_parse($socket, "250", __LINE__)) {
               fclose($socket);
               return false;
            }
            fputs($socket, "RCPT TO: <" . $mail_to . ">\r\n");
 
            if (!server_parse($socket, "250", __LINE__)) {
               fclose($socket);
               return false;
            }
            fputs($socket, "DATA\r\n");
 
            if (!server_parse($socket, "354", __LINE__)) {
               fclose($socket);
               return false;
            }
            fputs($socket, $SEND."\r\n.\r\n");
 
            if (!server_parse($socket, "250", __LINE__)) {
               fclose($socket);
               return false;
            }
            fputs($socket, "QUIT\r\n");
            fclose($socket);
            return TRUE;
}
 
function server_parse($socket, $response, $line = __LINE__) {
        global $config;
    while (substr($server_response, 3, 1) != ' ') {
        if (!($server_response = fgets($socket, 256))) {
                  return false;
                }
    }
    if (!(substr($server_response, 0, 3) == $response)) {
                  return false;
        }
    return true;
}
7
Василий Макогон
269 / 225 / 11
Регистрация: 20.04.2012
Сообщений: 820
09.06.2012, 11:19 #15
Моё решение пагинации: http://www.pagination.ru
0
stupidstudent
17 / 14 / 0
Регистрация: 25.10.2011
Сообщений: 241
10.08.2012, 18:47 #16
Цитата Сообщение от Василий Макогон Посмотреть сообщение
Моё решение пагинации: http://www.pagination.ru
не хочу вмешиваться, но:
Комментарий модератора romchiksoad
Если хотите поделиться готовыми решениями, то выкладывайте их в эту тему, а не ссылки на Ваш форум и сайт
0
Василий Макогон
269 / 225 / 11
Регистрация: 20.04.2012
Сообщений: 820
10.08.2012, 22:32 #17
Цитата Сообщение от stupidstudent Посмотреть сообщение
не хочу вмешиваться, но:
выкладывать скрипты как есть - плохая практика. скрипты периодически обновляются авторами и что бы они были в актуальном состоянии, их нужно качать исключительно из авторских источников.
0
Jallik Lich
Исследователь
195 / 174 / 13
Регистрация: 30.10.2011
Сообщений: 605
11.08.2012, 01:54 #18
Василий Макогон, поддерживаю.
Почему нельзя давать ссылки на официальные страницы скриптов?
0
magirus
11.08.2012, 09:07
  #19
 Комментарий администратора 
на оф страницы скриптов можно. на форумы нельзя.
0
KeyGen
384 / 291 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
24.03.2013, 02:21 #20
Писал изучая php класс капчи (в папке еще класс QDir и QCodeGen):

Привожу код html и класс капчи остальные классы в исходниках:

PHP
1
2
3
4
// В папке QCaptcha две папки:
// captchaBack - фоны для капчи, скидывая туда фоны класс сам просматривает папку на файлы *.png
// captchaTTF - шрифты работают также, просто кидаем туда нужный шрифт и он будет отображаться
// QCodeGen есть еще методы интересно смотрите там

PS: При клике по капче она меняется.


index.php
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Test class</title>
</head>
 
<body>
    <table style="width: 100%; height: 100%; text-align: center;">
        <tr>
            <td>
                <p><a href='#' onclick="document.getElementById('captchaImg').src='Qp/QCaptcha/classQCaptcha.php?'+Math.random(); return false;"><img id='captchaImg' src='Qp/QCaptcha/classQCaptcha.php'></a></p>
            </td>
        </tr>
    </table>
</body>
</html>

class (classQCaptcha.php):

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
 
namespace Qp;
 
session_start();
 
include_once('../QCodeGen/classQCodeGen.php');
include_once('../QDir/classQDir.php');
 
class QCaptcha {
 
    private $dirImage;
    private $dirTff;
    private $fontSize = 16;
    private $lines = 6;
    private $sizeCode;
    private $enumCode;
 
    private $arrImage = array();
    private $arrTtf = array();
    // Конструктор
    function __construct($sizeCode = 8, $enumCode = 0){
        $this->dir = 'codeGen/';
 
        $this->dirImage = 'captchaBack/';
        $this->dirTff = 'captchaTTF/';
 
        $this->enumCode = $enumCode;
        $this->sizeCode = $sizeCode;
 
        $qDir = new QDir($this->dirImage);
        $this->arrImage = $qDir->entryListFiles('png');
        $qDir->setDir($this->dirTff);
        $this->arrTtf = $qDir->entryListFiles('ttf');
    }
    // Установка размера шрифта
    function setFontSize($fontSize){
        $this->fontSize = $fontSize;
    }
    // Установка количества линий
    function setNumLines($lines){
        $this->lines = $lines;
    }
 
    function getCaptcha(){
 
        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
        header("Last-Modified: " . gmdate("D, d M Y H:i:s", 10000) . " GMT");
        header("Cache-Control: no-store, no-cache, must-revalidate");
        header("Cache-Control: post-check=0, pre-check=0", false);
        header("Pragma: no-cache");
        header("Content-Type:image/png");
 
        $img = imagecreatefrompng($this->dirImage.$this->arrImage[rand(0,count($this->arrImage)-1)]); //создаем изображение со случайным фоном
 
        // Рисуем линии
        for ($i=0; $i<$this->lines; $i++){
            $color = imagecolorallocate($img, rand(0, 150), rand(0, 100), rand(0, 150));
            imageline($img, rand(0, -10), rand(1, 50), rand(150, 180), rand(1, 50), $color);
        }
 
        $color = imagecolorallocate($img, rand(0, 200), 0, rand(0, 200));
 
        // Генерируем нужный пароль
        $codeGen = new QCodeGen($this->sizeCode);
 
        switch($this->enumCode){
            case 0:
                $codeGen->genCodeEng_Number();  // Генерируется код англ+цифры
                break;
            case 1:
                $codeGen->genCodeEng();         // Генерируется код англ
                break;
            case 2:
                $codeGen->genCodeNumber();      // Генерируется код цифры
                break;
        }
 
        $code = $codeGen->getCode(); // Получение кода из класса
 
        $_SESSION['captchaCode'] = $code; // Сохранение кода в сессии для проверки
 
        imagettftext ($img, $this->fontSize, rand(0, 4), rand(0, 25), rand(30, 40), $color, $this->dirTff.$this->arrTtf[rand(0,count($this->arrTtf)-1)], $code);//накладываем код
 
        //еще раз линии! Уже сверху.
        for ($i=0; $i<$this->lines; $i++){
            $color = imagecolorallocate($img, rand(0, 150), rand(0, 100), rand(0, 150));
            imageline($img, rand(0, 150), rand(0, 0), rand(0, 0), rand(150, 150), $color);
        }
 
        ImagePNG($img);
        ImageDestroy($img);//ну вот и создано изображение!
    }
}
 
$captcha = new QCaptcha(6,1); // Установливаем размер кода(1) и тип пароля(2(0,1,2))
$captcha->setFontSize(20);   // Установка размера шрифта
$captcha->setNumLines(4);    // Установка количества линий (перечеркуют шрифт)
$captcha->getCaptcha();      // Выводим капчу
 
// Удачи!
Уже выложил исходники: http://www.cyberforum.ru/php-beginne...ml#post4299655
1
24.03.2013, 02:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2013, 02:21

Обмен информацией с Web-сервером
Создайте веб-приложение, которое формирует возрастающую последовательность из...

Обмен данными между процессами
Здравствуйте! Задача такая: есть скрипт на php который постоянно в памяти и...

Обмен-валюта через ВебМани
как создать скрипты обмен-валюта через ВебМани? Моете подсказать, где может...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru