Thứ Tư, 22 tháng 7, 2009

Zend paginator example!

Paginator component is available with Zend Framework v1.6. This component wasn’t available in v1.5. I appreciate Zend for provide such a nice component for pagination. This component, like other component, is so loosely coupled that you can use it wherever you want without worrying about any other component at all.
If you have already created pages and you want to apply pagination to them, it would not be a big deal.
Pagination is three step process.

1. you will need to create template file. In template file you can specify layout of your pagination. i.e. how your first, previous, next and last etc will be displayed.

2. instantiate your pagination class in the controller and pass data source- data source can be an array, values fetched form the database etc.

3. make some change in your template file, where you are showing your records.
Lets have a simple example.
First create a template file pagination.phtml in your “/application/view/script/” folder and place the following code

The code above is self explanatory. We are creating links for the pagination.

Next add the following code in your controller.
$sql = 'SELECT * FROM table_name ';
$result = $db->fetchAll($sql);
$page=$this->_getParam('page',1);
$paginator = Zend_Paginator::factory($result);
$paginator->setItemCountPerPage(10));
$paginator->setCurrentPageNumber($page);

$this->view->paginator=$paginator;

In the code above we first fetch records from our database. Then instantiate our paginator by writing
$paginator = Zend_Paginator::factory($result);

And pass it results we have fatched.
We then set number of items per page and current page. On our first visit $page will have value 1.
At the end we assign this paginator to our view template.
And now in view template add the following code
foreach($this->paginator as $record)
{
echo $record['firstname'].'\n';
echo $record['lastname']. '\n'
...
...
}

paginationControl($this->paginator, 'Sliding', 'pagination.phtml'); ?

We are applying foreach loop to our paginator and echo our records. I assume that you have fistname, lastname columns in your table where you are fetching records form.Last line is compulsory. you need to call the paginator contorller and give it the $paginator, style of the pagination and the file name of the pagination template.

copy from here
will "viet hoa" late.

Thứ Sáu, 10 tháng 7, 2009

PHP with PDO - Phần 3

Phần I: Tổng Quan về PDO
Phần II: Xây dựng một kết nối đơn giản và truy vấn tới CSDL
Phần III: Tương tác dữ liệu qua PDO

Nếu như các bạn làm theo những bước ở trên thì chưa đủ, ta phải tìm cách lấy dữ liệu trả về từ các query (VD như truy vấn Select chẳng hạn).

Để làm điều này, trước tiên chúng ta phải sử dụng một phương thức khác của PDO là PDO->query(). Phương thức này có nhiệm vụ thực thi một truy vấn SQL và trả về tập kết quả. Thường thì tập kết quả này sẽ được một lớp đối tượng khác là PDO Statement xử lý. Đây là tập các phương thức chuyên dụng để xử lý kết quả trả về, nó cũng gần giống như cái recordset vậy.

PDO {
PDOStatement query(string sql);
}

Các bạn cần chú ý phân biệt giữa hai phương thức exec() và query(). Exec() thực thi một truy vấn và trả về số các dòng bị ảnh hưởng bởi truy vấn, còn query() trả về một tập kết quả (thường là một recordset hoặc giá trị false). Người ta thường dùng exec() để truy vấn các câu lệnh như Insert, delete, update..., và dùng query() để truy vấn các câu lệnh Select.

Chúng ta có thể lấy kết quả ra theo hai cách: Lấy về từng dòng hay lấy về toàn bộ. Điểm đặc biệt là cũng như với các hàm xử lý MySQL, kết quả trả về thường được lưu trữ dưới dạng một mảng, rất thuận tiện và dễ dùng

I. Lấy kết quả về theo từng dòng

Để lấy kết quả theo từng dòng (tương tự như hàm mysql_fetch_array()), chúng ta có thể sử dụng phương thức PDOStatement->fetch().

PDOStatement {
mixed fetch(int fetch_style,
int cursor_orientation,
int cursor_offset);
}

Hàm này sử dụng 3 tham số tuỳ chọn:
- Fetch_style xác định cách thức lấy dữ liệu. Nó có thể nhận một trong các giá trị sau:
  • PDO::FETCH_ASSOC: Trả về một mảng được đánh chỉ số bởi tên cột (field) (Tương tự như MYSQL_ASSOC)
  • PDO::FETCH_BOTH (mặc định): trả về một mảng được đánh chỉ số bởi tên cột và chỉ số số nguyên bắt đầu từ 0. (tương tự như MYSQL_BOTH)
  • PDO::FETCH_NUM: trả về một mảng được đánh chỉ số bởi số thứ tự của cột (xuất hiện trên query SELECT), bắt đầu = 0 (Tương tự như MYSQL_NUM)

... và một vài giá trị khác, tham khảo thêm trong manual, nhưng vì chưa đến lúc sờ đến nên CMXQ không liệt kê ở đây.

Cũng tương tự như mysql_fetch_array, phương thức này lấy một dòng từ vị trí con trỏ hiện tại và đẩy con trỏ sang dòng kế tiếp.

Ví dụ:
Code:
$dbh = new PDO('mysql:host=localhost;dbname=thumotti', 'thumotti', 'thuhaiti');
$stmt = $dbh->query("SELECT * FROM user where user_id<10")>";
while (($row = $stmt->fetch(PDO::FETCH_ASSOC))) {
echo "${row['user_name']}${row['e-mail']}\n";
}
echo "";

II. Lấy toàn bộ dữ liệu và đưa vào mảng.

Để thực hiện điều này, chúng ta cần phải sử dụng một phương thức khác thay cho fetch, đó là fetchall(). Cách thức dùng cũng tương tư nặng thằng fetch, chỉ có điều nó đưa tất cả dữ liệu vào một mảng.

Ví dụ:

Code:
$dbh = new PDO('mysql:host=localhost;dbname=thumotti', 'thumotti', 'thuhaiti');
$stmt = $dbh->query("SELECT * FROM user where user_id<10") result="$stmt-">fetchAll();
print_r($result);
--------------------------------------------
copy from phpvietnam

PHP with PDO - phần 2

Phần I: Tổng quan về PDO
Phần II: Xây dựng một kết nối đơn giản và truy vấn tới CSDL



I. Thiết lập kết nối tới CSDL


Đầu tiên, chúng ta cần phải biết rằng PDO thuần tuý là một lớp (class) được dùng để thao tác với CSDL. Vì vậy, nó cũng có các phương thức và thuộc tính như bất kỳ một lớp nào được xây dựng trên PHP.

PDO sử dụng một phương thức mặc định là __construct(). Phương thức này kiêm luôn nhiệm vụ tạo kết nối tới CSDL. Phương thức này có các tham số như sau:
PDO {
PDO __construct(string dsn,
string username,
string password,
array driver_options);
}

Trong đó:
- dsn (Data Source Name) là một chuỗi văn bản chứa các thông tin cần thiết để kết nối tới một CSDL xác định.
- username và password: chứa tên truy cập và mật khẩu của một tài khoản có quyền thao tác trên CSDL đó.
- driver_options là các tham số tuỳ chọn bổ sung nếu cần.

DSN tuỳ thuộc vào loại CSDL. Ví dụ dưới đây là một chuỗi DSN kết nối tới CSDL MySQL:
'mysql:dbname=testdb;host=127.0.0.1';

Ví dụ:

= new PDO('mysql:host=localhost;dbname=thumotti', 'thumotti', 'thuhaiti');
?>



Đoạn mã trên tạo ra một biến $dbh (thể hiện của đối tượng PDO). Vì __construct là phương thức mặc định của PDO nên trong đoạn mã trên chúng ta không cần phải gọi tên phương thức này ra.

II. Huỷ kết nối tới CSDL
Để huỷ kết nối, đơn giản chúng ta chỉ việc gán instance của đối tượng đó với giá trị null.
VD:

Code:
= new PDO('mysql:host=localhost;dbname=thumotti', 'thumotti', 'thuhaiti');
$dbh=null
?>

III. Sử dụng PDO để truy vấn SQL

Ở trên, các bạn đã biết cách kết nối và huỷ kết nối tới CSDL. Bây giờ chúng ta sẽ tiến hành thực hiện một truy vấn SQL thông qua PDO.

Để thực hiện một truy vấn SQL, chúng ta sử dụng một phương thức của PDO là exec().

PDO {
int exec(string statement);
}


Trong đó, statement là một câu lệnh SQL. Chú ý rằng câu lệnh SQL này phải chạy được trên CSDL mà ta đang sử dụng, (do mỗi một hệ quản trị CSDL lại có một vài câu lệnh SQL đặc chủng nên ta cần phải chú ý điều này). Phương thức trên trả về kết quả là số "râu" (row - record hay bản ghi) bị ảnh hưởng bởi câu lệnh SQL

Ví dụ dưới đây sử dụng để xoá một vài bản ghi nào đó:

exec("DELETE FROM users WHERE user_id<100");>

PHP with PDO - Phần 1

Phần I: Tổng quan về PDO

Một trong những đồ chơi hoành tráng nhất trong phiên bản PHP 5 là sự ra đời của thư viện đối tượng PDO mở rộng, cho phép chúng ta thao tác với các CSDL khác nhau một cách nhẹ nhàng, đơn giản.

I. Giới thiệu

PDO là cụm từ viết tắt của PHP Data Objects, có nghĩa là Các đối tượng dữ liệu trong PHP . Đây là một thành phần mở rộng của PHP nhằm cung cấp cho chúng ta một cách thức đơn giản đề truy cập vào các CSDL khác nhau trong PHP.

Nếu như các bạn đã từng lập trình trên .Net, các bạn sẽ thấy một cái gọi là ADO (bản cũ) và ADO.Net, còn nếu các bạn đã từng code bằng Delphi, nó cũng có BDO, còn trên Java là JDBC... Về cơ bản thì mấy cái này giống nhau, mà bản chất là cung cấp một mô hình trừu tượng để truy cập tới CSDL. (Có thể coi nó như là một lớp (layer) trong lập trình đa lớp).

Cơ chế làm việc của những cái này có thể được mô hình hoá như sau:

Ứng dụng <----> PDO <---> Trình điều khiển các CSDL <---> Các truy vấn tới CSDL và kết quả trả về từ CSDL <---> CSDL (Access, MySQL, SQL Server, Oracle....).

Chúng ta có thể hình dung rằng mỗi một Hệ quản trị CSDL có một cách quản lý dữ liệu khác nhau. Vì vậy, để truy xuất vào một loại CSDL nào đó, cần phải khai báo trình điều khiển CSDL tương ứng với loại CSDL đó. Sau khi đã khai báo trình điều khiển, chúng ta có thể kết nối tới CSDL đó, tiến hành các truy vấn (có thể dựa trên ngôn ngữ truy vấn SQL, qua các Stored Procedure... mà CSDL đó hỗ trợ), lấy kết quả về rồi dùng các lệnh khác của PHP xử lý kết quả và hiển thị cho NSD.

II. Cài đặt

PDO chỉ xuất hiện trong PHP từ ver 5 trở đi.

Sau khi cài đặt xong, chúng ta phải mở cái php.ini và enable thư viện này (nếu chưa có) cùng các trình điều khiển tới các CSDL liên quan.

VD dưới đây là dòng lệnh cấu hình trình điều khiển CSDL chạy trên Windows:

extension=php_pdo.dll
extension=php_pdo_firebird.dll
extension=php_pdo_informix.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll

---------------------------------------------------------------------------------------
copy from phpvietnam

Thứ Năm, 9 tháng 7, 2009

Thứ Ba, 7 tháng 7, 2009

Mysql - Reset password của root

Trên Windows:
vào Start -> Run -> gõ
Code:
services.msc
Enter
Tìm services MySQL và stop lại

sau đó tìm thư mục cài đặt mySQL giả sử C:\mySQL
Vào Start-> Run -> gõ
Code:
cmd
Enter.
ta vào thư mục bin
Code:
cd C:\mysql\bin
và gõ lệnh
Code:
C:\mySQL\bin\>mysqld-nt --skip-grant-tables
Giữ nguyên cửa số đó và mở thêm 1 cửa sổ command mới
vào bin và gõ lệnh
Code:
C:\mySQL\bin\>mysql -u root
khi đó sẽ login vào root mà không cần password.
Để Reset password root ta dùng lệnh
Code:
mysql>use mysql; update user set Password=PASSWORD('new_pass') WHERE User='root';FLUSH PRIVILEGES;
trong đó new_pass chính là password của bạn.

Trên Linux:
Trường hợp cài đặt bằng gói RPM:
1. Gain root access to your Linux system - Lên quyền root:
Code:
[user@localhost ~]$ su -
Password:
[root@localhost user]#
2. First you have to stop the daemon - Dừng ngay mysql lại

Code:
[root@localhost root]# /etc/init.d/mysqld stop
[root@localhost root]#
3. Nếu sử dụng RedHat, CentOS... thì dùng
Code:
[root@localhost root]# mysqld_safe --skip-grant-tables --skip-networking
[root@localhost root]#
Nếu dùng OS khác (ubutun...) thì thay thế services mysqld_safe thành safe_mysqld
You will now start MySQL in safe mode without reading the grant tables with all MySQL database passwords and also you will disable networking. The "safe_mysqld" command will do this trick for you. Chạy mysql trong safe_mode mà không cần đăng nhập và bạn cũng sẽ disable networking cho mysql luôn - đề phòng thằng nào nhân cơ hội này nó vào ).

4. The "mysqladmin" command will now reset[rewrite] the root password. In this case we are setting it to "newpassword". sử dụng mysqladmin sẽ reset lại password. Trong trường hợp này ta phải sử dụng lệnh sau để set 1 pass mới.

Code:
[root@localhost root]# mysqladmin -u root flush-privileges password "newpassword"
[root@localhost root]#
5. Stop the running daemon - Dừng chạy cái mysql_safe:

Code:
kill `cat /var/run/mysqld/mysqld.pid`
6. And finally restart it - và cuối cùng khởi động lại:

Code:
[root@localhost root]# /etc/init.d/mysqld start
[root@localhost root]#
7. You can use now your new root password - Bây giờ thì xài pass mới xem:
Code:
[root@localhost root]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.0.20-standard

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>
Xong.

Trường hợp cài = source:
Tìm thư mục cài đặt Mysql và tìm thư mục libexec bên trong nó. Bạn chạy lệnh :
Code:
[root@localhosthost libexec]./mysqld stop
[root@localhosthost libexec]./mysqld --skip-grant-tables --user=root
sau đó có thể tiến hành đăng nhập không cần password và reset password như trên windows

copy from http://hackingart.com/