Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 PHP и MySQL извеждане на резултати и визуализирането им посредством Smarty шаблони
  1. Кратко въведение в SQL(select)
  2. Работа на РНР с MySQL
  3. Странициране
  4. Приложение: НОВИНИ
PureEvil
     
Автор  PureEvil (17.01.2006 16:25)  съобщение до автора
Погледнат  9853 пъти  добави към любими
Оценка  добави коментар
Гласове  18  изпрати на приятел
Коментари  (0)  абонирай се за PHP
    Страница 3 / 4

 



Странициране

За целта ще си направим един малак клас за работа с MySQL.

CODE
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
<?php
define("maxstr", 4);                     //брой числа на страница.

class db {
 
var $dbtype;                                //тип база данни
 
var $dbhost;                                //сървър за база данни
 
var $dbuser;                                //потребителско име за достъп
 
var $dbpass;                                //парола за потребителя
 
var $dbname;                                //име на базата данни
 
var $dbflag;                                //..........???!!!
 
 
var $start = 0;                             //начало странициране

/******************************************
|* function: db(...);                     *|
|* purpose:  конструктор;                 *|
|* outcome:  true;                        *|
******************************************/
 
function db($dbtype, $dbhost, $dbuser, $dbpass, $dbname) {
 
$this->dbtype = $dbtype;
 
$this->dbhost = $dbhost;
 
$this->dbuser = $dbuser;
 
$this->dbpass = $dbpass;
 
$this->dbname = $dbname;
 
return true;
 
}

/******************************************
|* function: connect();                   *|
|* purpose:  прави връзка с база данни;   *|
|* outcome:  $dbflag or error;            *|
******************************************/
 
function connect() {
 
switch ($this->dbtype) {
  
case "pg":
   
//Тук го направете вие :)
  
break;
  
  
case "mysql":
   
$dbc = @mysql_connect($this->dbhost, $this->dbuser, $this->dbpass) or $this->showerr(1);
   
$dbs = @mysql_select_db($this->dbname, $dbc) or $this->showerr(2);
   
return $this->dbflag = $dbc;
  
break;
  
  
default:
   
$this->showerr(0);
  
break;
 
}
 }

/***********************************************
|* function: disconnect()                      *|
|* purpose:  спира връзка с база данни;        *|
|* outcome:  нищо;                             *|
***********************************************/
 
function disconnect() {
 
switch ($this->dbtype) {
  
case "pg":
   
//code for PostgreSQL
  
break;
  
  
case "mysql":
    @
mysql_close($this->dbflag);
  
break;
 
}
 }

/***************************************************
|* function: select($sql, $start, $num, $limit);   *|
|*  $sql     - sql заявка;                         *|
|*  $num     - маx брой резултата;                 *|
|*  $limit   - флаг за лимит на резултата;         *|
|* purpose:  изпълнение на заявки;                 *|
|* outcome:  $arr or error;                        *|
|*  $arr   - масив садържаш резултата;             *|
***************************************************/
 
function select($sql, $num, $limit) {
 
if ($limit == 1) $sql .= " LIMIT ".$num." OFFSET ".$this->start;
 
elseif ($limit == -1) $sql .= "";
 
else $sql .= " LIMIT 1";
 
 
switch ($this->dbtype) {
  
case "pg":
   
//напишете го сами :)
  
break;
  
  
case "mysql":
   
$query = @mysql_query($sql) or $this->showerr(3);
   
while ( $row = @mysql_fetch_array($query, MYSQL_NUM) ) {
    
$arr[] = $row;
   
}
    @
mysql_free_result($query);
   
return $arr;
  
break;
 
}
}
/***********************************************
|* function: pages($sql, $onpage, $path);      *|
|*  $sql     - sql заявка;                     *|
|*  $onpage  - резултати на страница;          *|
|*  $path    - предавани параметри $_GET;      *|
|* object:  изчисляване на броя страници;      *|
|* outcome: $res..........;                    *|
***********************************************/
 
function pages($sql, $onpage, $path) {
  
switch ($this->dbtype) {
   
case "pg":
   
//напишете си кода сами :)
   
break;
  
   
case "mysql":
    
$query = @mysql_query($sql);
    
$max   = @mysql_affected_rows();
     @
mysql_free_result($query);
   
break;
  
}

 
$pages = @ceil($max/$onpage);                           //определя максималния брой страници
 
if(!$path) $path = "?";                                           //тука проверка дали да има нещо друго по ГЕТ
 
else $path .= "&";                                          //което да предаваме.
 
if ( !$_GET["page"] ) $_GET["page"] = 1;
 
if($_GET["page"] > $pages) {
  
$_GET["page"] = $pages;
 
}
 
$this->start = ($_GET["page"] - 1) * $onpage;    //определяне на начална позиция
 
$razlika = floor(maxstr/2);
 
if($_GET["page"] == 1) {
  
$razlika = 0;
 
}
 
elseif($_GET["page"] == $pages) {
  
$razlika = maxstr - 1;
 
}
 
elseif( ($_GET["page"] == maxstr) ) {
  
$razlika += 1
 
}
 
$begin = $_GET["page"] - $razlika;
 
if($begin < 2)
  
$begin = 1;
 
else
  
$res .= "<a href="".$path."page=".($begin - 1)."">«</a>";
 
$end = $begin + maxstr;
 
for($i = $begin; $i < $end; $i++) {
  
if($i == $_GET["page"])
   
$res .= " ".$i;
  
else
   
$res .= " <a href="".$path."page=".$i."">".$i."</a>";
  
if($i == $pages) break;
 
}
 
if($end <= $pages)
  
$res .= " <a href="".$path."page=".$end."">»</a>";

 
return $res;
 
}

/***********************************************
|* function: showerr(**);                      *|
|* object:  извиква страницата за грешка;     *|
|* outcome: страницата със грешката;           *|
***********************************************/
 
function showerr($i) {
//напишете си кода :)
}
?>

Методът pages() от този клас за работа с MySQL  прави страницирането. Резултата от това ще бъде: 1 2 3 4 >> или << 2 3 4 5 >>, където стрелките съответно са напред и назад, а числата линкове към страниците. Направил този метод да приема 3 параметъра: заявка, брой записа, параметри. Заявката е за да мога да определя засегнатите резултати на колко страници ще се съберат. Броя записи е максималния брой резултата на една страница, а параметрите са тези по GET. Скрипта добавя page към URL адреса и за да не загубим другите се подават на функцията при генериране на скрипта.



 << Предишна страница Следваща страница >> 


Ключови думи: PHP smarty template шаблон SQL


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008