PDA

View Full Version : Từng bước học lập trình PHP cơ bản qua dự án website giới thiệu sản phẩm



filiallion
22-10-2014, 20:38
Sau một thời gian biên soạn loạt bài hướng dẫn "Từng bước học lập trình PHP cơ bản qua dự án website giới thiệu sản phẩm" nhằm mục đích giúp các bạn mới tìm hiểu về PHP/MySQL có thể nắm được các kiến thức cơ bản nhất về lập trình PHP và ngôn ngữ SQL cũng như biết cách tạo ra một website đơn giản nhất làm nền tảng tìm hiểu các vấn đề nâng cao hơn.

Loạt bài hướng dẫn "Từng bước học lập trình PHP cơ bản qua dự án website giới thiệu sản phẩm" tôi đã đăng trên trang cá nhân Google+ của tôi tại địa chỉ plus[dot]google[dot]com/103116221369826139041 (Các bạn đổi chữ [dot] thành dấu chấm vì tôi chưa được phép đăng liên kết).

Các bạn có thể theo dõi và trao đổi tại trang Google+ của tôi (Có thể "add friend" để trao đổi qua Hangouts vào buổi tối hàng ngày). Mọi thắc mắc của các bạn tôi sẽ cố gắng hỗ trợ, giải đáp nhanh nhất có thể.

Tôi cũng sẽ đăng loạt bài hướng dẫn lên topic này nhưng với "nhịp độ" chậm hơn và sẽ không tham gia hỗ trợ, giải đáp các thắc mắc của các bạn ở topic này. Mọi thắc mắc các bạn vui lòng tham gia vào trang Google+ của tôi.

Chân thành cảm ơn sự quan tâm của các bạn!

filiallion
22-10-2014, 20:45
GIỚI THIỆU (PHẦN 1)

Hôm nay tôi sẽ bắt đầu viết loạt bài hướng dẫn các bạn học lập trình PHP cơ bản thông qua việc hoàn thành dự án website giới thiệu sản phẩm.

Những nội dung tôi sẽ hướng dẫn các bạn bao gồm:

- Cài đặt và sử dụng web server.
- Xây dựng cấu trúc thư mục website.
- Xây dựng cấu trúc cơ sở dữ liệu (Còn gọi là database và viết tắt là DB).
- Sử dụng phpMyAdmin để quản lý cơ sở dữ liệu.
- Từng bước hoàn thành dự án website giới thiệu sản phẩm (Trang quản trị và trang người dùng) và qua đó các bạn sẻ được học các vấn đề liên quan tới lập trình PHP (Câu lệnh, biến, kiểu dữ liệu, toán tử, điều kiện, vòng lặp, hàm, MySQL và các vấn đề khác).

Các bạn lưu ý, với bài hướng dẫn này tôi chỉ hướng tới các bạn mới bắt đầu tìm hiểu về lập trình PHP ở mức cơ bản nhất chứ tôi không đi sâu vào các vấn đề nâng cao của PHP.

Trong quá trình theo dõi bài hướng dẫn các bạn có thể tham gia thảo luận và đóng góp ý kiến để bài viết ngày càng hoàn thiện hơn.

Chân thành cảm ơn sự quan tâm của các bạn!

filiallion
28-10-2014, 07:24
WEB SERVER (PHẦN 2)

Để ứng dụng web có thể chạy được trên trình duyệt web các bạn cần phải cài đặt một số thành phần sau:

- PHP: Trình biên dịch các file PHP do các bạn tạo ra.
- MySQL: Hệ quản trị cơ sở dữ liệu để lưu trữ dữ liệu website.
- Apache: Chương trình máy chủ HTTP giúp website hoạt động.

Tất cả các thành phần trên là yêu cầu tối thiểu để website hoạt động. Hiện nay, trên internet các thành phần trên đã được đóng gói thành một phần mềm duy nhất như: WampServer, Xampp, AppServ...

Đối với tôi, tôi sử dụng WampServer để phát triển ứng dụng web trên máy tính (Tạm gọi là máy local). Và lưu ý là WampServer chỉ hỗ trợ cho hệ điều hành Windows.

Để cài đặt WampServer các bạn thực hiện theo các bước sau:

1. Tải WampServer tại wampserver[dot]com/en/#download-wrapper (Tùy theo phiên bản hệ điều hành 32 bits hay 64 bits).
2. Chạy file EXE các bạn tải về được để tiến hành cài đặt. Trong quá trình cài đặt WampServer các bạn giữ nguyên các thông số mặc định.
3. Sau khi cài đặt xong, các bạn sẻ thấy một biểu tượng chương trình "start WampServer" trong Start menu.

Sau khi chạy chương trình WampServer các bạn sẻ thấy một biểu tượng ở khay hệ thống. Biểu tượng này có ba trạng thái tương ứng với ba màu như sau:

- Màu đỏ: Chương trình mới khởi động và chưa có thành phần nào được khởi động.
- Màu vàng: Có một hoặc nhiều thành phần chưa được khởi động.
- Màu xanh: Tất cả các thành phần đã được khởi động. Trạng thái này các bạn mới có thể sử dụng WampServer.

Sau khi cài đặt WampServer, các bạn sẻ thấy một thư mục quan trọng C:\wamp\"3 chữ w" (Sau này gọi là thư mục "3 chữ w" hoặc thư mục web root). Đây là thư mục chứa các file của website (PHP, HTML, CSS, JS, hình ảnh...). Phải đảm bảo 100% các file của ứng dụng web nằm trong thư mục "3 chữ w".

Bây giờ để kiểm tra xem WampServer có hoạt động không các bạn mở trình duyệt web (Firefox, Chrome, IE...) lên và truy cập địa chỉ localhost (Đối với Windows 8 thì truy cập 127.0.0.1). Nếu các bạn thấy trang giao diện của WampServer thì tức là WampServer đã hoạt động tốt và các bạn có thể bắt đầu sử dụng WampServer để lập trình ứng dụng web của mình.

Để thuận tiện sau này, các bạn vào thư mục "3 chữ w" xóa tất cả các file trong thư mục này (Thường chỉ có file index[dot]php). Lưu ý, sau khi xóa tất cả các file trong thư mục "3 chữ w" thì khi truy cập localhost các bạn sẻ không còn thấy trang giao diện WampServer nữa.

PS: Vì tôi chưa được phép đăng liên kết nên chổ "3 chữ w" các bạn thay lại tương ứng.

Altis2014
28-10-2014, 16:43
Bác có yahoo hay skype, fb k ? e có chút " lỗ hổng " muốn giao lưu và nhờ bác giúp thêm :) Tks bác

filiallion
29-10-2014, 14:28
Bác có yahoo hay skype, fb k ? e có chút " lỗ hổng " muốn giao lưu và nhờ bác giúp thêm :) Tks bác
Bạn vào link Google+ của tôi và add friend rồi trao đổi qua Hangout nha bạn.

Link Google+: plus[dot]google[dot]com/103116221369826139041 (Thay [dot] bằng dấu chấm vì tôi chưa được phép đăng link)

filiallion
03-11-2014, 19:15
CẤU TRÚC THƯ MỤC WEBSITE (PHẦN 3)

Trong ứng dụng web, việc bố trí cấu trúc thư mục website phần nào ảnh hưởng tới quá trình viết mã lệnh ứng dụng. Để cho cấu trúc thư mục website được rõ ràng, tường minh và quan trọng đó là khả năng mở rộng ứng dụng mà không làm thay đổi cấu trúc ban đầu thì các bạn cần phải xây dựng cho ứng dụng của mình một cấu trúc tốt trước khi bắt đầu viết mã lệnh đầu tiên.

Mỗi phong cách viết khác nhau có thể các bạn sẽ có những cấu trúc khác nhau. Vì vậy, tôi cũng không yêu cầu các bạn tuân theo cấu trúc của tôi đưa ra nhưng để tiện lợi trong quá trình theo dõi loạt bài viết này thì các bạn nên bố trí cấu trúc thư mục website như của tôi cho thuận tiện.

Cấu trúc thư mục website mà tôi đưa ra như sau:

admin
configs
extends
libraries
models
views
-----admin
-----front
templates
-----admin
-----front
userfiles

Trong đó:

- admin: Chứa các file xử lý của trang quản trị.
- configs: Chứa các file cấu hình website.
- extends: Chứa các thành phần mở rộng (Editor, player...).
- libraries: Chứa thư viện cần thiết để lập trình.
- models: Chứa các file xử lý tương tác với DB (Lấy dữ liệu, thêm mới, chỉnh sửa, xóa...).
- views: Chứa các file giao diện HTML của website. Tôi chia thành hai nhóm là admin (Trang quản trị) và front (Trang người dùng).
- templates: Chứa các file CSS, JS, hình ảnh... Tôi cũng chia làm hai nhóm là admin và front.
- userfiles: Chứa các file do người dùng tải lên.

Mỗi trang của ứng dụng web tôi đã chia thành ba phần như sau:

- Trang xử lý: Chứa mã lệnh PHP xử lý các yêu cầu từ người dùng và trả kết quả lại cho người dùng.
- Model: Thành phần tương tác trực tiếp với DB. Mỗi bảng dữ liệu trong DB tôi sẽ có một file tương ứng trùng tên với bảng dữ liệu đó và đặt trong thư mục models để người lập trình dễ kiểm soát.
- View: Thành phần giao diện HTML của website. Thành phần này sẽ nhận kết quả trả lại từ trang xử lý để trình bày dữ liệu đó theo giao diện HTML đã thiết kế.

Với cấu trúc như trên, tôi đã tách tối đa phần mã lệnh PHP với mã lệnh HTML để giúp mã lệnh website trở nên trong sáng hơn, dễ bảo trì, nâng cấp hơn.

filiallion
05-11-2014, 19:25
CẤU TRÚC DB (PHẦN 4)

Dự án website mà tôi hướng dẫn để làm ví dụ cho các bạn học lập trình PHP cơ bản được thiết kế gồm các thành phần sau:

Phần quản trị (Tôi gọi là admin):

- Đăng nhập, đăng xuất.
- Quản lý thành viên (Danh sách, thêm mới, chỉnh sửa, xóa).
- Quản lý danh mục sản phẩm (Danh sách, thêm mới, chỉnh sửa, xóa).
- Quản lý sản phẩm (Danh sách, thêm mới, chỉnh sửa, xóa).

Phần người dùng (Tôi gọi là front):

- Trang chủ (Hiển thị những sản phẩm mới nhất).
- Trang danh sách sản phẩm (Danh sách tất cả sản phẩm, danh sách các sản phẩm theo danh mục).
- Trang chi tiết sản phẩm.
- Và một số thành phần phụ trên website (Danh mục).

Với website được thiết kế như trên, cấu trúc DB tôi sẽ thiết kế đơn giản như sau:

Bảng thành viên (Đặt tên là tbl_user):

- user_id: Khóa chính, tăng tự động (Kiểu int, độ dài 11).
- username: Tài khoản (Kiểu varchar, độ dài 32).
- password: Mật khẩu (Kiểu varchar, độ dài 32).
- fullname: Họ tên (Kiểu varchar, độ dài 100).
- email: Email (Kiểu varchar, độ dài 100).
- status: Trạng thái (Kiểu tinyint, độ dài 1).
- created: Ngày giờ thêm mới (Kiểu datetime).
- modified: Ngày giờ chỉnh sửa (Kiểu datetime).

Bảng danh mục sản phẩm (Đặt tên là tbl_category):

- category_id: Khóa chính, tăng tự động (Kiểu int, độ dài 11).
- name: Tên danh mục (Kiểu varchar, độ dài 255).
- status: Trạng thái (Kiểu tinyint, độ dài 1).
- created: Ngày giờ thêm mới (Kiểu datetime).
- modified: Ngày giờ chỉnh sửa (Kiểu datetime).

Bảng sản phẩm (Đặt tên là tbl_product):

- product_id: Khóa chính, tăng tự động (Kiểu int, độ dài 11).
- category_id: ID danh mục (Kiểu int, độ dài 11).
- name: Tên sản phẩm (Kiểu varchar, độ dài 255).
- price: Giá bán (Kiểu int, độ dài 11).
- detail: Chi tiết (Kiểu text).
- image: Hình ảnh (Kiểu varchar, độ dài 255).
- status: Trạng thái (Kiểu tinyint, độ dài 1).
- created: Ngày giờ thêm mới (Kiểu datetime).
- modified: Ngày giờ chỉnh sửa (Kiểu datetime).

Nếu các bạn muốn thêm thông tin lưu trữ trong DB thì các bạn có thể tự thêm vào và tôi sẽ hỗ trợ các bạn.

filiallion
12-11-2014, 20:21
QUẢN LÝ DB VỚI PHPMYADMIN (PHẦN 5)

Để quản lý DB (Tạo mới, chỉnh sửa, xóa...) tôi thường sử dụng một ứng dụng mã nguồn mở có tên phpMyAdmin. Trong bộ cài đặt WampServer thì phpMyAdmin đã được tích hợp sẵn. Để sử dụng phpMyAdmin quản lý DB, các bạn thực hiện theo một số hướng dẫn sau (Tôi sử dụng phiên bản phpMyAdmin 4.1.14):

Truy cập phpMyAdmin tích hợp sẵn trong WampServer:

- Khởi động WampServer.
- Mở trình duyệt web và truy cập địa chỉ localhost/phpmyadmin. Nếu xuất hiện giao diện phpMyAdmin trên trình duyệt thì bạn đã truy cập thành công ứng dụng phpMyAdmin.

Tạo mới, xóa DB:

* Tạo mới:

- Nhấp tab "Databases" để mở giao diện tạo mới DB.
- Ở khu vực "Create database" nhập tên DB ở trường "Database name", chọn collation ở danh sách "Collation" (Thường thì chọn là "utf8_general_ci").
- Nhấp nút "Create" để tạo mới DB.
- DB được tạo mới sẽ xuất hiện trong danh sách ở khung bên trái.

* Xóa:

- Tại giao diện danh sách các DB, chọn các DB cần xóa.
- Nhấp chọn "Drop" để xóa các DB đã được chọn.

Tạo mới, chỉnh sửa, xóa bảng dữ liệu, trường dữ liệu trong DB:

* Tạo mới:

- Chọn DB cần tương tác bằng cách nhấp vào tên DB trong danh sách ở khung bên trái.
- Tại tab "Structure", ở khu vực "Create table" các bạn nhập tên bảng dữ liệu vào trường "Name", số lượng các trường dữ liệu của bảng ở trường "Number of columns".
- Nhấp nút "Go".
- Ở giao diện khai báo thông tin các trường dữ liệu của bảng, các bạn khai báo các thông tin như tên trường dữ liệu (Cột "Name"), kiểu dữ liệu (Cột "Type"), độ dài (Cột "Length/Values"), chọn khóa chính (Cột "Index", chọn "PRIMARY"), tăng tự động (Check chọn cột "A_I").
- Nhấp nút "Save" để tạo bảng dữ liệu với các trường dữ liệu đã khai báo.

* Chỉnh sửa, xóa bảng dữ liệu, trường dữ liệu:

- Để chỉnh sửa bảng dữ liệu bạn nhấp vào "Structure" của bảng dữ liệu đó rồi vào tab "Operations" để chỉnh sửa.
- Để xóa bảng dữ liệu bạn chỉ cần chọn bảng dữ liệu cần xóa và chọn "Drop" ở danh sách "With selected".
- Để chỉnh sửa hoặc xóa trường dữ liệu của bảng, bạn cũng vào "Structure" của bảng dữ liệu đó vào lựa chọn các tác vụ chỉnh sửa hoặc xóa trường dữ liệu bạn muốn.

Để tìm hiểu chi tiết hơn về cách sử dụng phpMyAdmin, các bạn có thể truy cập liên kết sau: docs[dot]phpmyadmin[dot]net/en/latest.

filiallion
14-11-2014, 19:31
THÔNG TIN CẤU HÌNH WEBSITE (PHẦN 6)

Kể từ phần này tôi bắt đầu hướng dẫn các bạn từng bước hoàn thành dự án website giới thiệu sản phẩm và qua đó tôi sẽ hướng dẫn các bạn nắm rõ các kiến thức về lập trình PHP cơ bản.

Một điều quan trọng tôi cần lưu ý với các bạn là trong quá trình lập trình thì tôi sẽ đưa ra nhiều khối lệnh và tôi sẽ lựa chọn ra một số kiến thức trong khối lệnh đó để trình bày, giải thích cho các bạn nắm kiến thức lập trình PHP. Những kiến thức mới nhưng tôi không hướng dẫn, giải thích là do những kiến thức đó chưa tới lúc phải truyền đạt cho các bạn biết và mặc nhiên các bạn chấp nhận viết mã lệnh giống như tôi đưa ra. Tất nhiên những kiến thức mới đó tôi sẽ trình bày, giải thích cho các bạn ở những phần sau.

Những kiến thức tôi đề cập trong phần này gồm:

- File PHP.
- Câu lệnh PHP.
- Hằng.
- Ghi chú.

Và để bắt đầu lập trình website các bạn cần khai báo thông tin cấu hình website (Thông tin cấu hình DB và một số thông tin cần thiết khác). Các thông tin cấu hình được khai báo trong file PHP cấu hình (Tôi gọi là file config[dot]php) đặt trong thư mục configs của website.

Nội dung file configs/config[dot]php như sau:

<?php
//Thông tin website
define('SITE_URL', 'localhost/');//Bạn thêm "hắc tê tê pê... giúp"
//Thông tin cấu hình DB
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_DATABASE', 'php_1');
?>

* File PHP:

Để viết lệnh PHP các bạn cần phải viết mã lệnh PHP trong file có phần mở rộng là "[dot]php". Ví dụ như file config[dot]php tôi vừa tạo.

Lưu ý khi các bạn đặt tên file cần tuân thủ theo qui tắc sau:

- Tên file đồng nhất tiếng Việt không dấu hoặc tiếng Anh.
- Chỉ sử dụng các số từ 0 đến 9, từ a đến z (Không phân biệt hoa, thường), dấu gạch dưới "_", dấu gạch giữa "-". Như vậy, khoảng trắng không được phép dùng để đặt tên file.

* Câu lệnh PHP:

Trong khối lệnh trên, toàn bộ các câu lệnh PHP đều được đặt trong cặp ký hiệu bắt đầu là <?php và kết thúc là ký hiệu ?>. Cặp ký hiệu này để khai báo cho trình PHP biết để biên dịch các câu lệnh bên trong.

Mỗi câu lệnh được viết trên một hàng và kết thúc câu lệnh là dấu chấm phẩy ";".

* Hằng:

Ở đây, tôi đã khai báo 05 hằng gồm:

- SITE_URL: Địa chỉ liên kết tuyệt đối tới website.
- DB_SERVER: Tên server chạy DB (Mặc định là localhost).
- DB_USERNAME: Tài khoản kết nối DB (Đối với ứng dụng WampServer thì tài khoản này mặc định là root).
- DB_PASSWORD: Mật khẩu kết nối DB (Đối với ứng dụng WampServer thì mật khẩu mặc định là rỗng).
- DB_DATABASE: Tên DB mà các bạn khởi tạo (Tôi đặt tên là php_1).

Như vậy, để định nghĩa một hằng các bạn sử dụng hàm (Hàm là gì tôi sẽ giải thích ở những phần sau) define. Hàm define có hai tham số (Tham số cũng sẽ được giải thích ở những phần sau):

- Tham số đầu tiên là tên hằng (Ví dụ SITE_URL, DB_SERVER...) được viết toàn bộ bằng chữ in hoa.
- Tham số thứ hai là giá trị của hằng (Ví dụ localhost...).

Khi định nghĩa hằng, các bạn lưu ý là không thể định nghĩa một hằng hai lần (Tức hằng là duy nhất).

Để sử dụng hằng đã được định nghĩa, các bạn chỉ việc gọi tên là được (Ví dụ là SITE_URL, DB_SERVER...).

* Ghi chú:

Trong đoạn lệnh trên, các bạn còn thấy hai dòng bắt đầu bằng dấu "//". Đây là hai dòng ghi chú giúp nhắc nhở cho người lập trình ghi nhớ chứ trình PHP không biên dịch hai dòng này và hai dòng này cũng không ảnh hưởng hay gây ra lỗi gì cho khối lệnh PHP.

Để ghi chú các bạn có nhiều cách như sau:

- Để ghi chú trên một dòng, các bạn sử dụng ký hiệu "//".
- Để ghi chú trên nhiều dòng, các bạn sử dụng ký hiệu /**/.

Ví dụ:

//Ghi chú một dòng
/*
Ghi chú dòng 1
Ghi chú dòng 2
*/

Qua bài này, hi vọng các bạn nắm được những câu lệnh PHP đầu tiên.

filiallion
21-11-2014, 19:04
KẾT NỐI DB (PHẦN 7)

Nội dung kiến thức phần này gồm:

- Liên kết file (Require, include).
- Biến.
- Kiểu dữ liệu.

Website giới thiệu sản phẩm là một website động (Có lưu trữ dữ liệu trong DB) nên để PHP có thể kết nối, tương tác với DB (Ở đây là MySQL) thì PHP đã cũng cấp sẳn các hàm để làm việc đó.

Bây giờ, các bạn tạo một file dùng để viết mã lệnh PHP kết nối tới DB (Tôi gọi là file connect[dot]php) trong thư mục libraries.

Nội dung file libraries/connect[dot]php như sau:

<?php
//Require
require 'configs/config[dot]php';

//Kết nối
$connect = mysql_pconnect(DB_SERVER, DB_USERNAME, DB_PASSWORD) or die('Not connected DB!');
$db = mysql_select_db(DB_DATABASE, $connect) or die('Not selected DB!');

//Yêu cầu lưu trữ UTF8 (Tiếng Việt)
mysql_query('SET NAMES UTF8', $connect);
?>

Khối lệnh trên dùng để thực hiện kết nối với MySQL. Trong đó:

- Hàm mysql_pconnect dùng để kết nối tới DB với ba tham số lần lượt là tên server chứa DB (Đã khai báo ở hằng DB_SERVER), tài khoản kết nối DB (Đã khai báo ở hằng DB_USERNAME) và mật khẩu kết nối DB (Đã khai báo ở hằng DB_PASSWORD). Nếu kết nối thành công thì PHP sẽ tiếp tục thực hiện các câu lệnh bên dưới, ngược lại nếu kết nối không thành công (Có thể thông tin khai báo bị sai) thì phần lệnh phía sau "die('Not connected DB!')" sẽ được thực thi in ra màn hình câu "Not connected DB!" và PHP sẽ dừng lại tại đây (Tức những câu lệnh bên dưới sẽ không được thực thi). Nếu kết nối thành công thì hàm mysql_pconnect sẽ trả về dữ liệu kết nối và gán vào biến $connect.
- Hàm mysql_select_db với hai tham số lần lượt là tên DB kết nối (Đã khai báo ở hằng DB_DATABASE) và dữ liệu kết nối DB (Biến $connect).
- Hàm mysql_query dùng để truy vấn câu lệnh SQL "SET NAMES UTF8" với mục đích yêu cầu MySQL lưu trữ dữ liệu theo kiểu UTF8 (Tức là lưu được tiếng Việt).

* Liên kết file (Require, include):

Phần trước, tôi có tạo một file config[dot]php để khai báo các thông tin cấu hình website. Ở file connect[dot]php này tôi cần sử dụng các thông tin đó dưới dạng các hằng đã được khai báo. Vì vậy, tôi cần liên kết với file config[dot]php đã tạo bằng lệnh require như trên.

Vậy, lệnh require các bạn có thể hiểu là dùng để liên kết một file PHP đã tồn tại vào một file PHP khác (Hoặc cũng có thể hiểu là với câu lệnh require như trên thì toàn bộ nội dung file configs/config[dot]php đã nằm ngay tại vị trí câu lệnh).

Ngoài lệnh require, chúng ta còn có một lệnh tương tự là require_once với cách sử dụng như require chỉ khác một điều là lệnh require_once có kiểm tra xem file được liên kết đã được liên kết trước đó chưa. Nếu file chưa được liên kết thì lệnh này sẽ liên kết mới, ngược lại thì lệnh này sẽ không liên kết file đó nữa.

Có ý nghĩa và tác dụng tương tự lệnh require, require_once tương ứng là lệnh include, include_once. Hai lệnh require và include (Tương tự là require_once và include_once) về cơ bản là giống nhau nhưng có một sự khác biệt nhỏ các bạn có thể tìm hiểu thêm ở liên kết php[dot]net/manual/en/function[dot]require[dot]php và php[dot]net/manual/en/function[dot]include[dot]php.

* Biến:

Ở khối lệnh trên tôi có sử dụng hai biến là $connect và $db. Như vậy, để tạo ra một biến trong PHP các bạn chỉ việc khai báo bằng cách đặt dấu "$" ngay đầu tên biến.

Một số lưu ý khi khao báo biến:

- Tên biến chỉ chấp nhận các số từ 0 đến 9, ký tự từ a đến z (Kể cả chữ in hoa) và dấu gạch dưới "_".
- Tên biến không được bắt đầu bằng số.
- Không đặt tên biến là $this vì biến $this là một biến đặc biệt mặc định của PHP.

Ví dụ một số cách đặt tên biến như sau:

$a;
$_a;
$a1;

Khi khai báo biến các bạn có thể gán giá trị cho biến bằng toán tử gán "=". Ví dụ:

$a = 1;
$b = 'Hello';

Các bạn có thể tìm hiểu thêm về biến trong PHP ở liên kết php[dot]net/manual/en/language[dot]variables[dot]php.

* Kiểu dữ liệu:

Kiểu dữ liệu trong PHP có thể được chia thành ba nhóm sau:

- Nhóm scalar (Vô hướng).
- Nhóm compound (Hỗn hợp).
- Nhóm special (Đặc biệt).

Nhóm scalar gồm:

- Boolean: Gồm hai giá trị là "true" và "false".
- Integer: Kiểu số nguyên.
- Float: Kiểu số thực.
- String: Kiểu chuổi.

Đối với kiểu chuổi (String) thì các bạn phải đặt trong dấu nháy đơn hoặc dấu nháy đôi. Dấu nháy đơn hay dấu nháy đôi cũng có một chút khác biệt (Các bạn có thể tìm hiểu thêm).

Nhóm compound gồm:

- Array: Mãng (Sẽ có một bài giải thích rõ kiểu mãng).
- Object: Đối tượng.

Nhóm special gồm:

- NULL: Kiểu null (Tức là không có gì hết. Lưu ý là khác với chuổi '').
- Resource: Kiểu tài nguyên do PHP tạo ra.

Các bạn có thể tìm hiểu thêm về kiểu dữ liệu trong PHP ở liên kết php[dot]net/manual/en/language[dot]types[dot]php.

filiallion
29-11-2014, 20:27
TRANG ĐĂNG NHẬP, ĐĂNG XUẤT (PHẦN 8)

Từ phần này, tôi sẽ hướng dẫn các bạn thực hiện các trang trong phần quản trị (Admin).

Nội dung kiến thức phần này gồm:

- Session.
- Câu lệnh điều kiện (Cấu trúc điều khiển).
- Toán tử.

Trong thư mục admin, các bạn tạo mới một thư mục tên là user để chứa các file xữ lý liên quan tới thành viên (Đăng nhập, đăng xuất, danh sách, thêm mới, chỉnh sửa).

Trong thư mục admin/user, tạo mới file login[dot]php để viết mã lệnh xử lý đăng nhập.

Nội dung file admin/user/login[dot]php như sau:

<?php
//Khởi động session
session_start();

//Kiểm tra nếu đã đăng nhập thì quay về trang chủ quản trị
if(isset($_SESSION['user'])){
header('location:../home/home[dot]php');
}

//Require các file cần thiết
require '../../configs/config[dot]php';
require '../../libraries/connect[dot]php';
require '../../models/user[dot]php';

//Kiểm tra dữ liệu POST lên
if(isset($_POST['username']) && !empty($_POST['username']) && isset($_POST['password']) && !empty($_POST['password'])){
//Gán tài khoản và mật khẩu nhận được từ form vào 2 biến tương ứng
$username = $_POST['username'];
$password = $_POST['password'];

//Lấy thông tin thành viên từ DB
$user = get_user_by_username($username);

//Kiểm tra sự tồn tại của thành viên và mật khẩu có trùng khớp
if($user && $user['password'] === md5($password)){
//Tạo session lưu thông tin thành viên đăng nhập thành công
$_SESSION['user'] = $user;

//Chuyển hướng về trang chủ quản trị
header('location:../home/home[dot]php');
}else{
//Bật cờ lỗi
$error = true;
}
}

//Require file giao diện (View)
require '../../views/admin/user/login[dot]tpl[dot]php';
?>

Lưu ý:

- Các bạn mở file libraries/connect[dot]php và xóa dòng lệnh "require 'configs/config[dot]php';". File configs/config[dot]php sẽ được require ở các file xữ lý chứ không require trong file libraries/connect[dot]php nữa. Hôm trước tôi thực hiện như vậy là để các bạn dễ hình dung vấn đề.
- Trang chủ quản trị tôi sẽ không hướng dẫn các bạn thực hiện mà sẽ để mở cho các bạn tự phát triển, hoàn thiện ứng dụng.

Tiếp theo, trong thư mục models các bạn tạo một file tên là user[dot]php để viết các hàm tương tác với DB (Tôi gọi là model. Tôi sẽ giải thích ở các phần sau).

Nội dung file models/user[dot]php như sau:

<?php
function get_user_by_username($username){
//SQL
$sql = "SELECT * FROM tbl_user WHERE username = '$username' AND status = 1";

//Query
$query = mysql_query($sql);

//Fetch và return
return mysql_fetch_assoc($query);
}
?>

File admin/user/login[dot]php ở trên chỉ mới là file xử lý, trang đăng nhập còn cần phải có giao diện (Tôi gọi là view). Về giao diện HTML tôi chỉ trình bày đơn giản và cũng không giải thích về mã lệnh HTML.

Trong thư mục views/admin, các bạn tạo mới một thư mục tên là user để chứa các file trình bày giao diện HTML.

Trong thư mục views/admin/user, tạo mới file login[dot]tpl[dot]php (Tên file này tôi thêm "[dot]tpl" để dễ phân biệt với file xử lý login[dot]php) để trình bày giao diện trang đăng nhập.

Nội dung file views/admin/user/login[dot]tpl[dot]php như sau:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Quản trị - Đăng nhập</title>
</head>
<body>

<form name="login" method="POST" action="">
<?php if(isset($error) && $error == true): ?>
<p style="color:red;">Sai Tài khoản hoặc Mật khẩu!</p>
<?php endif; ?>

<p>
<label>Tài khoản:</label>
<input type="text" name="username" value="" />
</p>
<p>
<label>Mật khẩu:</label>
<input type="password" name="password" value="" />
</p>
<p>
<input type="submit" value="Đăng nhập" />
</p>
</form>

</body>
</html>

Bây giờ các bạn vào phpMyAdmin để thêm mới một dòng dữ liệu vào bảng tbl_user với các thông tin như: Tài khoản, mật khẩu (Mã hóa MD5), kích hoạt (Nhập giá trị là 1)... rồi bắt đầu truy cập trang đăng nhập theo địa chỉ localhost/admin/user/login[dot]php để kiểm tra.

Đối với trang đăng xuất, trong thư mục admin/user các bạn tạo một file tên là logout[dot]php để xử lý đăng xuất.

Nội dung file admin/user/logout[dot]php như sau:

<?php
//Khởi động session
session_start();

//Hủy toàn bộ session
session_destroy();

//Quay về trang đăng nhập
header('location:login[dot]php');
?>

Trang đăng xuất không có giao diện hay truy cập DB nên mã lệnh chỉ đơn giản như vậy.

* Session:

Session dùng để lưu thông tin mà người lập trình muốn lưu giữ (Hoặc truyền qua trang khác) để có thể sử dụng ở mọi file PHP của ứng dụng. Nếu các bạn chỉ lưu thông tin và sử dụng duy nhất ở một file PHP nào đó thì tôi khuyên các bạn nên sử dụng biến thay vì sử dụng session.

File admin/user/login[dot]php, tôi có khai báo hàm session_start với mục đích khởi động session. Các bạn lưu ý là cần phải khởi động session trước khi sử dụng.

Để tạo ra một session các bạn sử dụng biến $_SESSION do PHP cung cấp. $_SESSION là một biến kiểu mãng nên các bạn sẽ sử dụng như một mãng (Sẽ trình bày ở các phần sau). Các bạn có thể tạo ra một session theo mẫu sau:

$_SESSION['Tên_session'] = 'Giá_trị_của_session';

Ví dụ:

$_SESSION['a'] = 1;
$_SESSION['b'] = 'Hello';

Để sử dụng session đã khởi tạo, các bạn sử dụng theo mẫu sau:

$_SESSION['Tên_session'];

Các bạn có thể tìm hiểu thêm về session ở liên kết php[dot]net/manual/en/book[dot]session[dot]php.

* Câu lệnh điều kiện (Cấu trúc điều khiển):

Câu lệnh IF..ELSE:

if(Điều_kiện){
//Khối lệnh thỏa điều kiện
}

Hoặc

if(Điều_kiện){
//Khối lệnh thỏa điều kiện
}else{
//Khối lệnh không thỏa điều kiện
}

Hoặc

if(Điều_kiện_1){
//Khối lệnh thỏa điều kiện 1
}elseif(Điều_kiện_2){
//Khối lệnh không thỏa điều kiện 1 nhưng thỏa điều kiện 2
}else{
//Khối lệnh không thỏa điều kiện 1, 2
}

Các bạn có thể tham khảo các ví dụ sau:

Ví dụ 1:

if(1 == 1){
echo '1 = 1';
}

Ví dụ 2:

if(1 > 2){
echo '1 > 2';
}else{
echo '1 < 2';
}

Ở ví dụ 1, câu lệnh "echo '1 = 1'" sẽ được thực hiện và in ra màn hình dòng "1 = 1". Ví dụ 2, câu lệnh "echo '1 < 2'" sẽ được thực hiện và in ra màn hình dòng "1 < 2".

Trong PHP, để in ra một nội dung nào đó các bạn sử dụng câu lệnh "echo" như trên.

Các bạn có thể tìm hiểu thêm về câu lệnh điều kiện ở liên kết php[dot]net/manual/en/control-structures[dot]if[dot]php.

Câu lệnh SWITCH..CASE:

switch(Giá_trị_đem_so_sánh){
case Giá_trị_so_sánh_1:
//Khối lệnh thỏa giá trị so sánh 1
break;
case Giá_trị_so_sánh_2:
//Khối lệnh thỏa giá trị so sánh 2
break;
default:
//Khối lệnh không thỏa giá trị so sánh nào ở trên
}

Về SWITCH..CASE tôi không giải thích nhiều, các bạn có thể tìm hiểu thêm ở liên kết php[dot]net/manual/en/control-structures[dot]switch[dot]php.

* Toán tử:

Ngoài toán tử gán "=" hôm trước tôi đã nêu thì phần này tôi sẽ trình bày cho các bạn một số toán tử khác (Toán tử so sánh, toán tử toán học, toán tử "and", "or").

Toán tử so sánh gồm:

- Bằng (Về giá trị): ==
- Bằng (Về mọi thứ): ===
- Khác (Không bằng về giá trị): !=
- Khác (Không bằng về mọi thứ): !==
- Lớn hơn: >
- Lớn hơn hoặc bằng: >=
- Nhỏ hơn: <
- Nhỏ hơn hoặc bằng: <=
- Phủ định: !

Toán tử toán học gồm:

- Cộng: +
- Trừ: - - Nhân: *
- Chia: /
- Phần dư: %

Ngoài ra, có hai toán tử quan trọng là:

- Toán tử và (and): &&
- Toán tử hoặc (or): ||

Các bạn có thể tìm hiểu thêm về toán tử ở liên kết php[dot]net/manual/en/language[dot]operators[dot]php.

filiallion
01-12-2014, 18:59
TRANG DANH SÁCH THÀNH VIÊN (PHẦN 9)

Nội dung kiến thức phần này gồm:

- Hàm.
- Tham số.

Trong thư mục admin/user, tạo mới file list[dot]php để viết mã lệnh trang danh sách thành viên.

Nội dung file admin/user/list[dot]php như sau:

<?php
//Khởi động session
session_start();

//Kiểm tra nếu chưa đăng nhập thì quay về trang đăng nhập
if(!isset($_SESSION['user'])){
header('location:login[dot]php');
}

//Require các file cần thiết
require '../../configs/config[dot]php';
require '../../libraries/connect[dot]php';
require '../../models/user[dot]php';

//Lấy danh sách thành viên
$user_list = get_user_list();

//Require file giao diện (View)
require '../../views/admin/user/list[dot]tpl[dot]php';
?>

Mở file models/user[dot]php và thêm vào khối lệnh mới dưới đây:

function get_user_list(){
//SQL
$sql = "SELECT * FROM tbl_user ORDER BY user_id DESC";

//Query và return
return mysql_query($sql);
}

Trong thư mục views/admin/user, tạo mới file list[dot]tpl[dot]php để trình bày giao diện trang danh sách thành viên.

Nội dung file views/admin/user/list[dot]tpl[dot]php như sau:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Quản trị - Thành viên - Danh sách</title>
</head>
<body>

<table width="100%" cellpadding="10">
<tr>
<th>ID</th>
<th>Tài khoản</th>
<th>Họ tên</th>
<th>Trạng thái</th>
<th>Ngày tạo</th>
<th>Ngày chỉnh sửa</th>
<th>Tác vụ</th>
</tr>
<?php while($user = mysql_fetch_assoc($user_list)): ?>
<tr>
<td><?php echo $user['user_id']; ?></td>
<td><a href="<?php echo SITE_URL . 'admin/user/edit[dot]php?user_id=' . $user['user_id']; ?>"><?php echo $user['username']; ?></a></td>
<td><?php echo $user['fullname']; ?></td>
<td><?php echo ($user['status'] == 1) ? 'Kích hoạt' : 'Không kích hoạt'; ?></td>
<td><?php echo date('d-m-Y H:i:s', $user['created']); ?></td>
<td><?php echo date('d-m-Y H:i:s', $user['modified']); ?></td>
<td><a href="<?php echo SITE_URL . 'admin/user/delete[dot]php?user_id=' . $user['user_id']; ?>">Xóa</a></td>
</tr>
<?php endwhile; ?>
</table>

</body>
</html>

Các bạn truy cập trang danh sách thành viên theo địa chỉ localhost/admin/user/list[dot]php để kiểm tra.

* Hàm:

Ở phần trước trong file models/user[dot]php, tôi có khởi tạo một hàm tên là get_user_by_username và ở phần này tôi cũng tạo một hàm là get_user_list. Theo như những gì các bạn thấy thì hàm là một khối lệnh làm một nhiệm vụ gì đó theo ý đồ của người lập trình nhằm mục đích "đóng gói" và "tái sử dụng" ở nhiều nơi.

Để định nghĩa một hàm, các bạn thực hiện theo mẫu sau:

function Tên_hàm(){
//Khối lệnh thực hiện nhiệm vụ nào đó
}

Hoặc

function Tên_hàm(Tham_số_1, Tham_số_2, Tham_số_n){
//Khối lệnh thực hiện nhiệm vụ nào đó
}

Hoặc

function Tên_hàm(Tham_số_1 = 'Giá_trị_mặc_định_1', Tham_số_2 = 'Giá_trị_mặc_định_2', Tham_số_n = 'Giá_trị_mặc_định_n'){
//Khối lệnh thực hiện nhiệm vụ nào đó
}

Trong đó:

- Tên hàm phải tuân theo quy tắc đặt tên mà PHP quy định là chỉ chấp nhận các số từ 0 đến 9, chữ cái từ a đến z, dấu gạch dưới "_". Tên hàm không được bắt đầu bằng số và không được trùng lặp.
- Một hàm có thể có hoặc không có tham số truyền vào. Nếu có nhiều hơn một tham số thì các tham số phân cách nhau mởi dấu phẩy ",". Các tham số có thể gán giá trị mặc định cho nó.

Ví dụ 1:

function get_user_list(){
//Những dòng lệnh các bạn đã biết ở trên
}

Tôi đã tạo ra một hàm tên là get_user_list và hàm này không có tham số truyền vào. Nhiệm vụ của hàm get_user_list là lấy danh sách thành viên từ DB và trả về lại kết quả.

Ví dụ 2:

function get_user_by_username($username){
//Những dòng lệnh các bạn đã biết ở phần trước
}

Hàm ở trên tên là get_user_by_username và hàm này có một tham số là $username. Nhiệm vụ của hàm get_user_by_username là lấy thông tin thành viên từ DB và trả về lại kết quả.

Ở hai ví dụ trên, tôi có nhắc đến "trả về lại kết quả" vậy đó là gì? Câu này được thể hiện bằng từ khóa "return" ở cuối mỗi hàm mà các bạn thấy.

Ví dụ:

return mysql_query($sql);

Dòng lệnh này ở hàm get_user_list mà tôi đã định nghĩa ở trên dùng để trả về lại kết quả mà người lập trình mong muốn (Ở ví dụ này đó là kết quả truy vấn từ DB).

Một hàm có thể có giá trị trả về hoặc cũng có thể không có giá trị trả về tùy vào mục đích của người lập trình.

Các bạn có thể tìm hiểu thêm về hàm ở liên kết php[dot]net/manual/en/language[dot]functions[dot]php.

* Tham số:

Ở hàm get_user_by_username có khai báo một tham số là $username. Vậy tham số là những biến nhận giá trị truyền vào nhằm mục đích nào đó theo ý đồ của người lập trình.

Các tham số và biến được khởi tạo bên trong hàm thì chỉ tồn tại bên trong hàm đó.

Tham số bao gồm hai loại là:

- Tham trị.
- Tham biến.

Các bạn có thể tìm hiểu thêm về tham số ở liên kết php[dot]net/manual/en/functions[dot]arguments[dot]php.

locphatsim
01-12-2014, 19:09
ui đọc cả nùi thế này thật khó, thôi thì đành đi kiếm video vừa xem vừa học vậy

filiallion
03-12-2014, 19:40
TRANG THÊM MỚI THÀNH VIÊN (PHẦN 10)

Nội dung kiến thức phần này gồm:

- Lập trình với form.
- Mãng.

Trong thư mục admin/user, tạo mới file add[dot]php để viết mã lệnh trang thêm mới thành viên.

Nội dung file admin/user/add[dot]php như sau:

<?php
//Khởi động session
session_start();

//Kiểm tra nếu chưa đăng nhập thì quay về trang đăng nhập
if(!isset($_SESSION['user'])){
header('location:login[dot]php');
}

//Require các file cần thiết
require '../../configs/config[dot]php';
require '../../libraries/connect[dot]php';
require '../../models/user[dot]php';

//Nếu có POST dữ liệu lên thì xử lý
if($_POST){
//Nhận dữ liệu từ form và gán vào một mãng
$data = array(
'username' => $_POST['username'],
'password' => md5($_POST['password']),
'fullname' => $_POST['fullname'],
'email' => $_POST['email'],
'status' => isset($_POST['status']) ? 1 : 0,
'created' => date('Y-m-d H:i:s'),
'modified' => date('Y-m-d H:i:s')
);

//Thêm mới
if(add_user($data)){
//Tạo session để lưu cờ thông báo thành công
$_SESSION['success'] = true;

//Tải lại trang (Mục đích là để reset form)
header('location:add[dot]php');
}
}

//Require file giao diện (View)
require '../../views/admin/user/add[dot]tpl[dot]php';
?>

Mở file models/user[dot]php và thêm vào khối lệnh mới dưới đây:

function add_user($data){
//SQL
$sql = "INSERT INTO tbl_user(username, password, fullname, email, status, created, modified) VALUES('{$data['username']}', '{$data['password']}', '{$data['fullname']}', '{$data['email']}', {$data['status']}, '{$data['created']}', '{$data['modified']}')";

//Query và return
return mysql_query($sql);
}

Trong thư mục views/admin/user, tạo mới file add[dot]tpl[dot]php để trình bày giao diện trang thêm mới thành viên.

Nội dung file views/admin/user/add[dot]tpl[dot]php như sau:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Quản trị - Thành viên - Thêm mới</title>
</head>
<body>

<form name="add" method="POST" action="">
<?php if(isset($_SESSION['success'])): ?>
<p style="color:green;">Thành viên đã được thêm mới thành công!</p>
<?php unset($_SESSION['success']); ?>
<?php endif; ?>

<p>
<label>Tài khoản:</label>
<input type="text" name="username" value="" />
</p>
<p>
<label>Mật khẩu:</label>
<input type="password" name="password" value="" />
</p>
<p>
<label>Họ tên:</label>
<input type="text" name="fullname" value="" />
</p>
<p>
<label>Email:</label>
<input type="text" name="email" value="" />
</p>
<p>
<label>Trạng thái:</label>
<input type="checkbox" name="status" value="1" />
</p>
<p>
<input type="submit" value="Thêm mới" />
</p>
</form>

</body>
</html>

Các bạn truy cập trang thêm mới thành viên theo địa chỉ localhost/admin/user/add[dot]php để kiểm tra.

* Lập trình với form:

Form là vùng giành cho người dùng nhập dữ liệu. Form có hai phương thức để gởi dữ liệu lên server là POST và GET. Hai phương thức POST và GET đều cùng làm một nhiệm vụ là gởi dữ liệu lên server nhưng cách thức thì khác nhau.

Đối với phương thức POST dữ liệu được gởi lên server mà người dùng không nhìn thấy được dữ liệu được gởi đi là gì. Còn phương thức GET thì dữ liệu gởi đi được thể hiện trên URL (Thanh nhập địa chỉ website của trình duyệt).

Thông thường khi gởi dữ liệu lên server để cập nhật DB thì nên sử dụng phương thức POST. Phương thức GET thường được sử dụng trong một số trường hợp như: Phân trang, hiển thị theo danh mục...

Để tạo một form với phương thức POST, các bạn khai báo thuộc tính method là POST trong thẻ form HTML. Ví dụ:

<form name="add" method="POST" action="">

Để nhận dữ liệu do form đưa lên theo phương thức POST thì các bạn thực hiện theo mẫu sau:

$_POST['Tên_trường'];

Ví dụ:

$_POST['username'];
$_POST['password'];

Để tạo một form với phương thức GET, các bạn khai báo thuộc tính method là GET trong thẻ form HTML. Ví dụ:

<form name="add" method="GET" action="">

Ngoài ra, đối với phương thức GET các bạn còn có thể truyền dữ liệu trên URL bằng cách thực hiện theo mẫu sau:

urlpath?Biến_1=Giá_trị_1&Biến_2=Giá_trị_2&Biến_n=Giá_trị_n

Với mẫu trên, để khai báo các biến và giá trị tương ứng các bạn sẽ khởi đầu bằng dấu hỏi "?" và kế tiếp sau đó là các biến và giá trị tương ứng với biến. Nếu có nhiều hơn một biến thì các bạn phân cách bởi dấu và "&".

Ví dụ:

localhost/admin/user/edit[dot]php?user_id=1

Để nhận dữ liệu theo phương thức GET thì các bạn thực hiện theo mẫu sau:

$_GET['Tên_trường'];

Hoặc

$_GET['Tên_biến'];

Ví dụ:

$_GET['user_id'];

Các bạn có thể tìm hiểu thêm về POST ở liên kết php[dot]net/manual/en/reserved[dot]variables[dot]post[dot]php và GET ở liên kết php[dot]net/manual/en/reserved[dot]variables[dot]get[dot]php. Ngoài ra, các bạn nên tìm hiểu thêm một số biến PHP khác ở liên kết php[dot]net/manual/en/reserved[dot]variables[dot]php.

* Mãng:

Mãng là một kiểu dữ liệu trong PHP.

Để khởi tạo một mãng các bạn thực hiện theo mẫu sau:

$Tên_mãng = array();

Hoặc

$Tên_mãng = array(Phần_tử_1, Phần_tử_2, Phần_tử_n);

Hoặc

$Tên_mãng = array('Khóa_1'=>'Giá_trị_1', 'Khóa_2'=>'Giá_trị_2', 'Khóa_n'=>'Giá_trị_n');

Trong đó:

- Mẫu thứ nhất là tạo một mãng rỗng (Không có phần tử).
- Mẫu thứ hai là tạo một mãng có phần tử.
- Mẫu thứ ba là tạo một mãng có phần tử nhưng đây là một mãng tham chiếu. Tức có "khóa" tham chiếu tới "giá trị".

Để sử dụng các phần tử của mãng các bạn thực hiện theo mẫu sau:

- Đối với mãng phần tử theo chỉ số (Mẫu hai):

$Tên_mãng[Chỉ_số];

- Đối với mãng tham chiếu (Mẫu ba):

$Tên_mãng['Tên_khóa'];

Lưu ý: Chỉ số trong mãng PHP được tính bắt đầu từ 0.

Các bạn có thể tìm hiểu thêm về mãng ở liên kết php[dot]net/manual/en/language[dot]types[dot]array[dot]php.

ledung1403
05-12-2014, 09:13
Chào Mừng Tết Ất Mùi 2015 Cùng với GÀ ĐÔNG TẢO ÔNG KIỀU .Bạn sẽ nhận ngay những chú gà thương phẩm chỉ từ 320.000 vnđ/1 kg. ( gà Vip).

Chúng tôi nhận cung cấp gà giống toàn quốc.

Cung cấp các loại gà thịt cao cấp với nhiều mức độ gà khác nhau cho nhà hàng,đơn vị mở tiệc hay cá nhân có nhu cầu với giá thành hấp dẫn nhất.

Nhân cung cấp gà làm quà biếu,cho ,tặng cho các cá nhân và tập thể với số lượng không hạn chế.

Và Nhiều chương trình ưu đãi khác khi mua gà đông tảo tại Gà Đông Tảo Ông Kiều .Liên Hệ 0989670233 hoặc 0942334058
( Đặc biệt các bạn sẽ được nhận tặng một ( ibook ) về kỹ thuật chăn nuôi gà đông tảo .mà ngoài thị trường không bán . lưu hành nội bộ .)

Gà đông tảo - Quà Tặng cho Sếp- Niềm vui bất ngờ.

Gà Đông Tảo - Dành tặng người thân-bạn bè.

Gà Đông Tảo một món ăn thật độc và lạ cho những ngày ngỉ sắp tới bên gia đình.

sau là bảng giá chi tiết củ thể mời quý bà con tham khảo :
gà bóc trứng 120k/con
gà 1 tuần tuổi 150k/con
gà 2 tuần tuổi 180k/con
gà 3 tuần tuổi 220k/con
gà 1 tháng tuổi 250k/con
gà 45 ngày tuổi 300k/con
gà 2 tháng tuổi 330k/con
gà bố mẹ liên hệ
gà biếu tặng đẹp liên hệ
gà thịt tù từng thể trạng giá liên hệ .
trại gà gia đình tôi xin trân thành cảm ơn quý bà con đã tin tưởng và sự ủng hộ của quý bà con với gia đình . chúc quý bà con sức khỏe và gặt hái được nhieuf thanh công hơn nữa trong chăn nuôi và làm kinh tế .
trại gà gia đình chúng tôi phục vụ đơn đặt hàng của quý bà con 24/24 , nhận ship gà trên toàn quốc , giao hàng uy tín . ( nhận gà trả tiền ) . ko dúng gà ko lấy tiền

filiallion
05-12-2014, 19:08
TRANG CHỈNH SỬA THÀNH VIÊN (PHẦN 11)

Nội dung kiến thức phần này gồm:

- Đường dẫn.
- Các hàm PHP (isset, empty, header, date, md5, mysql_query, mysql_fetch_assoc).

Trong thư mục admin/user, tạo mới file edit[dot]php để viết mã lệnh trang chỉnh sửa thành viên.

Nội dung file admin/user/edit[dot]php như sau:

<?[dot]php
//Khởi động session
session_start();

//Kiểm tra nếu chưa đăng nhập thì quay về trang đăng nhập
if(!isset($_SESSION['user'])){
header('location:login[dot]php');
}

//Require các file cần thiết
require '../../configs/config[dot]php';
require '../../libraries/connect[dot]php';
require '../../models/user[dot]php';

//Lấy user_id từ URL
$user_id = $_GET['user_id'];

//Nếu có POST dữ liệu lên thì xử lý cập nhật
if($_POST){
//Nhận dữ liệu từ form và gán vào một mãng
$data = array(
'username' => $_POST['username'],
'password' => empty($_POST['password']) ? null : md5($_POST['password']),
'fullname' => $_POST['fullname'],
'email' => $_POST['email'],
'status' => isset($_POST['status']) ? 1 : 0,
'modified' => date('Y-m-d H:i:s')
);

//Cập nhật
if(edit_user($data, $user_id)){
//Tạo session để lưu cờ thông báo thành công
$_SESSION['success'] = true;

//Tải lại trang (Mục đích là để tải lại thông tin mới)
header('location:edit[dot]php?user_id=' . $user_id);
}
}

//Lấy thông tin thành viên để trình bày trên form
$user = get_user_by_id($user_id);

//Require file giao diện (View)
require '../../views/admin/user/edit[dot]tpl[dot]php';
?>

Mở file models/user[dot]php và thêm vào khối lệnh mới dưới đây:

function get_user_by_id($user_id){
//SQL
$sql = "SELECT * FROM tbl_user WHERE user_id = $user_id";

//Query
$query = mysql_query($sql);

//Fetch và return
return mysql_fetch_assoc($query);
}

function edit_user($data, $user_id){
//SQL
$sql = "UPDATE tbl_user SET username = '{$data['username']}', fullname = '{$data['fullname']}', email = '{$data['email']}', status = {$data['status']}, modified = '{$data['modified']}'";

//Nếu có cập nhật mật khẩu
if($data['password'] != null){
$sql .= ", password = '$data['password']'";
}

//Điều kiện
$sql .= " WHERE user_id = $user_id";

//Query và return
return mysql_query($sql);
}

Trong thư mục views/admin/user, tạo mới file edit[dot]tpl[dot]php để trình bày giao diện trang chỉnh sửa thành viên.

Nội dung file views/admin/user/edit[dot]tpl[dot]php như sau:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Quản trị - Thành viên - Chỉnh sửa</title>
</head>
<body>

<form name="edit" method="POST" action="">
<?[dot]php if(isset($_SESSION['success'])): ?>
<p style="color:green;">Thành viên đã được chỉnh sửa thành công!</p>
<?[dot]php unset($_SESSION['success']); ?>
<?[dot]php endif; ?>

<p>
<label>Tài khoản:</label>
<input type="text" name="username" value="<?[dot]php echo $user['username']; ?>" />
</p>
<p>
<label>Mật khẩu:</label>
<input type="password" name="password" value="" />
</p>
<p>
<label>Họ tên:</label>
<input type="text" name="fullname" value="<?[dot]php echo $user['fullname']; ?>" />
</p>
<p>
<label>Email:</label>
<input type="text" name="email" value="<?[dot]php echo $user['email']; ?>" />
</p>
<p>
<label>Trạng thái:</label>
<input type="checkbox" name="status" value="1" <?[dot]php echo ($user['status'] == 1) ? 'checked="checked"' : ''; ?> />
</p>
<p>
<input type="submit" value="Chỉnh sửa" />
</p>
</form>

</body>
</html>

Các bạn truy cập trang danh sách thành viên và nhấp vào tài khoản để truy cập tới trang chỉnh sửa thành viên (Lưu ý tới liên kết của trang chỉnh sửa thành viên).

* Đường dẫn:

Trong các trang, các bạn đều require các file configs/config[dot]php, libraries/connect[dot]php và một số file khác. Khi require các bạn phải chỉ đúng đường dẫn tới file cần require và để thực hiện được thì [dot]php cung cấp một số "ký hiệu" giúp bạn thực hiện điều đó một cách linh hoạt. Và đường dẫn theo hướng dẫn dưới đây được gọi là đường dẫn tương đối.

Một số "ký hiệu" bạn cần biết như sau:

- Đứng tại vị trí thư mục hiện hành: ./
- Ra ngoài một cấp thư mục: ../
- Ra thư mục gốc (Web root): /

Ví dụ với cấu trúc thư mục như sau:

admin
-----user
----------edit[dot]php
configs
-----config[dot]php
libraries
-----connect[dot]php

Với cấu trúc thư mục như trên nếu:

- Đứng ở vị trí file edit[dot]php để viết lệnh và require file config[dot]php thì đường dẫn sẽ là:

../../configs/config[dot]php

- Đứng ở vị trí file connect[dot]php để viết lệnh và require file config[dot]php thì đường dẫn sẽ là:

../configs/config[dot]php

Ngoài ra, các bạn còn có thể sử dụng một số hàm do [dot]php cung cấp để lấy chính xác đường dẫn tới file.

* Các hàm PHP (isset, empty, header, date, md5, mysql_query, mysql_fetch_assoc):

- isset: Kiểm tra sự tồn tại của một biến. Nếu biến tồn tại thì trả về true, ngược lại trả về false.
- empty: Kiểm tra chuỗi dữ liệu có rỗng hay không. Nếu chuỗi rỗng thì trả về true, ngược lại trả về false.
- header: Chuyển hướng trang sang một trang mới.
- date: Định dạng ngày giờ.
- md5: Mã hóa một chuỗi theo thuật toán MD5.
- mysql_query: Thực thi (Truy vấn) câu SQL.
- mysql_fetch_assoc: Trả về một dòng dữ liệu từ recordset dưới dạng một mãng.

Tất cả các hàm trên các bạn có thể vào trang [dot]php[dot]net/docs[dot]php và sử dụng chức năng tìm kiếm để tìm hàm cần tìm hiểu.

superthin
06-12-2014, 10:00
Viết code thì nên để trong định dạng code, viết bình thường trông cứ như xả rác trên này. Vài lời góp ý!

onizuka
08-12-2014, 10:58
Viết code thì nên để trong định dạng code, viết bình thường trông cứ như xả rác trên này. Vài lời góp ý!

Đồng ý. Nhìn như một đống rác!

filiallion
08-12-2014, 19:30
Viết code thì nên để trong định dạng code, viết bình thường trông cứ như xả rác trên này. Vài lời góp ý!
Xin lỗi các bạn nhưng bộ editor của DDTH đâu cho phép tôi format, tôi muốn format đàng hoàng mà không biết phải làm sao đây bạn.

Các bạn có thể ghé sang link trên sinhvienit sẽ thấy tôi đăng bài rất "đẹp". Link sinhvienit[dot]net/forum/tung-buoc-hoc-lap-trinh-php-co-ban-qua-du-an-website-gioi-thieu-san-pham[dot]346823[dot]html (Vì chưa được phép đăng link nên các bạn edit giúp chữ [dot])

Tôi cũng không hiểu sao hay tại vì lí do gì mà DDTH không cho format. Các bạn nếu cũng không thể format được thì vui lòng thông cảm cho tôi.

filiallion
08-12-2014, 19:31
XÓA THÀNH VIÊN (PHẦN 12)

Phần này tôi không trình bày kiến thức lập trình PHP, các bạn chỉ thực hiện chức năng xóa thành viên dưới đây.

Trong thư mục admin/user, tạo mới file delete[dot]php để viết mã lệnh chức năng xóa thành viên.

Nội dung file admin/user/delete[dot]php như sau:

<?php
//Khởi động session
session_start();

//Kiểm tra nếu chưa đăng nhập thì quay về trang đăng nhập
if(!isset($_SESSION['user'])){
header('location:login[dot]php');
}

//Require các file cần thiết
require '../../configs/config[dot]php';
require '../../libraries/connect[dot]php';
require '../../models/user[dot]php';

//Lấy user_id từ URL
$user_id = $_GET['user_id'];

//Xóa
delete_user($user_id);

//Quay về trang danh sách thành viên
header('location:list[dot]php');
?>

Mở file models/user[dot]php và thêm vào khối lệnh mới dưới đây:

function delete_user($user_id){
//SQL
$sql = "DELETE FROM tbl_user WHERE user_id = $user_id";

//Query và return
return mysql_query($sql);
}

Xóa là một chức năng nên các bạn không phải tạo giao diện (View).

Các bạn truy cập trang danh sách thành viên, ở cột "Tác vụ" các bạn chọn tác vụ "Xóa" để thực hiện xóa thành viên tương ứng.

PS:

Xin lỗi các bạn nhưng bộ editor của DDTH đâu cho phép tôi format, tôi muốn format đàng hoàng mà không biết phải làm sao đây bạn.

Các bạn có thể ghé sang link trên sinhvienit sẽ thấy tôi đăng bài rất "đẹp". Link sinhvienit[dot]net/forum/tung-buoc-hoc-lap-trinh-php-co-ban-qua-du-an-website-gioi-thieu-san-pham[dot]346823[dot]html (Vì chưa được phép đăng link nên các bạn edit giúp chữ [dot])

Tôi cũng không hiểu sao hay tại vì lí do gì mà DDTH không cho format. Các bạn nếu cũng không thể format được thì vui lòng thông cảm cho tôi.

superthin
09-12-2014, 08:01
Gửi bạn filiallion (http://www.ddth.com/member.php/1045859-filiallion)

Đoạn code của bạn mình thử định dạng trong cặp mã: {PHP}đoạn code ở đây{/PHP} (thay dấu sừng trâu { bằng [ và } bằng ] nhé ) thì được như sau:



<?php
//Khởi động session
session_start();

//Kiểm tra nếu chưa đăng nhập thì quay về trang đăng nhập
if(!isset($_SESSION['user'])){
header('location:login[dot]php');
}

//Require các file cần thiết
require '../../configs/config[dot]php';
require '../../libraries/connect[dot]php';
require '../../models/user[dot]php';

//Lấy user_id từ URL
$user_id = $_GET['user_id'];

//Xóa
delete_user($user_id);

//Quay về trang danh sách thành viên
header('location:list[dot]php');
?>

Link: http://www.ddth.com/showthread.php/1262087-Từng-bước-học-lập-trình-PHP-cơ-bản-qua-dự-án-website-giới-thiệu-sản-phẩm/page2#ixzz3LMF4G7ue



Như vậy, bạn thử định dạng mã đó như mình xem. Nếu không được, hãy PM cho MOD/ Admin hỏi xem tại sao bạn không định dạng được để được hỗ trợ thêm.

Nói thiệt, cái cách trình bày code mà như bạn thì mình cho rằng không giúp ích gì cho các thành viên ở đây, đọc vào bài viết rối rắm vô cùng, không ai đủ kiên nhẫn đọc bài bạn viết, vậy công sức bạn post bài có ích gì?

filiallion
10-12-2014, 21:45
Tôi sẽ kết thúc đăng bài viết tại DDTH, các bạn quan tâm bài viết có thể xem tại:

- SinhVienIT theo link sinhvienit[dot]net/forum/tung-buoc-hoc-lap-trinh-php-co-ban-qua-du-an-website-gioi-thieu-san-pham[dot]346823[dot]html

Hoặc

- KenhSinhVien theo link kenhsinhvien[dot]net/topic/tung-buoc-hoc-lap-trinh-php-co-ban-qua-du-an-website-gioi-thieu-san-pham[dot]373124

Hoặc

- Google+ của tôi tại link plus[dot]google[dot]com/103116221369826139041 (Support qua Hangouts).

Tại SinhVienIT và KenhSinhVien bài viết được "format" tốt hơn và dễ đọc hơn.

filiallion
23-12-2014, 21:58
Loạt bài viết này tôi vẫn đang tiếp tục đăng đều đặng lên các trang:

- SinhVienIT theo link sinhvienit[dot]net/forum/tung-buoc-hoc-lap-trinh-php-co-ban-qua-du-an-website-gioi-thieu-san-pham[dot]346823[dot]html

Hoặc

- KenhSinhVien theo link kenhsinhvien[dot]net/topic/tung-buoc-hoc-lap-trinh-php-co-ban-qua-du-an-website-gioi-thieu-san-pham[dot]373124

Hoặc

- Google+ của tôi tại link plus[dot]google[dot]com/103116221369826139041 (Support qua Hangouts).

Sắp tới tôi tiếp tục đăng tiếp loạt bài về PHP nâng cao (OOP) để các bạn quan tâm có thể tìm hiểu.

pin_12591
31-12-2014, 13:46
hay quá, bạn có skyper không? cho mình với, để mình học hỏi bạn. bạn add skyper của mình nhé: tranvanchienhn

filiallion
06-01-2015, 18:29
hay quá, bạn có skyper không? cho mình với, để mình học hỏi bạn. bạn add skyper của mình nhé: tranvanchienhn
Google+ của tôi tại link plus[dot]google[dot]com/103116221369826139041. Tôi sẽ support qua Hangouts nha bạn.

svsg2013
16-01-2015, 16:28
bài viết của bác rất chi tiết và dễ hiểu, có thểm vài tấm hình nữa cho sinh động lên thì hay biết mấy

hoangdrich
19-01-2015, 14:08
Rất bổ ích, thanks hiệp sĩ CNTT

filiallion
01-03-2015, 19:46
bài viết của bác rất chi tiết và dễ hiểu, có thểm vài tấm hình nữa cho sinh động lên thì hay biết mấy


Rất bổ ích, thanks hiệp sĩ CNTT
Cảm ơn các bạn đã quan tâm!

lehoang3333
11-03-2015, 08:55
ban oi - minh dung appserv 2.5.10 ( vay de tao file viet ma lenh PHP ket noi DB thi phai tao file do trong thu muc nao vay ? ) - minh la nguoi moi bat dau tim hieu lap trinh web, nen rat ngo mong ban giup do

filiallion
16-03-2015, 21:15
ban oi - minh dung appserv 2.5.10 ( vay de tao file viet ma lenh PHP ket noi DB thi phai tao file do trong thu muc nao vay ? ) - minh la nguoi moi bat dau tim hieu lap trinh web, nen rat ngo mong ban giup do
Chào bạn,

Bạn bỏ toàn bộ file PHP vào trong thư mục www nha bạn. Ví dụ:

C:/appserv/www

filiallion
28-03-2015, 20:56
Cảm ơn các bạn đã quan tâm!

nttalex
05-05-2015, 09:10
Bài viết của bạn dài thật, mình chưa có thời gian để theo dõi hết :tongue:

filiallion
30-05-2015, 08:44
Bài viết của bạn dài thật, mình chưa có thời gian để theo dõi hết :tongue:

Tôi viết cho trọn bộ đó mà bạn :)

lambertphoenix
04-06-2015, 17:08
Khá là chi tiết và bổ ích.

TraveltoVietnam
11-06-2015, 11:15
bài viết rất hay. có thể học hỏi được nhiều. cám ơn bạn.

filiallion
22-06-2015, 18:33
Cảm ơn các bạn đã quan tâm!

lambertphoenix
23-06-2015, 17:54
2 bài trùng nhau bạn à, bạn kiểm tra lại xem :)

filiallion
23-06-2015, 18:42
2 bài trùng nhau bạn à, bạn kiểm tra lại xem :)
Một bài cơ bản, một bài nâng cao bạn à :)

lambertphoenix
24-06-2015, 16:50
Một bài cơ bản, một bài nâng cao bạn à :)

Mình hoa mắt quá nên nhìn nhầm, sr bạn nhé :)

filiallion
13-07-2015, 20:31
Cho các bạn quan tâm!

miencotich
14-07-2015, 11:07
Bài viết của bạn rất chi tiết, cám ơn bạn rất nhiều mình sẽ lưu lại để lúc có thời gian xem qua vì mình cũng đang muốn đi sâu vào code thuần (trước toàn dùng mã nguồn mở), tuy nhiên giá mà bạn có thể có 1 website riêng giống như izweb và thêm hình ảnh hướng dẫn trong bài viết sẽ cho người xem đỡ nhàm chán hơn thì hay hơn rất nhiều bạn ah.

filiallion
14-07-2015, 22:18
Bài viết của bạn rất chi tiết, cám ơn bạn rất nhiều mình sẽ lưu lại để lúc có thời gian xem qua vì mình cũng đang muốn đi sâu vào code thuần (trước toàn dùng mã nguồn mở), tuy nhiên giá mà bạn có thể có 1 website riêng giống như izweb và thêm hình ảnh hướng dẫn trong bài viết sẽ cho người xem đỡ nhàm chán hơn thì hay hơn rất nhiều bạn ah.
Cảm ơn bạn đã quan tâm,

Tôi biết góp ý của bạn là hoàn toàn phù hợp nhưng tôi không có đủ thời gian để làm các công đoạn hình ảnh hay video. Tôi cũng có ý định dựng video + share source từng bài trong thời gian tới.

miencotich
04-08-2015, 17:16
Ok bạn hy vọng bạn sẽ sớm có video ^^

filiallion
18-08-2015, 20:57
Các bạn vui lòng liên hệ trang Google+ của tôi tại địa chỉ https://plus.google.com/103116221369826139041.

filiallion
18-09-2015, 19:31
Các bạn vui lòng liên hệ trang Google+ của tôi tại địa chỉ https://plus.google.com/103116221369826139041.

filiallion
28-09-2015, 21:28
Cho các bạn quan tâm.

filiallion
03-10-2015, 19:48
Các bạn vui lòng liên hệ trang Google+ của tôi tại địa chỉ https://plus.google.com/103116221369826139041.

filiallion
18-10-2015, 19:40
Cho các bạn quan tâm.

filiallion
29-10-2015, 20:46
Cho các bạn quan tâm.

doanbg1
30-10-2015, 13:34
Bài viết rất hữu ích, thank !

filiallion
10-12-2015, 20:43
Bài viết rất hữu ích, thank !
Cảm ơn bạn đã quan tâm!

filiallion
26-12-2015, 20:09
Cho các bạn quan tâm!

Minh Yến
07-03-2018, 16:27
đau đầu lắm
- Nhóm scalar (Vô hướng).
- Nhóm compound (Hỗn hợp).
- Nhóm special (Đặc biệt).

Nhóm scalar gồm:

- Boolean: Gồm hai giá trị là "true" và "false".
- Integer: Kiểu số nguyên.
- Float: Kiểu số thực.
- String: Kiểu chuổi.

tập tành làm seo
27-03-2018, 15:47
thấy bác tích cực, đá lên hộ!

filiallion
09-11-2018, 09:50
thấy bác tích cực, đá lên hộ!

Cảm ơn bạn đã quan tâm!

filiallion
10-01-2019, 14:10
Cho các bạn quan tâm!

filiallion
21-01-2019, 10:53
Bài viết đã được cập nhật tại https://gextend.net/threads/tung-buoc-hoc-lap-trinh-php-co-ban-qua-du-an-website-gioi-thieu-san-pham.1

zebrahn
12-03-2019, 23:27
Muốn liên lạc với bạn Hiếu, mimhf có dự án muốn trao đổi?

filiallion
07-05-2019, 14:39
Cho các bạn quan tâm!

filiallion
22-07-2019, 14:49
Cho các bạn quan tâm!

filiallion
12-08-2019, 15:50
Cho các bạn quan tâm!

tunguyen88
09-10-2019, 06:42
Các bạn có thể tham khảo những tutorial php hay ở đây
https://vinasupport.com/lap-trinh/php/