<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Học thiết kế web theo chuẩn. &#187; Videos</title>
	<atom:link href="http://www.izwebz.com/category/video-tutorials/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.izwebz.com</link>
	<description>You aren&#039;t just a visitor</description>
	<lastBuildDate>Sun, 16 Jun 2013 05:45:46 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Các series nên xem trên izwebz cho newbie</title>
		<link>http://www.izwebz.com/video-tutorials/misc/cac-series-nen-xem-tren-izwebz-cho-newbie/</link>
		<comments>http://www.izwebz.com/video-tutorials/misc/cac-series-nen-xem-tren-izwebz-cho-newbie/#comments</comments>
		<pubDate>Sat, 16 Feb 2013 12:51:26 +0000</pubDate>
		<dc:creator>Võ Minh Mẫn</dc:creator>
				<category><![CDATA[Newbie]]></category>
		<category><![CDATA[Tổng hợp]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=4736</guid>
		<description><![CDATA[Khi vào izwebz chắc nhiều bạn cho rằng các bài viết trên izwebz đều không có hệ thống gì cả? Thực chất, các bài biết đều đi theo một series của riêng nó, ví dụ như PHP, HTML &#38; CSS, PSD2HTML, Photoshop, illustrator,&#8230; Trong bài viết này, mình sẽ tổng hợp lại các series bài viết cần thiết cho một newbie. Nếu học lập trình website thì đều đầu tiên chắc các bạn phải biết đế HTML&#38;CSS là gì chứ nhỉ? Dưới đây là các series bài viết &#38; video cần cho bạn! Căn bản nhất vẫn là bài viết Tạo [...]]]></description>
				<content:encoded><![CDATA[<p>Khi vào izwebz chắc nhiều bạn cho rằng các bài viết trên izwebz đều không có hệ thống gì cả? Thực chất, các bài biết đều đi theo một series của riêng nó, ví dụ như PHP, HTML &amp; CSS, PSD2HTML, Photoshop, illustrator,&#8230; Trong bài viết này, mình sẽ tổng hợp lại các series bài viết cần thiết cho một newbie.<br />
<span id="more-4736"></span><br />
Nếu học lập trình website thì đều đầu tiên chắc các bạn phải biết đế HTML&amp;CSS là gì chứ nhỉ? Dưới đây là các series bài viết &amp; video cần cho bạn!<br />
Căn bản nhất vẫn là bài viết <a title="Tạo trang web đầu tiên" href="http://www.izwebz.com/video-tutorials/css-html/tao-trang-web-dau-tien/">Tạo trang web đầu tiên</a> sau đó bạn hãy xem qua series gồm 2 video hướng dẫn và HTML cơ bản <img src='http://www.izwebz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ul>
<li><a title="HTML Cơ bản – Phần 1" href="http://www.izwebz.com/video-tutorials/css-html/html-co-ban/">HTML Cơ bản – Phần 1</a></li>
<li><a title="HTML cơ bản – Phần 2" href="http://www.izwebz.com/video-tutorials/css-html/image-va-anchor/">HTML cơ bản – Phần 2</a></li>
</ul>
<p>Khi đã hiểu rõ được các tag, element của của HTML rồi thì chuyển qua các bài viết khác về CSS chứ nhỉ? Căn bản nhất vẫn là bài viết</p>
<ul>
<li><a title="CSS Selectors (phần 1)" href="http://www.izwebz.com/video-tutorials/css-html/css-selectors-phan-1/">CSS Selectors (phần 1)</a></li>
<li><a title="CSS Selectors (Phần 2)" href="http://www.izwebz.com/video-tutorials/css-html/css-selectors-phan-2/">CSS Selectors (Phần 2)</a></li>
</ul>
<p>Trong series 2 bài trên sẽ giúp bạn hiểu rõ nhiều vấn đề, class là gì? id là gì? child selector,&#8230;.<br />
Nếu như bạn đã rành rành rồi thì chúng ra có thể tham khảo thêm các bài viết như &#8220;<a title="Những cách trình bày CSS" href="http://www.izwebz.com/video-tutorials/css-html/nhung-cach-trinh-bay-css/">Những cách trình bày CSS</a>&#8221; và &#8220;<a title="Viết tắt trong CSS" href="http://www.izwebz.com/video-tutorials/css-html/css-cach-viet-gian-luoc/">Viết tắt trong CSS</a>&#8221; để nâng cao tay nghề của mình.</p>
<p><em>Phía trên chỉ là các bài viết tiêu biểu, bạn có thể xem thêm rất nhiều video khác tại link bài viết <a href="http://www.izwebz.com/category/css/" target="_blank">http://www.izwebz.com/category/css/</a> có hàng chục bài viết và thủ thuật về CSS đang chờ bạn.</em></p>
<p>Một khi đã tích lũy được kha khá kiến thức về HTML &amp; CSS rồi thì bạn có thể xem qua các series kết hợp, từ photoshop sang html &amp; css. Trong trường hợp này thì các series này sẽ thích hợp cho bạn đấy</p>
<ul>
<li><a title="Phần 1: Chuyển PSD thành xHTML" href="http://www.izwebz.com/video-tutorials/css-html/chuyen-psd-sang-html/">Phần 1: Chuyển PSD thành xHTML</a></li>
<li><a title="Phần 2: Xây dựng code xHTML" href="http://www.izwebz.com/video-tutorials/css-html/xay-dung-code-xhtml/">Phần 2: Xây dựng code xHTML</a></li>
<li><a title="Phần 3: Tạo dáng với CSS" href="http://www.izwebz.com/video-tutorials/css-html/tao-dang-voi-css/">Phần 3: Tạo dáng với CSS</a></li>
</ul>
<p>Hoặc series</p>
<ul>
<li><a title="Từ PSD sang HTML (phần 1/5)" href="http://www.izwebz.com/video-tutorials/css-html/tu-psd-sang-html/">Từ PSD sang HTML (phần 1/5)</a></li>
<li><a title="Từ PSD sang HTML (phần 2/5)" href="http://www.izwebz.com/video-tutorials/css-html/tu-psd-sang-html-phan-2/">Từ PSD sang HTML (phần 2/5)</a></li>
<li><a title="Từ PSD sang HTML (phần 3/5)" href="http://www.izwebz.com/video-tutorials/css-html/tu-psd-sang-html-phan-3/">Từ PSD sang HTML (phần 3/5)</a></li>
<li><a title="Từ PSD sang HTML (phần 4/5)" href="http://www.izwebz.com/video-tutorials/css-html/tu-psd-sang-html-phan-4/" target="_blank">Từ PSD sang HTML (phần 4/5)</a></li>
<li><a title="Từ PSD sang HTML (phần 5/5)" href="http://www.izwebz.com/video-tutorials/tu-psd-sang-html-phan-5/" target="_blank">Từ PSD sang HTML (phần 5/5)</a></li>
</ul>
<p>Với các series kết hợp như thế này thì đòi hỏi bạn cần phải biết căn bạn về HTML&amp;CSS và sự tu duy để áp dụng và các dự án khác nhau của riêng mình nữa. Và ngoài ra bạn cũng phải biết chút chút về photoshop căn bản chứ nhỉ</p>
<ul>
<li><a title="Basic photoshop: Bài 1 – Làm việc với vùng chọn" href="http://www.izwebz.com/video-tutorials/photoshop-video-tutorials/basic-photoshop-bai-1/">Basic photoshop: Bài 1 – Làm việc với vùng chọn</a></li>
<li><a title="Basic photoshop: Bài 2 – Thao tác Layer" href="http://www.izwebz.com/video-tutorials/photoshop-video-tutorials/basic-photoshop-bai-2-thao-tac-layer/">Basic photoshop: Bài 2 – Thao tác Layer</a></li>
<li><a title="Basic Photoshop: Bài 3 – Text và layer style" href="http://www.izwebz.com/video-tutorials/photoshop-video-tutorials/basic-photoshop-bai-3-text-va-layer-style/">Basic Photoshop: Bài 3 – Text và layer style</a></li>
<li><a title="Basic photoshop: Bài 4 – Brush và Mask" href="http://www.izwebz.com/video-tutorials/photoshop-video-tutorials/basic-photoshop-bai-4-brush-va-mask/">Basic photoshop: Bài 4 – Brush và Mask</a></li>
<li><a title="Basic photoshop: Bài 5 – Chỉnh sửa ảnh – Phần 1/2" href="http://www.izwebz.com/video-tutorials/photoshop-video-tutorials/pts-basic-5-chinh-sua-anh/">Basic photoshop: Bài 5 – Chỉnh sửa ảnh – Phần 1/2</a></li>
<li><a title="Basic photoshop: Bài 5 – Pen Tool – Phần 2/2" href="http://www.izwebz.com/video-tutorials/basic-photoshop-bai-5-%e2%80%93-pen-tool-%e2%80%93-ph%e1%ba%a7n-22/">Basic photoshop: Bài 5 – Pen Tool – Phần 2/2</a></li>
<li><a title="Photoshop Basic: Phím tắt, Lens Flare vs Knoll Light Factory" href="http://www.izwebz.com/video-tutorials/photoshop-video-tutorials/photoshop-basic-phim-tat-lens-flare-vs-knoll-light-factory/">Photoshop Basic: Phím tắt, Lens Flare vs Knoll Light Factory</a></li>
<li><a title="Basic photoshop: Căn bản về Smart Object" href="http://www.izwebz.com/video-tutorials/photoshop-video-tutorials/basic-photoshop-can-ban-ve-smart-object/">Basic photoshop: Căn bản về Smart Object</a></li>
</ul>
<p>Ngoài ra thì cũng phải biết về illustrator để kết hợp với photoshop chứ nhỉ, vậy thì series này sẽ cực kỳ hữu ích cho các bạn đấy</p>
<ul>
<li><a href="http://www.izwebz.com/video-tutorials/adobe-illustrator-cs5-gioi-thieu/" target="_blank">Adobe Illustrator CS5 – Giới thiệu</a></li>
<li><a href="http://www.izwebz.com/video-tutorials/adobe-illustrator-thao-tac-doi-tuong/" target="_blank">Basic Ai: Bài2 – Thao tác đối tượng</a></li>
<li><a href="http://www.izwebz.com/video-tutorials/basic-ai-bai-3-pen-tools-va-path/" target="_blank">Basic Ai: Bài 3 – Pen tools và Path</a></li>
<li><a href="http://www.izwebz.com/uncategorized/basic-ai-bai-4-brush-tool/" target="_blank">Basic Ai: Bài 4 – Brush tool (by Devil Grades)</a></li>
<li><a href="http://www.izwebz.com/uncategorized/basic-ai-bai-5-bi%E1%BA%BFn-d%E1%BB%95i-d%E1%BB%91i-t%C6%B0%E1%BB%A3ng-shape-builder-tool/" target="_blank">Basic Ai: Bài 5 – Biến Đổi Đối Tượng – Shape Builder Tool</a></li>
<li><a href="http://www.izwebz.com/uncategorized/basic-ai-bai-6-k%e1%ba%bft-thuc-toolbox/" target="_blank">Basic Ai: Bài 6 – Kết thúc toolbox</a></li>
<li><a href="http://www.izwebz.com/uncategorized/3738/" target="_blank">Basic AI bài 7 : Những lệnh quan trọng</a></li>
</ul>
<p>Một khi bạn đã có thể tự chuyển từ photoshop sang html css hoặc là bạn đã cày xong hết các món về photoshop, html css,&#8230;. Thì đã tới lúc mình tự design 1 website cho riêng mình chứ nhỉ?<br />
Điều đầu tiên bạn cần biết là các loại bố cục của website như <a href="http://www.izwebz.com/design-usability/tim-hieu-f-layout/" target="_blank">F-Layout</a> hay <a href="http://www.izwebz.com/design-usability/introduction-z-layout/" target="_blank">Z-Layout</a>, rồi tự mình design bằng photoshop với các video hướng dẫn dưới dây sẽ cực hữu ích</p>
<ul>
<li><a title="Photoshop Tut – Manbics Layout Day 1" href="http://www.izwebz.com/featured/photoshop-layout-manbics/">Photoshop Tut – Manbics Layout Day 1</a></li>
<li><a title="Photoshop Tut – Manbics Layout Day 2" href="http://www.izwebz.com/video-tutorials/photoshop-video-tutorials/photoshop-tutorial-manbics-layout-p-2/">Photoshop Tut – Manbics Layout Day 2</a></li>
<li><a title="Photoshop Tut – Manbics Layout Day 3" href="http://www.izwebz.com/video-tutorials/photoshop-video-tutorials/manbics-layout-day/">Photoshop Tut – Manbics Layout Day 3</a></li>
</ul>
<p>Hoặc series bài viết  <a title="Vertical Scrolling: Photoshop layout" href="http://www.izwebz.com/video-tutorials/vertical-scrolling-photoshop-layout/">Vertical Scrolling: Photoshop layout</a> và <a href="http://www.izwebz.com/video-tutorials/vertical-scrolling-slice-code/" target="_blank">Vertical Scrolling: Slice &amp; Code</a></p>
<p>Một khi bạn đã vững các kiến thức cơ bản rồi thì hãy học PHP thôi, còn chờ gì nữa <img src='http://www.izwebz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Series về PHP căn bản thì quá tuyệt rồi còn gì nữa <img src='http://www.izwebz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Bạn có thể xem cả list video cần thiết ngay link này <a href="http://www.izwebz.com/video/" target="_blank">http://www.izwebz.com/video/</a> hoặc bạn hãy nhìn trên izwebz phía menu màu xám, có link Video series, hãy nhấp vào đấy, trang đấy là tổng hợp toàn bộ Video mà mình đã liệt kê ở phía trên này.</p>
<ul>
<li><a title="Cơ bản về PHP – Bài 1" href="http://www.izwebz.com/video-tutorials/php-co-ban/">Cơ bản về PHP – Bài 1</a></li>
<li><a title="Căn bản PHP – Bài 2" href="http://www.izwebz.com/video-tutorials/can-ban-php-bai2/">Căn bản PHP – Bài 2</a></li>
<li><a title="Căn bản PHP – Bài 3" href="http://www.izwebz.com/video-tutorials/can-ban-php-bai-3/">Căn bản PHP – Bài 3</a></li>
<li><a title="Căn bản PHP – Bài 4 – Phần 1" href="http://www.izwebz.com/video-tutorials/can-ban-php-bai-4-phan-1/">Căn bản PHP – Bài 4 – Phần 1</a></li>
<li><a title="Căn bản PHP – Bài 4 – Phần 2" href="http://www.izwebz.com/video-tutorials/can-ban-php-bai-4-phan-2/">Căn bản PHP – Bài 4 – Phần 2</a></li>
<li><a title="Căn bản PHP – Bài 5" href="http://www.izwebz.com/video-tutorials/can-ban-php-bai-5/">Căn bản PHP – Bài 5</a></li>
<li><a title="PHP Căn Bản – Bài 6 – Phần 1" href="http://www.izwebz.com/video-tutorials/php-can-ban-bai-6-phan-1/">PHP Căn Bản – Bài 6 – Phần 1</a></li>
<li><a title="PHP Căn Bản – Bài 6 – Phần 2" href="http://www.izwebz.com/video-tutorials/php-video-tutorials/php-can-ban-6-phan-2/">PHP Căn Bản – Bài 6 – Phần 2</a></li>
<li><a title="Thiết lập Mail Server Localhost" href="http://www.izwebz.com/video-tutorials/php-video-tutorials/thiet-lap-mail-server/">Thiết lập Mail Server Localhost</a></li>
<li><a title="PHP Căn Bản – Bài 7 – Phần 1" href="http://www.izwebz.com/video-tutorials/php-can-ban-bai-7-phan-1/">PHP Căn Bản – Bài 7 – Phần 1</a></li>
<li><a title="PHP Căn Bản – Bài 7 – Phần 2" href="http://www.izwebz.com/video-tutorials/php-video-tutorials/php-can-ban-bai-7-phan-2/">PHP Căn Bản – Bài 7 – Phần 2</a></li>
<li><a title="PHP Căn Bản – Bài 8" href="http://www.izwebz.com/video-tutorials/php-can-ban-bai-8/">PHP Căn Bản – Bài 8</a></li>
<li><a title="PHP Căn Bản – Bài 9" href="http://www.izwebz.com/video-tutorials/php-can-ban-bai-9/">PHP Căn Bản – Bài 9</a></li>
<li><a title="PHP Căn Bản – Bài 10" href="http://www.izwebz.com/video-tutorials/php-video-tutorials/php-can-ban-bai-10/">PHP Căn Bản – Bài 10</a></li>
<li><a title="Căn Bản PHP – Bài 11 – Phần 1" href="http://www.izwebz.com/video-tutorials/can-ban-php-bai-11-phan-1/">Căn Bản PHP – Bài 11 – Phần 1</a></li>
<li><a title="Căn Bản PHP – Bài 11 – Phần 2" href="http://www.izwebz.com/video-tutorials/can-ban-php-bai-11-phan-2/">Căn Bản PHP – Bài 11 – Phần 2</a></li>
<li><a title="Tạo Mailing list với PHP &amp; MySQL" href="http://www.izwebz.com/video-tutorials/php-video-tutorials/tao-mailing-list-voi-php-mysql/">Tạo Mailing list với PHP &amp; MySQL</a></li>
<li><a title="Xử lý form với PHP" href="http://www.izwebz.com/video-tutorials/php-video-tutorials/xu-ly-form-voi-php/">Xử lý form với PHP</a></li>
<li><a title="Phân trang với PHP &amp; MySQL" href="http://www.izwebz.com/video-tutorials/php-video-tutorials/phan-trang-voi-phpmysql/">Phân trang với PHP &amp; MySQL</a></li>
<li><a title="PHP Basic – Type Casting" href="http://www.izwebz.com/video-tutorials/php-video-tutorials/type-casting/">PHP Basic – Type Casting</a></li>
<li><a title="Bài 12 : Mô Hình MVC" href="http://www.izwebz.com/video-tutorials/bai-12-mo-hinh-mvc/">Bài 12 : Mô Hình MVC</a></li>
<li><a title="Bài 13 : Lập trình hướng đối tượng (OOP)" href="http://www.izwebz.com/video-tutorials/php-video-tutorials/bai-13-lap-trinh-huong-doi-tuong-oop/">Bài 13 : Lập trình hướng đối tượng (OOP)</a></li>
</ul>
<p>Ngoài ra, bạn có thể xem thêm các bài viết chia sẽ kiến thức, kinh nghiệm thiết kế &amp; phát triển website tại chuyên mục &#8220;<a href="http://www.izwebz.com/category/design-usability/" target="_blank">Phát triển web</a>&#8221; sẽ giúp cho bạn rất nhiều, hay bạn có thể tham khảo tại series bài viết &#8220;Nguồn của tôi&#8221;.</p>
<ul>
<li><a href="http://www.izwebz.com/design-usability/nguon-cua-toi-nguon-thiet-ke/">Nguồn thiết kế</a></li>
<li><a href="http://www.izwebz.com/design-usability/nguon-cua-toi-nguon-y-tuong/">Nguồn ý tưởng</a></li>
<li><a href="http://www.izwebz.com/design-usability/nguon-cua-toi-nguon-lap-trinh/">Nguồn lập trình</a></li>
<li><a href="http://www.izwebz.com/design-usability/nguon-cua-toi-quan-ly-nguon/">Quản lý nguồn</a></li>
</ul>
<p>Chà, như thế thì đã quá nhiều cho các newbie rồi đấy nhỉ? Mọi thắc mắc bạn hãy email về support@izwebz.com để được giải đáp nhé, ngoài ra, cộng đồng izwebz tại facebook cũng khá đông đấy, bạn cứ vào đấy mà cùng &#8220;chém&#8221; <a title="Izwebz group" href="https://www.facebook.com/groups/izwebz.group/" target="_blank">Izwebz Group on Facebook</a></p>
<p><img alt="" src="http://www.izwebz.com/wp-content/uploads/mrv2m/hd.jpg" width="590" /></p>
<p>1/ Các series video trên izwebz PHP, HTML &amp; CSS, Photoshop,&#8230;..<br />
2/ Nhận email khi có bài viết mới<br />
3/ Kênh RSS<br />
4/ Tìm kiếm bài viết<br />
5/ Các câu hỏi đã được trả lời thường xuyên<br />
6/ Chuyên mục chia sẽ kinh nghiệm thiết kế &amp; phát triển web<br />
7/ Video dành cho các chuyên mục về PHP, HTML CSS, Photoshop,&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/video-tutorials/misc/cac-series-nen-xem-tren-izwebz-cho-newbie/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>[Basic] Loading data with Jquery AJAX JSON in PHP</title>
		<link>http://www.izwebz.com/video-tutorials/jquery-video-tutorials/basic-loading-data-with-jquery-ajax-json-in-php/</link>
		<comments>http://www.izwebz.com/video-tutorials/jquery-video-tutorials/basic-loading-data-with-jquery-ajax-json-in-php/#comments</comments>
		<pubDate>Sun, 16 Dec 2012 15:13:31 +0000</pubDate>
		<dc:creator>Mr. Nav</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=4582</guid>
		<description><![CDATA[Hôm nay chúng ta tiếp tục phần thứ 2 về Jquery AJAX JSON, trong bài hôm nay chúng ta sẽ làm quen kiểu dữ liệu JSON trong PHP. Trong video này mình sẽ hướng dẫn các bạn chuyển đổi dạng dữ liệu string sang kiểu dữ liệu JSON trong PHP, sau đó mình sẽ làm một ví dụ nhỏ kết nối tới database để lấy dữ liệu đó và chuyển thành dạng JSON và cuối cùng mình sẽ sử dụng Jquery AJAX để load dữ liệu đó]]></description>
				<content:encoded><![CDATA[<p>Hôm nay chúng ta tiếp tục phần thứ 2 về Jquery AJAX JSON, trong bài hôm nay chúng ta sẽ làm quen kiểu dữ liệu JSON trong PHP.</p>
<p><span id="more-4582"></span></p>
<p>Trong video này mình sẽ hướng dẫn các bạn chuyển đổi dạng dữ liệu string sang kiểu dữ liệu JSON trong PHP, sau đó mình sẽ làm một ví dụ nhỏ kết nối tới database để lấy dữ liệu đó và chuyển thành dạng JSON và cuối cùng mình sẽ sử dụng Jquery AJAX để load dữ liệu đó <img src='http://www.izwebz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="tutorial-image"><iframe width="640" height="360" src="http://www.youtube.com/embed/dVADMUurBzw" frameborder="0" allowfullscreen></iframe></div>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/video-tutorials/jquery-video-tutorials/basic-loading-data-with-jquery-ajax-json-in-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Jquery AJAX Loading data when requested</title>
		<link>http://www.izwebz.com/jquery/jquery-ajax-loading-data-when-requested/</link>
		<comments>http://www.izwebz.com/jquery/jquery-ajax-loading-data-when-requested/#comments</comments>
		<pubDate>Tue, 27 Nov 2012 03:15:18 +0000</pubDate>
		<dc:creator>Mr. Nav</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=4536</guid>
		<description><![CDATA[Chà, cũng lâu rồi không làm bài nào về Jquery AJAX nhỉ, hôm nay mình sẽ hướng dẫn các bạn sử dụng Jquery AJAX để tải dữ liệu khi người dùng yêu cầu. Nếu bạn nào mới làm quen với Jquery AJAX thì các bạn hãy xem lại các bài viết trước của mình hướng dẫn cách sử dụng Jquery AJAX để load dữ liệu nhé. Hình ảnh, database được đính kèm trong file download. Xem Demo Đối với những trang web bán hàng hiện đại nói riêng hay những trang web khác nói chung thì việc áp dụng công [...]]]></description>
				<content:encoded><![CDATA[<p>Chà, cũng lâu rồi không làm bài nào về Jquery AJAX nhỉ, hôm nay mình sẽ hướng dẫn các bạn sử dụng Jquery AJAX để tải dữ liệu khi người dùng yêu cầu.</p>
<p><span id="more-4536"></span></p>
<p>Nếu bạn nào mới làm quen với Jquery AJAX thì các bạn hãy xem lại các bài viết trước của mình hướng dẫn cách sử dụng Jquery AJAX để load dữ liệu nhé.</p>
<p>Hình ảnh, database được đính kèm trong file download.</p>
<div id="view-demo">
<a href="http://minhman.me/izwebz/ajax-loading/" target="_blank" class="view-demo">Xem Demo</a>
</div>
<p>Đối với những trang web bán hàng hiện đại nói riêng hay những trang web khác nói chung thì việc áp dụng công nghệ AJAX để tải dữ liệu từ server là rất cần thiết.</p>
<p>Khi bạn làm một trang web bán hàng, bạn có một sidebar hiển danh mục sản phẩm và main chính sẽ hiển thị tất cả sản phẩm của cty mình đang có. Bình thường các bạn làm thì cần phải truyền tham số qua link rồi ở trang sản phẩm mình phải GET tham số đấy rồi SELECT với database&#8230;Mà mình GET tham số trên link thì nó cũng không được tốt cho lắm, thay vào nó bây giờ mình sử dụng Jquery AJAX để xử lý nó một cách dễ dàng và đơn giản hơn ^^.</p>
<p>Bởi vì đây là bài hướng dẫn cho nên mình muốn loại bỏ một số hình thức làm sạch, chuyển đổi dạng dữ liệu và tránh hack SQL Injection, cho nên mình có 1 số lưu ý khi các bạn viết code PHP như sau nếu bạn muốn sử dụng vào project của mình:</p>
<ul>
<li>Tránh sử dụng SELECT * .. khi mình CSDL mình chỉ có 2 hoặc 3 trường nó sẽ xuất ra những dữ liệu mình không cần dùng đến</li>
<li>Trong khi phát triển project thì bạn nên thêm các trường hợp bẫy lỗi vào để tiện cho việc tìm kiếm lỗi nhanh hơn</li>
<li>VALIDATE các hộp thoại input và string để chống SQL Injection</li>
</ul>
<h3>STEP 1 – SETUP HTML</h3>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE HTML&gt;
&lt;html lang=&quot;en-US&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot;&gt;
	&lt;title&gt;Jquery AJAX Loading data when requested&lt;/title&gt;
	&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/reset.css&quot; media=&quot;all&quot;&gt;
	&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/style.css&quot; media=&quot;all&quot;&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.1.7.2.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/AJAX.js&quot;&gt;&lt;/script&gt; 
&lt;/head&gt;
&lt;body&gt;
	&lt;div id=&quot;wrapper&quot;&gt;
		&lt;div id=&quot;container&quot;&gt;
			&lt;div id=&quot;nav&quot;&gt;
				&lt;h1&gt;Loading data when requested&lt;/h1&gt;
				&lt;nav role=&quot;tab&quot;&gt;
					&lt;ul&gt;
						&lt;?php 
						$db = mysqli_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;&quot;,&quot;ajax_tab&quot;);
						$query_tab = &quot;SELECT * FROM categories&quot;;
						$result_tab = mysqli_query($db,$query_tab) 
						or die(&quot;mysqli Error: &quot; . mysqli_error($db));
						if(mysqli_num_rows($result_tab) &gt; 0) {
							while($rows = mysqli_fetch_array($result_tab,MYSQLI_ASSOC)) {
								$id_cat = $rows['cat_id'];
								$name_cat = $rows['name'];
								echo &quot;&lt;li id_cat='$id_cat'&gt;$name_cat&lt;/li&gt;&quot;;
							}   
						}
						?&gt;
					&lt;/ul&gt;
				&lt;/nav&gt;
			&lt;/div&gt;&lt;!-- End #nav --&gt;

			&lt;div id=&quot;main&quot;&gt;
				&lt;div id=&quot;loading&quot;&gt;&lt;/div&gt;
				&lt;div id=&quot;data&quot;&gt;&lt;/div&gt;
			&lt;/div&gt;
			
		&lt;/div&gt;&lt;!-- End #container --&gt;	
	&lt;/div&gt;&lt;!-- End #wrapper --&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Trong phần HTML của mình cũng không có gì nhiều, mình chỉ cho nó hiển thị cái danh mục bài viết ra và ở dưới có 1 div với id là data để load dữ liệu vào đó, nhưng ở đây các bạn chú ý ở đoạn mình echo ra nhé. Trong cái thẻ li mình có truyền cho nó vào một tham số là id_cat và mỗi danh mục của mình trong databse tương ứng nó sẽ có id khác nhau và chút xíu nữa khi mình click vào một danh mục nào đó mình lấy cái id này để SELECT tất cả những bài viết nằm trong danh mục đó.</p>
<p>Code PHP trên mình viết đơn giãn cho các bạn dễ hiểu hơn, khi áp dụng vào project bạn cần làm một số cái mình nói ở trên và mình có thể rút gọn code một chút nữa.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php 
	$db = mysqli_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;&quot;,&quot;ajax_tab&quot;);
	$query_tab = &quot;SELECT cat_id,name FROM categories&quot;;
	$result_tab = mysqli_query($db,$query_tab);
	while(list($id_cat,$name_cat) = mysqli_fetch_array($result_tab,MYSQLI_NUM)) {
		echo &quot;&lt;li id_cat='$id_cat'&gt;$name_cat&lt;/li&gt;&quot;;
	}
?&gt;
</pre>
<p>Mình có thể dùng hàm list() để gán biến và lấy giá trị luôn cho nó lẹ hì, đỡ mất công phải gán từng cái cho mệt <img src='http://www.izwebz.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
<p>Khi mình dùng hàm list() chạy qua từng biến thì biến của mình cần viết theo thứ tự nhé, trong CSDL của mình trường cat_id có row = 0, name_cat có row = 1 và mình phải gán biến theo thứ tự $id_cat = 0 =&gt; trường cat_id, $name_cat = 1 =&gt; trường name_cat. Khi mình dùng mysqli_fetch_array thì mình thêm một tham số nữa là MYSQLI_NUM để nó chuyển cái mảng này thành dạng số để hàm list() của mình chạy qua từng cái và gán vào biến luôn ha.</p>
<h3>STEP 2 – SETUP CSS</h3>
<pre class="brush: css; title: ; notranslate">
*{margin: 0; padding: 0; }

body {
	font-size: 62.5%;
	font-family: Arial, Helvetica, sans-serif;  
}

a {
	text-decoration: none;
}

#wrapper {
	width: 1000px;
	margin: 0 auto;
}

#container {
	width: 1000px;
	overflow: hidden;
}

#nav {
	margin: 20px;
	border: 1px solid #d4d4d4;
	background: -moz-linear-gradient(top,#fff,#ebebeb);
	background: -webkit-linear-gradient(top,#fff,#ebebeb);
	background: -o-linear-gradient(top,#fff,#ebebeb);
	background: -ms-linear-gradient(top,#fff,#ebebeb);
	width: 290px;
	padding: 20px;
	float: left;
}

#nav h1{
	font-size: 1.4em;
	border-bottom: 1px solid #d4d4d4;
	padding-bottom: 10px;
	text-align: center;
	color: green;
	text-shadow: 0px 1px 0px #d4d4d4;
}

nav[role=&quot;tab&quot;] {
	padding-top: 10px;
}

nav[role=&quot;tab&quot;] &gt; ul li {
	font-size: 1.4em;
	border-bottom: 1px solid #d4d4d4;
	padding: 5px 0px;
	color: #ac0202;
	cursor: pointer;
}

nav[role=&quot;tab&quot;] &gt; ul li:hover {
	color: #888;
}

nav[role=&quot;tab&quot;] &gt; ul li:last-child {
	border-bottom: none;
}

#main {
	border: 1px solid #d4d4d4;
	background: -moz-linear-gradient(top,#fff,#ebebeb);
	background: -webkit-linear-gradient(top,#fff,#ebebeb);
	background: -o-linear-gradient(top,#fff,#ebebeb);
	background: -ms-linear-gradient(top,#fff,#ebebeb);
	width: 540px;
	padding: 20px;
	float: right;
	margin: 20px;
	position: relative;
}

#loading {
	position: absolute;
	top: 10px;
	left: 50%;
}

nav[role=&quot;main&quot;] {

}

nav[role=&quot;main&quot;] ul li {
	float: left;
	padding: 10px;
}

nav[role=&quot;main&quot;] ul li img {
	border: 1px solid #d4d4d4;
	background: #fff;
	padding: 4px;
}
</pre>
<p>Trong phần này mình cũng không làm CSS gì nhiều nên khi các bạn áp dụng vào trang web của mình thì style thêm nhé. Và bây giờ mình bắt đầu vào công việc chính nào <img src='http://www.izwebz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<h3>STEP 3 – Load Data </h3>
<pre class="brush: php; title: ; notranslate">
&lt;?php 
							$db = mysqli_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;&quot;,&quot;ajax_tab&quot;);
							$query = &quot;SELECT * FROM thumbnail&quot;;
							$result = mysqli_query($db,$query);
							$data = &quot;&quot;;
							while($row = mysqli_fetch_array($result)) {
								$id = $row['id'];
								$name = $row['name'];
								$cat_id = $row['cat_id'];
								$images = &quot;images/&quot;.$row['images'];
								$images = &quot;&lt;img src='$images' width='150' height='150'&gt;&quot;;
								$data .= &quot;&lt;li&gt;$images&lt;/li&gt;&quot;;
							}
							$data = &quot;&lt;nav role='main'&gt;&lt;ul&gt;&quot;
									 .$data.&quot;
									 &lt;/ul&gt;&lt;/nav&gt;&quot;;
							echo $data;
						?&gt;
</pre>
<p>Đoạn sau này mình không dùng hàm list() nữa là vì mình phải gán biến biến để lấy hình ra nhé.</p>
<p>Trong file data.php này nó chỉ làm nhiệm vụ là xuất tất cả bài viết trong database ra khi người dùng vào lần đầu tiên.</p>
<p>Trong database của mình có nhiều bài viết khi mình dùng vòng lặp while để xuất dữ liệu ra thì mình cần lưu tất cả nó vào biến $data để khi xuống dưới mình sẽ echo $data ra thì dữ liệu của mình sẽ trả về toàn bộ.</p>
<p>Nhắc lại bài cũ một chút xíu là &#8221; .= &#8221; có nghĩa là nối nhiều chuỗi vào cùng một biến nhé.</p>
<p>Bây giờ mình sẽ sử dụng Jquery AJAX để load dữ liệu này như sau :</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function() {
	
	load_data();
	function load_data() {
		$('#loading').html(&quot;&lt;img src='images/loading.gif'/&gt;&quot;).fadeIn('fast'); 
		$.ajax({
			type: &quot;POST&quot;,
			url: &quot;data.php&quot;,
			success: function(data_log) {
				$('#loading').fadeOut('fast');
				$(&quot;#data&quot;).html(data_log);
			}
		})
	}
});
</pre>
<p>Mình sẽ viết một hàm load dữ liệu của file data.php và sau đó mình sẽ cho chạy hàm này, có nghĩa là khi trang web mình được tải xong thì dữ liệu của mình sẽ bắt đầu load xong. Hàm này mình chỉ dùng để tải dữ liệu nên sẽ không có truyền vào tham số gì nhé.</p>
<h3>STEP 4 – Loading data when requested </h3>
<pre class="brush: php; title: ; notranslate">
&lt;?php 

if(isset($_POST['id_cat']) &amp;&amp; filter_var($_POST['id_cat'], 
	FILTER_VALIDATE_INT, array('min_range'=&gt;1))) {
	$db = mysqli_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;&quot;,&quot;ajax_tab&quot;);
	$id_cat = mysqli_real_escape_string($db,trim($_POST['id_cat']));
	$get_data = &quot;&quot;;
	$get_query = &quot;SELECT * FROM thumbnail WHERE cat_id={$id_cat}&quot;;
	$get_result = mysqli_query($db,$get_query);
	while($rows = mysqli_fetch_array($get_result)) {
		$get_id = $rows['id'];
		$get_name = $rows['name'];
		$get_cat_id = $rows['cat_id'];
		$get_images = &quot;images/&quot;.$rows['images'];
		$get_images = &quot;&lt;img src='$get_images' width='150' height='150'&gt;&quot;;
		$get_data .= &quot;&lt;li&gt;$get_images&lt;/li&gt;&quot;;
	}
	$get_data = &quot;&lt;nav role='main'&gt;&lt;ul&gt;&quot;
					.$get_data.&quot;
				&lt;/ul&gt;&lt;/nav&gt;&quot;;
	echo $get_data;
}

?&gt;
</pre>
<p>Trong file get_data.php này mình sẽ thực hiện nhiệm vụ load dữ liệu khi người dùng click chọn danh mục bài viết.</p>
<p>Mình sẽ kiểm tra xem tham số id_cat mình truyền từ AJAX qua có tồn tại hay không, nếu có mình sẽ thực hiện lấy tham số này và SELECT database với điều kiện là id_cat mình vừa lấy được đồng thời phải VALIDATE cái input luôn nhé.</p>
<p>Hàm filter_var có nhiệm vụ lọc cái biến kiểu số nguyên và giá trị của nó phải lớn hơn 1 và không âm.</p>
<p>Sau đó mình dùng thêm mysqli_real_escape_string loại bỏ các ký tự đặc biệt và ký tự vớ vẫn để chống hack SQL Injection nữa nhé.</p>
<p>Nói thêm một chút xíu là CSDL của mình trong MYSQL các bạn nên chú ý cat_id chính là mối liên hệ giữa bảng categories và thumbnail trong CSDL nhé.</p>
<p>Anh Demon Warlock vừa ra một cái traller Lý thuyết của Relational Database trong DVD thứ 2 sắp phát hành của Izwebz, trong video này anh ấy sẽ nói rõ mối liên hệ giữa 2 bảng trong CSDL thì trong CSDL của mình trong bài này cũng làm y chang như vậy.</p>
<p>Bạn có thể xem video ở dưới.</p>
<div class='tutorial-image'>
<iframe width="420" height="315" src="http://www.youtube.com/embed/gSyMlAoFYww" frameborder="0" allowfullscreen></iframe>
</div>
<p>Bây giờ mình sử dụng Jquery AJAX để xử lý khi người dùng click chọn danh mục như sau :</p>
<pre class="brush: jscript; title: ; notranslate"> 
$(&quot;nav[role='tab'] ul li&quot;).click(function() {
			var id_cat = $(this).attr(&quot;id_cat&quot;);
			$('#loading').html(&quot;&lt;img src='images/loading.gif'/&gt;&quot;).fadeIn('fast');
			$(&quot;#main&quot;).slideUp().delay(400).slideDown();
			$.ajax({
				type: &quot;POST&quot;,
				url: &quot;get_data.php&quot;,
				data: &quot;id_cat=&quot;+ id_cat,
				success: function(get_data) {
					$('#loading').fadeOut('fast');
					$(&quot;#data&quot;).empty().append(get_data);
				}
			});
		});
</pre>
<pre class="brush: jscript; title: ; notranslate"> 
var id_cat = $(this).attr(&quot;id_cat&quot;);
// $(this) có nghĩa là mình đang nói tới thẻ li được click
// Khi nó được click mình sẽ dùng hàm attr trong Jquery 
// Để lấy tham số id_cat mà mình truyền cho thẻ li trong phần HTML
</pre>
<p>Sau đó mình sử dụng Jquery AJAX để load dữ liệu ra thôi <img src='http://www.izwebz.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Bạn chú ý một xíu là khi trang web của mình được tải xong thì dữ toàn bộ dữ liệu trong MYSQL của mình cũng tải xong và nó được đổ vào thẻ div có id là data, bây giờ trước khi mình load dữ liệu mới cho thẻ div với id là data thì mình cần xóa hết dữ liệu cũ nó được tải lần trước đi.</p>
<p>Mình dùng hàm empty để xóa toàn bộ dữ liệu cũ đó đi và mình sẽ dùng tiếp hàm append để thêm dữ liệu mới mình vừa tải xong vào thẻ div với id là data.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/jquery/jquery-ajax-loading-data-when-requested/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Jquery AJAX Supper Form + PHP &amp; MYSQL</title>
		<link>http://www.izwebz.com/css/jquery-ajax-supper-form-php-mysql/</link>
		<comments>http://www.izwebz.com/css/jquery-ajax-supper-form-php-mysql/#comments</comments>
		<pubDate>Mon, 01 Oct 2012 03:39:55 +0000</pubDate>
		<dc:creator>Mr. Nav</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=4246</guid>
		<description><![CDATA[Sau những video căn bản về AJAX của bạn Kytosai và những bài ứng dụng về Jquery AJAX của tớ chắc các bạn đã phần nào hiểu được cách thức hoạt động và công nghệ của AJAX ứng dụng vào trang web như thế nào. Hôm nay mình sẽ làm một tuts nâng cao hơn một chút là mình sẽ sử dụng Jquery AJAX để xử lý nhiều công việc trên cùng một trang. Khi các bạn lướt qua các trang web trên mạng có một số trang khi đăng ký một tài khoản người ta thiết kế một Form [...]]]></description>
				<content:encoded><![CDATA[<p>Sau những video căn bản về AJAX của bạn Kytosai và những bài ứng dụng về Jquery AJAX của tớ chắc các bạn đã phần nào hiểu được cách thức hoạt động và công nghệ của AJAX ứng dụng vào trang web như thế nào. Hôm nay mình sẽ làm một tuts nâng cao hơn một chút là mình sẽ sử dụng Jquery AJAX để xử lý nhiều công việc trên cùng một trang.</p>
<p><span id="more-4246"></span></p>
<p>Khi các bạn lướt qua các trang web trên mạng có một số trang khi đăng ký một tài khoản người ta thiết kế một Form để mình vừa đăng ký tài khoản, vừa đăng nhập, quên mật khẩu để bạn có thể thực hiện những công việc này một cách nhanh chóng và bây giờ mình sẽ hướng dẫn các bạn cách tạo một Form đa chức năng với Jquery AJAX + PHP &amp; MYSQL.</p>
<p>Trước khi bắt đầu các bạn nên xem lại các bài cũ của mình và bài của bạn Kytosai vì đây là bài viết nâng cao nên các bạn cũng cần phải có một chút kiến thức về PHP &amp; MYSQL.</p>
<p>Hình ảnh, database được đính kèm tronng file download.</p>
<h3>STEP 1 – SETUP HTML</h3>
<pre class="brush: php; title: ; notranslate">
&lt;?php session_start(); ?&gt;
&lt;!DOCTYPE HTML&gt;
&lt;html lang=&quot;en-US&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot;&gt;
	&lt;title&gt;Jquery AJAX Supper Form&lt;/title&gt;
	&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/reset.css&quot; media=&quot;all&quot;&gt;
	&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/style.css&quot; media=&quot;all&quot;&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.1.7.2.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/AJAX.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;div id=&quot;wrapper&quot;&gt;
		&lt;div id=&quot;container&quot;&gt;
			&lt;div class=&quot;title&quot;&gt;Jquery AJAX Supper Form&lt;/div&gt;
				&lt;div id=&quot;signup&quot;&gt;
				&lt;div class=&quot;loader&quot;&gt;&lt;/div&gt;
				&lt;div class=&quot;success&quot;&gt;Successfully !!!&lt;/div&gt;
				&lt;div class=&quot;error&quot;&gt;Error !!! Please try.&lt;/div&gt;
				&lt;form action=&quot;&quot; method=&quot;POST&quot; id=&quot;form_signup&quot;&gt;
					&lt;p&gt;
						&lt;label for=&quot;name&quot;&gt;Username&lt;/label&gt;
						&lt;input type=&quot;text&quot; name=&quot;name&quot; placeholder=&quot;Please insert your Name&quot; id=&quot;name&quot;&gt;
						&lt;div class=&quot;warning nameError&quot;&gt;Vui lòng nhập Username&lt;/div&gt;
					&lt;/p&gt;

					&lt;p&gt;
						&lt;label for=&quot;password&quot;&gt;Password&lt;/label&gt;
						&lt;input type=&quot;password&quot; name=&quot;password&quot; placeholder=&quot;Please insert your Password&quot; id=&quot;password&quot;&gt;
						&lt;div class=&quot;warning passwordError&quot;&gt;Vui lòng nhập Password&lt;/div&gt;
					&lt;/p&gt;

					&lt;p&gt;
						&lt;label for=&quot;email&quot;&gt;Email&lt;/label&gt;
						&lt;input type=&quot;email&quot; name=&quot;email&quot; placeholder=&quot;Please insert your Email&quot; id=&quot;email&quot;&gt;
						&lt;div class=&quot;warning emailError&quot;&gt;Email không hợp lệ&lt;/div&gt;
					&lt;/p&gt;

					&lt;p&gt;
						&lt;label for=&quot;captcha&quot;&gt;Security Code&lt;/label&gt;
						&lt;input type=&quot;text&quot; name=&quot;captcha&quot; placeholder=&quot;Please insert Captcha&quot; id=&quot;captcha&quot;&gt;
						&lt;div class=&quot;warning captchaError&quot;&gt;Vui lòng nhập Captcha&lt;/div&gt;
					&lt;/p&gt;

					&lt;p&gt;
						&lt;img src=&quot;captcha.php&quot; id=&quot;img_captcha&quot;&gt;
						&lt;img src=&quot;images/load.png&quot; id=&quot;load_captcha&quot;&gt;
					&lt;/p&gt;

					&lt;p&gt;
						&lt;input type=&quot;submit&quot; id=&quot;signup_form&quot; value=&quot;Signup&quot;&gt;
					&lt;/p&gt;
				&lt;/form&gt;
			&lt;/div&gt;&lt;!-- End #signup --&gt;


			&lt;div id=&quot;login&quot;&gt;
				&lt;div class=&quot;loader&quot;&gt;&lt;/div&gt;
				&lt;form action=&quot;&quot; method=&quot;POST&quot; id=&quot;form_login&quot;&gt;
					&lt;p&gt;
						&lt;label for=&quot;name&quot;&gt;Username&lt;/label&gt;
						&lt;input type=&quot;text&quot; name=&quot;name&quot; placeholder=&quot;Please insert your Name&quot; id=&quot;user-name&quot;&gt;
						&lt;div class=&quot;warning nameError&quot;&gt;Vui lòng nhập Username&lt;/div&gt;
					&lt;/p&gt;

					&lt;p&gt;
						&lt;label for=&quot;password&quot;&gt;Password&lt;/label&gt;
						&lt;input type=&quot;password&quot; name=&quot;password&quot; placeholder=&quot;Please insert your Password&quot; id=&quot;user-password&quot;&gt;
						&lt;div class=&quot;warning passwordError&quot;&gt;Vui lòng nhập Password&lt;/div&gt;
					&lt;/p&gt;

					&lt;p&gt;
						&lt;input type=&quot;submit&quot; id=&quot;login_form&quot; value=&quot;Login&quot;&gt;
					&lt;/p&gt;

					&lt;p&gt;
						&lt;label for=&quot;forgot&quot; id=&quot;getpass&quot;&gt;I forgot your password&lt;/label&gt;
					&lt;/p&gt;
				&lt;/form&gt;
			&lt;/div&gt;&lt;!-- End #login --&gt;


			&lt;div id=&quot;mail&quot;&gt;
				&lt;div class=&quot;loader&quot;&gt;&lt;/div&gt;
				&lt;form action=&quot;&quot; method=&quot;POST&quot; id=&quot;get_pass_form&quot;&gt;
					&lt;p&gt;
						&lt;label for=&quot;name&quot;&gt;Username&lt;/label&gt;
						&lt;input type=&quot;text&quot; name=&quot;name&quot; placeholder=&quot;Please insert your Name&quot; id=&quot;get-name&quot;&gt;
						&lt;div class=&quot;warning nameError&quot;&gt;Vui lòng nhập Username&lt;/div&gt;
					&lt;/p&gt;

					&lt;p&gt;
						&lt;label for=&quot;password&quot;&gt;Email&lt;/label&gt;
						&lt;input type=&quot;email&quot; name=&quot;email&quot; placeholder=&quot;Please insert your Email&quot; id=&quot;get-email&quot;&gt;
						&lt;div class=&quot;warning emailError&quot;&gt;Email không hợp lệ&lt;/div&gt;
					&lt;/p&gt;

					&lt;p&gt;
						&lt;input type=&quot;submit&quot; id=&quot;get_pass&quot; value=&quot;Submit&quot;&gt;
					&lt;/p&gt;
				&lt;/form&gt;
			&lt;/div&gt;&lt;!-- End #mail --&gt;

			
		&lt;/div&gt;&lt;!-- End #container --&gt;
	&lt;/div&gt;&lt;!-- End #wrapper --&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<h3>STEP 2 – CSS</h3>
<pre class="brush: css; title: ; notranslate">
*{margin: 0; padding: 0; }

@font-face { 
	font-family: 'UTM Avo';
	src:url('../font/UTM-Avo.ttf') format('truetype')
}

@font-face { 
	font-family: 'UTM DaxMedium';
	src:url('../font/UTM-DaxMedium.ttf') format('truetype')
}

@font-face { 
	font-family: 'Lobster';
	src:url('../font/Lobster.otf') format('truetype')
}

body {
	font-size: 62.5%;
	font-family: Arial, Helvetica, sans-serif;
}

a {
	text-decoration: none;
}

ol, ul {
	list-style: none;
}

#wrapper {
	width: 1000px;
	margin: 0 auto;
}

#container {
	width: 540px;
	margin-left: 200px;
	margin-top: 50px;
	border: 1px solid #d4d4d4;
	border-top: none;
	background: -moz-linear-gradient(top,#fff,#ebebeb);
	background: -webkit-linear-gradient(top,#fff,#ebebeb);
	background: -o-linear-gradient(top,#fff,#ebebeb);
	background: -ms-linear-gradient(top,#fff,#ebebeb);
	position: relative;
	overflow: hidden;
	padding-bottom: 20px;
}

#container .title {
	width: 100%;
	background: -moz-linear-gradient(top,#FbC3A4,#E65100);
  	background: -webkit-linear-gradient(top,#FbC3A4,#E65100);
  	background: -o-linear-gradient(top,#FbC3A4,#E65100);
  	background: -ms-linear-gradient(top,#FbC3A4,#E65100);
  	font-size: 2.0em;
  	color: #fff;
  	font-family: DaxMedium;
  	padding: 5px 0px;
  	text-align: center;
  	text-transform: uppercase;
  	border-top: 1px solid #E65100;
}

#signup {
	position: relative;
}

#signup .loader {
	position: absolute;
	top: 297px;
	left: 130px;
}

#signup .success {
	border: 1px solid green;
    padding: 5px;
    width: 202px;
    color: green;
    font-size: 1.4em;
    margin-left: 170px;
    margin-bottom: 5px;
    margin-top: 5px;
  	display: none;
}

#signup .error {
	border: 1px solid red;
    padding: 5px;
    width: 202px;
    color: red;
    font-size: 1.4em;
    margin-left: 170px;
    margin-top: 5px;
 	display: none;
}

#login .loader {
	position: absolute;
	top: 175px;
	right: 110px;
}

#mail .loader {
	position: absolute;
	top: 355px;
	right: 110px;
}

#signup form {
	float: left;
	margin-top: 20px;
	margin-left: 20px;
	border-right: 1px solid #777;
	width: 250px;
}

#signup form div.warning {
    border: 1px solid red;
    padding: 5px;
    width: 202px;
    color: red;
    font-size: 1.4em;
    display: none;
}

#signup form p {
	padding-bottom: 5px;
}

#signup form label {
	display: block;
	padding-bottom: 5px;
	font-size: 1.4em;
	color: #999;
}

#signup form input {
	width: 200px;
	height: 25px;
	font-family: UTM Avo;
	padding: 0px 5px;
}

#signup form input[type=&quot;submit&quot;] {
	width: 100px;
	height: 30px;
	background-color: #68b12f;
	background: -webkit-gradient(linear, left top, left bottom, from(#68b12f), to(#50911e));
	background: -webkit-linear-gradient(top, #68b12f, #50911e);
	background: -moz-linear-gradient(top, #68b12f, #50911e);
	background: -ms-linear-gradient(top, #68b12f, #50911e);
	background: -o-linear-gradient(top, #68b12f, #50911e);
	background: linear-gradient(top, #68b12f, #50911e);
	border: 1px solid #509111;
	border-bottom: 1px solid #5b992b;
	border-radius: 3px;
	-webkit-border-radius: 3px;
	-moz-border-radius: 3px;
	-ms-border-radius: 3px;
	-o-border-radius: 3px;
	box-shadow: inset 0 1px 0 0 #9fd574;
	-webkit-box-shadow: 0 1px 0 0 #9fd574 inset ;
	-moz-box-shadow: 0 1px 0 0 #9fd574 inset;
	-ms-box-shadow: 0 1px 0 0 #9fd574 inset;
	-o-box-shadow: 0 1px 0 0 #9fd574 inset;
	color: white;
	padding-bottom: 5px;
	font-size: 1.4em;
	text-align: center;
	text-shadow: 0 1px 0 #396715;
}

#signup form input[type=&quot;submit&quot;]:hover {
	opacity:.85;
	cursor: pointer; 
}
#signup form input[type=&quot;submit&quot;]:active {
	border: 1px solid #20911e;
	box-shadow: 0 0 10px 5px #356b0b inset; 
	-webkit-box-shadow:0 0 10px 5px #356b0b inset ;
	-moz-box-shadow: 0 0 10px 5px #356b0b inset;
	-ms-box-shadow: 0 0 10px 5px #356b0b inset;
	-o-box-shadow: 0 0 10px 5px #356b0b inset;
}

#signup form img#load_captcha {
	background: #fff;
	padding: 3px;  
  	margin-left: 5px;
    cursor: pointer;
}

#login form {
	float: right;
	margin-top: 20px;
	margin-right: 30px;
}

#login form div.warning {
    border: 1px solid red;
    padding: 5px;
    width: 202px;
    color: red;
    font-size: 1.4em;
    display: none;
}

#login form p {
	padding-bottom: 5px;
}

#login form label {
	display: block;
	padding-bottom: 5px;
	font-size: 1.4em;
	color: #999;
}

#login form input {
	width: 200px;
	height: 25px;
	font-family: UTM Avo;
	padding: 0px 5px;
}

#login form input[type=&quot;submit&quot;] {
	width: 100px;
	height: 30px;
	background-color: #68b12f;
	background: -webkit-gradient(linear, left top, left bottom, from(#68b12f), to(#50911e));
	background: -webkit-linear-gradient(top, #68b12f, #50911e);
	background: -moz-linear-gradient(top, #68b12f, #50911e);
	background: -ms-linear-gradient(top, #68b12f, #50911e);
	background: -o-linear-gradient(top, #68b12f, #50911e);
	background: linear-gradient(top, #68b12f, #50911e);
	border: 1px solid #509111;
	border-bottom: 1px solid #5b992b;
	border-radius: 3px;
	-webkit-border-radius: 3px;
	-moz-border-radius: 3px;
	-ms-border-radius: 3px;
	-o-border-radius: 3px;
	box-shadow: inset 0 1px 0 0 #9fd574;
	-webkit-box-shadow: 0 1px 0 0 #9fd574 inset ;
	-moz-box-shadow: 0 1px 0 0 #9fd574 inset;
	-ms-box-shadow: 0 1px 0 0 #9fd574 inset;
	-o-box-shadow: 0 1px 0 0 #9fd574 inset;
	color: white;
	padding-bottom: 5px;
	font-size: 1.4em;
	text-align: center;
	text-shadow: 0 1px 0 #396715;
}

#login form input[type=&quot;submit&quot;]:hover {
	opacity:.85;
	cursor: pointer; 
}
#login form input[type=&quot;submit&quot;]:active {
	border: 1px solid #20911e;
	box-shadow: 0 0 10px 5px #356b0b inset; 
	-webkit-box-shadow:0 0 10px 5px #356b0b inset ;
	-moz-box-shadow: 0 0 10px 5px #356b0b inset;
	-ms-box-shadow: 0 0 10px 5px #356b0b inset;
	-o-box-shadow: 0 0 10px 5px #356b0b inset;
}

#login form label[for=&quot;forgot&quot;] {
	padding-top: 5px;
	font-size: 1.4em;
	color: blue;
	cursor: pointer;
}


#mail form {
	float: right;
	margin-right: 30px;
	display: none;
}

#mail form div.warning {
    border: 1px solid red;
    padding: 5px;
    width: 202px;
    color: red;
    font-size: 1.4em;
    display: none;
    
}

#mail form p {
	padding-bottom: 5px;
}

#mail form label {
	display: block;
	padding-bottom: 5px;
	font-size: 1.4em;
	color: #999;
}

#mail form input {
	width: 200px;
	height: 25px;
	font-family: UTM Avo;
	padding: 0px 5px;
}

#mail form input[type=&quot;submit&quot;] {
	width: 100px;
	height: 30px;
	background-color: #68b12f;
	background: -webkit-gradient(linear, left top, left bottom, from(#68b12f), to(#50911e));
	background: -webkit-linear-gradient(top, #68b12f, #50911e);
	background: -moz-linear-gradient(top, #68b12f, #50911e);
	background: -ms-linear-gradient(top, #68b12f, #50911e);
	background: -o-linear-gradient(top, #68b12f, #50911e);
	background: linear-gradient(top, #68b12f, #50911e);
	border: 1px solid #509111;
	border-bottom: 1px solid #5b992b;
	border-radius: 3px;
	-webkit-border-radius: 3px;
	-moz-border-radius: 3px;
	-ms-border-radius: 3px;
	-o-border-radius: 3px;
	box-shadow: inset 0 1px 0 0 #9fd574;
	-webkit-box-shadow: 0 1px 0 0 #9fd574 inset ;
	-moz-box-shadow: 0 1px 0 0 #9fd574 inset;
	-ms-box-shadow: 0 1px 0 0 #9fd574 inset;
	-o-box-shadow: 0 1px 0 0 #9fd574 inset;
	color: white;
	padding-bottom: 5px;
	font-size: 1.4em;
	text-align: center;
	text-shadow: 0 1px 0 #396715;
}

#mail form input[type=&quot;submit&quot;]:hover {
	opacity:.85;
	cursor: pointer; 
}
#mail form input[type=&quot;submit&quot;]:active {
	border: 1px solid #20911e;
	box-shadow: 0 0 10px 5px #356b0b inset; 
	-webkit-box-shadow:0 0 10px 5px #356b0b inset ;
	-moz-box-shadow: 0 0 10px 5px #356b0b inset;
	-ms-box-shadow: 0 0 10px 5px #356b0b inset;
	-o-box-shadow: 0 0 10px 5px #356b0b inset;
	
}
</pre>
<p>Sau khi xong HTML/CSS cho Form thì các bạn xem demo ở dưới</p>
<div id="view-demo">
<a href="http://minhman.me/izwebz/supper-form/demo-1" target="_blank" class="view-demo">Demo</a>
</div>
<h3>STEP 3 – SIGNUP FORM + JQUERY AJAX</h3>
<pre class="brush: php; title: ; notranslate">
session_start();

	if($_SESSION['security_code'] == $_POST['captcha']) {

	$db = mysqli_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;&quot;,&quot;ajax_form&quot;);
		$username = mysqli_real_escape_string($db,$_POST['name']);
		$password = mysqli_real_escape_string($db,$_POST['password']);
		$hash_pass = sha1($password);
		$email = $_POST['email'];

		$query = &quot;INSERT INTO signup(user_name,password,email) VALUES ('&quot;.$username.&quot;','&quot;.$hash_pass.&quot;','&quot;.$email.&quot;')&quot;;
		$result = mysqli_query($db,$query);
		echo &quot;true&quot;;
	} else {
		echo &quot;false&quot;;
	}
</pre>
<p>Tớ giải thích một chút trong này nhé, Form đăng ký lúc nào cũng có Captcha thì việc đầu tiên mình sẽ kiểm tra xem người dùng đã nhập đúng Captcha hay chưa, nếu đúng thì mình thực hiện nhiệm vụ của Form và ngược lại thì trả về kết quả là “false”.</p>
<p>Các bạn chú ý là ở bài trước mình đã hướng dẫn các bạn dùng Jquery AJAX để xử lý Form thì luôn luôn có kết quả trả về để khi Form được success thì mình gọi hàm truy hồi để so sánh chuỗi trả về thì trong bài này cũng y như vậy. Nếu đúng thì mình thực hiện lấy các giá trị của Form, password của mình lưu trong CSDL là một chuỗi được mã hóa 40 ký tự với hàm sha1 nên mình sẽ mã hóa nó trước khi lưu vào CSDL. Sau đó mình insert vào CSDL và trả về kết quả là “true” thôi.</p>
<p>Do bài này mình sử dụng Jquery AJAX để xử lý nhiều Form nên mình sẽ viết một hàm là ajax_loader để khi mình cần sử dụng thì mình gọi nó ra.</p>
<pre class="brush: jscript; title: ; notranslate"> 
function ajax_loader(type,url,data_form) {
	$.ajax({
	type: type,
	url: url,
	data: data_form,
	success: function(data_success) {
		if(data_success == &quot;true&quot;) {
			$('.loader').fadeOut('fast');
			$(&quot;.success&quot;).slideDown('slow').delay(3000).slideUp('slow');
			clear_form();
			change_captcha();
		} else {
			$('.loader').fadeOut('fast');
			$(&quot;.error&quot;).slideDown('slow').delay(3000).slideUp('slow');
		}
	}
	});
}
</pre>
<ul>
<li>Hàm này của mình sẽ truyền vào cho nó 3 tham số :</li>
<li>Type =&gt; Phương thức truyền dữ liệu </li>
<li>Url =&gt; Đường dẫn tới file xử lý dữ liệu</li>
<li>Data_form =&gt; Dữ liệu của Form</li>
</ul>
<p>Tiếp theo mình sẽ xử lý Form đăng ký như sau:</p>
<pre class="brush: jscript; title: ; notranslate"> 
$(document).ready(function() {   
	$(&quot;#signup_form&quot;).click(function() {
	var name = $(&quot;#name&quot;).val();
	var password = $(&quot;#password&quot;).val();
	var email = $(&quot;#email&quot;).val();
	var email_regex = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
	var captcha = $(&quot;#captcha&quot;).val();
	var data_signup = 'name=' + name + '&amp;password=' + password + '&amp;email=' + email + '&amp;captcha=' + captcha; 
	var type = &quot;POST&quot;;
	var url = &quot;signup.php&quot;;
	var form = &quot;#form_signup&quot;;
});
</pre>
<p>Khi Form được click thì mình thực hiện lấy các giá trị của Form thông qua id của input và lưu vào một biến là data_signup, nhắc lại bài cũ một chút là chuỗi trong biến data_signup là thuộc tính name của input nhé. </p>
<p>Sau đó mình sẽ khai báo 3 biến tiếp theo là type, url, form. Form này mình sử dụng phương thức là POST thì gán giá trị là POST, file xử lý dữ liệu của mình là signup.php, còn biến form mình khai báo thêm để khi mình select trong Jquery gọn hơn. Các tham số này các bạn cũng không cần khai báo và viết vào luôn cũng được nhưng mình khai báo biến ra để các bạn thấy rõ hơn.</p>
<p>Tiếp theo mình sẽ kiểm tra dữ liệu được nhập vào.</p>
<pre class="brush: jscript; title: ; notranslate">
if(name == &quot;&quot;) {
	$(form + &quot; &gt; .nameError&quot;).slideDown('slow').delay(2000).slideUp('slow');
	$(&quot;#name&quot;).focus();
	return false;
}
if(password == &quot;&quot;) {
	$(form + &quot; &gt; .passwordError&quot;).slideDown('slow').delay(2000).slideUp('slow');
	$(&quot;#password&quot;).focus();
	return false;
}
if(!email_regex.test(email)) {
	$(form + &quot; &gt; .emailError&quot;).slideDown('slow').delay(2000).slideUp('slow');
	$(&quot;#email&quot;).focus();
	return false;
}
if(captcha == &quot;&quot;) {
	$(form + &quot; &gt; .captchaError&quot;).slideDown('slow').delay(2000).slideUp('slow');
	$(&quot;#captcha&quot;).focus();
	return false;
}
</pre>
<p>Trong bài này mình sử dụng class Error chung cho tất cả các Form nên mình khai báo thêm một biến form để select đúng Form của mình đang được submit, nếu không khi mình submit Form này thì lỗi của các Form khác cũng được show ra. Nhắc lại một chút là nối chuỗi trong Jquery là “ + “ và dấu “ &gt; “ tức là thuộc con của thành phần đứng trước. Vậy Form mình đang submit có id là #signup_form thì mình sẽ select lỗi của Form này và hiển thị ra ngoài. </p>
<p>Tiếp theo mình sẽ gọi hàm ajax_loader mà mình đã viết ở trên ra để xử lý Form </p>
<pre class="brush: jscript; title: ; notranslate"> 
$(&quot;#signup &gt; .loader&quot;).html(&quot;&lt;img src='images/loader.gif'/&gt;&quot;).fadeIn('fast');
	ajax_loader(type,url,data_signup);
return false;
</pre>
<p>Hình ảnh loading của mình cũng phải select cho đúng Form của nó nhé, tham số mình truyền vào hàm này thì mình đã khai báo 3 biến ở trên và bây giờ mình truyền 3 biến này vào cho hàm và return false là xong ^^.</p>
<p>Sau khi xong phần này các bạn có thể xem ở dưới, một điều nữa là nếu các bạn muốn test hoàn chỉnh bài này thì khi đăng ký Form các bạn vui lòng điền Email có thật để phần tiếp theo mình phục hồi mật khẩu nó sẽ gửi mật khẩu về đúng Email của bạn nhé.</p>
<div id="view-demo">
<a href="http://minhman.me/izwebz/supper-form/demo-2" target="_blank" class="view-demo">Demo</a>
</div>
<h3>STEP 4 – LOGIN FORM + JQUERY AJAX</h3>
<pre class="brush: php; title: ; notranslate"> 
session_start();
	$db = mysqli_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;&quot;,&quot;ajax_form&quot;);
	$username = mysqli_real_escape_string($db,$_POST['name']);
	$password = mysqli_real_escape_string($db,$_POST['password']);
	$hash_pass = sha1($password);

	$query = &quot;SELECT user_name,password FROM signup WHERE user_name='&quot;.$username.&quot;'&quot;;
	$result = mysqli_query($db,$query);
	$row = mysqli_fetch_array($result);

	if(mysqli_num_rows($result) &gt; 0) {
		if(strcmp($row['password'],$hash_pass)==0) {
			echo &quot;true&quot;;
			$_SESSION['user_name'] = $username;
		} else {
			echo &quot;false&quot;;
		}
	} else {
		echo &quot;false&quot;;
	}
</pre>
<p>Đầu tiên mình kết nối CSDL, lấy giá trị của Form và dùng hàm sha1 để mã hóa password, sau đó mình sẽ SELECT username, password với điều kiện là username đang login vào. </p>
<p>Tiếp theo mình sẽ kiểm tra xem, password họ nhập vào có đúng với password lưu trong CSDL hay không, mình dùng hàm strcmp để so sánh 2 chuỗi này nếu nó == 0 có nghĩa là 2 cái này giống nhau thì mình trả về kết quả là “true” và lưu username này vào SESSION và ngược lại thì trả về kết quả là “false”.</p>
<p>Lưu ý là khi mình so sánh password phải so sánh với cái password mình đã mã hóa nhé, đừng so sánh với password mà họ nhập vào thì sẽ không đúng đâu vì password mình lưu trong CSDL đã được mã hóa nhé.</p>
<p>Tiếp theo mình sẽ sử dụng AJAX để xử lý Form như sau :</p>
<pre class="brush: jscript; title: ; notranslate"> 
$(&quot;#login_form&quot;).click(function() {
	var name = $(&quot;#user-name&quot;).val();
	var password = $(&quot;#user-password&quot;).val();
	var data_login = 'name=' + name + '&amp;password=' + password;
	var form = &quot;#form_login&quot;;
if(name == &quot;&quot;) {
	$(form + &quot; &gt; .nameError&quot;).slideDown('slow').delay(2000).slideUp('slow');
	$(&quot;#user-name&quot;).focus();
	return false;
}
if(password == &quot;&quot;) {
	$(form + &quot; &gt; .passwordError&quot;).slideDown('slow').delay(2000).slideUp('slow');
	$(&quot;#user-password&quot;).focus();
	return false;
}
$(&quot;#login &gt; .loader&quot;).html(&quot;&lt;img src='images/loader.gif'/&gt;&quot;).fadeIn('fast');
$.ajax({
	type: &quot;POST&quot;,
	url: &quot;login.php&quot;,
	data: data_login,
	success: function(data_success) {
		if(data_success == &quot;true&quot;) {
			$('.loader').fadeOut('fast');
			document.location='page.php';
		} else {
			$('.loader').fadeOut('fast');
			$(&quot;.error&quot;).slideDown('slow').delay(3000).slideUp('slow');
		}
	}
});
	return false;
});
</pre>
<p>Khi Form được click thì mình thực hiện lấy giá trị của Form và lưu nó vào biến data_login sau đó kiểm tra lỗi và gọi AJAX để thực hiện xử lý Form. Các bạn thấy ở đây mình không gọi lại hàm ajax_loader mà phải viết lại AJAX vì trong đoạn xử lý của mình sẽ khác đi một chút đó là khi thực hiện thành công thì mình sẽ chuyển nó sang một trang mới mà cấu trúc trong hàm ajax_loader của mình là khác nên mình không thể sử dụng lại nó được. </p>
<pre class="brush: jscript; title: ; notranslate"> 
document.location='page.php';  // gọi trang này khi AJAX xử lý trả về kết quả là “true”
</pre>
<p>Trang page.php của mình chỉ đơn giãn vậy thôi, mình chỉ cần kiểm tra xem nếu không có SESSION thì mình trỏ nó về lại file index.php.</p>
<pre class="brush: php; title: ; notranslate">
session_start();
if(empty($_SESSION['user_name'])) {
	header(&quot;Location: index.php&quot;);
}
if(isset($_GET['logout'])){
	session_destroy();
	header(&quot;Location:index.php&quot;);
}
echo &quot;&lt;a href='page.php?logout'&gt;&lt;b&gt;Logout&lt;/b&gt;&lt;/a&gt;&quot;;
echo &quot;&lt;div align='center'&gt;Login successfully&lt;/div&gt;&quot;;
</pre>
<p>Nếu người dùng thực hiện logout thì mình hủy SESSION và trỏ về index.php, ở dưới mình echo thẻ a ra và truyền cho nó tham số logout để khi họ logout thì mình sẽ GET được tham số này và hủy SESSION và cuối cùng mình xuất ra thông báo thôi.</p>
<h3>STEP 5 – FORGOT PASSWORD + JQUERY AJAX</h3>
<pre class="brush: php; title: ; notranslate"> 
$user_name = $_POST['name'];
		$email = $_POST['email'];
		$password = sha1($user_name);
		$db = mysqli_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;&quot;,&quot;ajax_form&quot;);

		$querys = &quot;SELECT user_name, email FROM signup WHERE user_name='&quot;.$user_name.&quot;'&quot;;
		$results = mysqli_query($db,$querys);
		$row = mysqli_fetch_array($results);

		if(mysqli_num_rows($results) &gt; 0) {
			if(strcmp($row['email'],$email)==0) {
				$query = &quot;UPDATE signup 
						  SET password='&quot;.$password.&quot;' 
						  WHERE user_name='&quot;.$user_name.&quot;'&quot;;
				$result = mysqli_query($db,$query);

				$to = $_POST['email'];
				$header = &quot;Jquery AJAX Supper Form + PHP &amp; MYSQL&quot;;
				$subject = &quot;New Password&quot;;

				$body = &quot;Ngày: &quot;. date('d/m/Y').&quot;\n&quot;;
				$body .= &quot;Username: &quot;.$user_name . &quot; - Email:&quot; . $email . &quot;\n&quot;;
				$body .= &quot;Your password: &quot;.$user_name;
				$headers = &quot;From: $header \n&quot;;

				mail($to, $subject, $body, $headers);
				echo &quot;true&quot;;
			} else {
				echo &quot;false&quot;;
			}
		} else {
			echo &quot;false&quot;;
		}
</pre>
<p>Đầu tiên mình sẽ lấy giá trị của Form sau đó kết nối CSDL và SELECT username, email với điều kiện là username đang thực hiện phục hồi password.</p>
<p>Tiếp theo mình sẽ thực hiện so sánh chuỗi Email từ người dùng nhập vào và Email lưu trong CSDL với hàm strcmp xem có giống nhau không, nếu đúng thì mình thực hiện nhiệm vụ của Form là khôi phục mật khẩu cho họ rồi trả về kết quả là “true” và ngược lại thì trả về kết quả là “false”.</p>
<p>Nếu đúng username và email đó thực hiện lấy lại mật khẩu thì mình thực hiện câu lệnh truy vấn SQL để UPDATE mật khẩu mới cho họ với điều kiện là chính username đang thực hiện phục hồi password, mình sẽ lấy chính tên username đó làm mật khẩu cho họ để họ khỏi bị quên ^^.</p>
<p>Lưu ý là mật khẩu này mình lưu vào CSDL thì phải mã hóa nó với hàm sha1 nhé, ở trên mình đã mã hóa biến $username và lưu nó vào biến $password rồi nhé. Và mình UPDATE password cho họ chính là biến $password mình đã mã hóa nhé, sau đó mình sẽ thực hiện gửi một Email có nội dung là mật khẩu của họ kiểm tra và đăng nhập trở lại thì password của mình gửi đến Email cho họ sẽ là password chưa được mã hóa và khi họ thực hiện đăng nhập vào thì nó sẽ tự động mã hóa và so sánh với CSDL của mình. Sau đó mình thực hiện hàm mail và trả về kết quả là “true”.</p>
<p>Tiếp theo mình sẽ sử dụng AJAX để xử lý Form như sau :</p>
<pre class="brush: jscript; title: ; notranslate"> 
$(&quot;#get_pass&quot;).click(function() {
	var name = $(&quot;#get-name&quot;).val();
	var email = $(&quot;#get-email&quot;).val();
	var email_regex = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
	var data_get_pass = 'name=' + name + '&amp;email=' + email;
	var type = &quot;POST&quot;;
	var url = &quot;get_pass.php&quot;;
	var form = &quot;#get_pass_form&quot;;
if(name == &quot;&quot;) {
	$(form + &quot; &gt; .nameError&quot;).slideDown('slow').delay(2000).slideUp('slow');
	$(&quot;#get-name&quot;).focus();
	return false;
}
if(!email_regex.test(email)) {
	$(form + &quot; &gt; .emailError&quot;).slideDown('slow').delay(2000).slideUp('slow');
	$(&quot;#get-email&quot;).focus();
	return false;
}
$(&quot;#mail  &gt; .loader&quot;).html(&quot;&lt;img src='images/loader.gif'/&gt;&quot;).fadeIn('fast');
ajax_loader(type,url,data_get_pass);
return false;
});
$(&quot;#getpass&quot;).click(function() {
	$(&quot;#mail  &gt; form&quot;).slideToggle('normal');
});
</pre>
<p>Khi Form được click thì sẽ thực hiện lấy giá trị của Form và lưu vào biến data_get_pass, sau đó khai báo thêm 2 biến nữa để truyền vào cho hàm ajax_loader và thêm biến form nữa để mình select jquery cho chính xác ^^.</p>
<p>Tiếp theo mình kiểm tra lỗi của Form, nếu có lỗi mình sẽ show nó ra, sau đó mình sẽ gọi hàm ajax_loader để xử lý Form này. Mình nói thêm 1 chút nữa là ở cái Form Login mình có cái label để click hiển thị ra cái Form Forgot password nó có id là #get_pass thì mình thêm một chút Jquery cho nó cho đẹp ^^. Khi nó được click thì nó sẽ kéo lên kéo xuống cái Form khi mình sử dụng Event slideToggle.</p>
<p>Sau khi xong thì bạn có thể xem demo đầy đủ ở dưới.</p>
<div id="view-demo">
<a href="http://minhman.me/izwebz/supper-form" target="_blank" class="view-demo">Demo</a><br />
<a href="http://minhman.me/izwebz/supper-form/supper-form.rar" target="_blank" class="download">Download</a>
</div>
<p>Tớ hy vọng bài viết này sẽ giúp ích cho các bạn ^^.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/css/jquery-ajax-supper-form-php-mysql/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Phân trang với Jquery AJAX + PHP &amp; MYSQL</title>
		<link>http://www.izwebz.com/jquery/phan-trang-voi-jquery-ajax-php-mysql/</link>
		<comments>http://www.izwebz.com/jquery/phan-trang-voi-jquery-ajax-php-mysql/#comments</comments>
		<pubDate>Thu, 27 Sep 2012 05:42:12 +0000</pubDate>
		<dc:creator>Mr. Nav</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=4190</guid>
		<description><![CDATA[Hôm nay chúng ta sẽ tiếp tục làm việc với Jquery AJAX, ở bài trước mình đã hướng dẫn các bạn cách tạo một Contact Form với Jquery AJAX. Hôm nay mình sẽ hướng dẫn các bạn cách phân trang với Jquery AJAX + PHP &#38; MYSQL. Để tiện cho việc tiếp thu bài này, các bạn nên xem lại bài Phân trang với PHP &#38; MYSQL của anh Demon Warlock. Do đây là bài viết nâng cao, nên bạn cần biết một số kiến thức cơ bản về PHP&#038;MySQL để kết nối CSDL. Hình ảnh, database được đính kèm [...]]]></description>
				<content:encoded><![CDATA[<p>Hôm nay chúng ta sẽ tiếp tục làm việc với Jquery AJAX, ở bài trước mình đã hướng dẫn các bạn cách tạo một <a href="http://www.izwebz.com/css/contact-form-voi-jquery-ajax-php/" target="_blank">Contact Form với Jquery AJAX</a>. Hôm nay mình sẽ hướng dẫn các bạn cách phân trang với Jquery AJAX + PHP &amp; MYSQL.<br />
<span id="more-4190"></span></p>
<ul>
<li>Để tiện cho việc tiếp thu bài này, các bạn nên xem lại bài <a href="http://www.izwebz.com/video-tutorials/php-video-tutorials/phan-trang-voi-phpmysql/" target="_blank">Phân trang với PHP &amp; MYSQL</a> của anh Demon Warlock.</li>
<li>Do đây là bài viết nâng cao, nên bạn cần biết một số kiến thức cơ bản về PHP&#038;MySQL để kết nối CSDL.</li>
<li>Hình ảnh, database được đính kèm trong file download.</li>
</ul>
<h3>STEP 1 – PHÂN TRANG VỚI PHP &amp; MYSQL</h3>
<pre class="brush: php; title: ; notranslate">
&lt;!DOCTYPE HTML&gt;
&lt;html lang=&quot;en-US&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot;&gt;
	&lt;title&gt;Pagination with Jquery AJAX + PHP&lt;/title&gt;
	&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/reset.css&quot; media=&quot;all&quot;&gt;
	&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/style.css&quot; media=&quot;all&quot;&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.1.7.2.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/AJAX.js&quot;&gt;&lt;/script&gt; 
&lt;/head&gt;
&lt;body&gt;
	&lt;div id=&quot;wrapper&quot;&gt;
		&lt;div id=&quot;loading&quot;&gt;&lt;/div&gt;
		&lt;h1&gt;Pagination Jquery AJAX + PHP&lt;/h1&gt;
		&lt;div id=&quot;data&quot;&gt;
			&lt;nav role=&quot;list&quot;&gt;
				&lt;ul&gt;
			&lt;?php 
				
				$db = mysqli_connect('localhost','root','','pagination_ajax');
				$display = 10;
                if(isset($_GET['page']) &amp;&amp; (int)$_GET['page']&gt;=0) {
                   $page = $_GET['page'];
                } else { 
                    $query = &quot;SELECT COUNT(id) FROM data&quot;;
                    $result = mysqli_query($db,$query);
                    $rows = mysqli_fetch_array($result,MYSQLI_NUM);
                    $record = $rows[0];
	                if($record &gt; $display) {
	                	$page = ceil($record/$display);
	                } else {
	                	$page = 1;
	                }
                }

				$start = (isset($_GET['start']) &amp;&amp; (int)$_GET['start']&gt;=0) ? $_GET['start'] : 0;
				$current = ($start/$display)+1;
				$next = $start + $display;
                $previous = $start - $display;
                $last = ($page - 1)*$display;
                if ($current &gt;= 7) {
				    $start_page = $current - 3;
				    if ($page &gt; $current + 3)
				        $end_page = $current + 3;
				    else if ($current &lt;= $page &amp;&amp; $current &gt; $page - 6) {
				        $start_page = $page - 6;
				        $end_page = $page;
				    } else {
				        $end_page = $page;
				    }
				} else {
				    $start_page = 1;
				    if ($page &gt; 7)
				        $end_page = 7;
				    else
				        $end_page = $page;
				}



				$query_data = &quot;SELECT * FROM data
							   ORDER BY id 
	                   		   LIMIT $start, $display&quot;;
				$result_data = mysqli_query($db,$query_data);
				while($set = mysqli_fetch_array($result_data,MYSQLI_ASSOC)) {
						$id = $set['id'];
						$content = $set['content'];
					echo &quot;&lt;li&gt;&lt;span&gt;$id&lt;/span&gt; - $content&lt;/li&gt;&quot;;
				}
			?&gt;
				&lt;/ul&gt;
			&lt;/nav&gt;

			&lt;nav role=&quot;page&quot;&gt;
				&lt;ul&gt;
					&lt;?php 
				if($page &gt; 1) {
					if ($current &gt; 1) {
					    echo &quot;&lt;li&gt;&lt;a href='index.php?start=0&amp;page=$page'&gt;First&lt;/a&gt;&lt;/li&gt;&quot;;
					    echo &quot;&lt;li&gt;&lt;a href='index.php?start=$previous&amp;page=$page'&gt;Previous&lt;/a&gt;&lt;/li&gt;&quot;;
					} 

					for ($i = $start_page; $i &lt;= $end_page; $i++) {

					    if ($current == $i)
					        echo &quot;&lt;li class='current'&gt;$i&lt;/li&gt;&quot;;
					    else
					        echo &quot;&lt;li&gt;&lt;a href='index.php?start=&quot;.($display*($i-1)).&quot;&amp;page=$page'&gt;$i&lt;/a&gt;&lt;/li&gt;&quot;;
					}

					if ($current &lt; $page) {
					    echo &quot;&lt;li&gt;&lt;a href='index.php?start=$next&amp;page=$page'&gt;Next&lt;/a&gt;&lt;/li&gt;&quot;;
					    echo &quot;&lt;li&gt;&lt;a href='index.php?start=$last'&gt;Last&lt;/a&gt;&lt;/li&gt;&quot;;
					} 
				}
					?&gt;
				&lt;/ul&gt;
			&lt;/nav&gt;
		&lt;span class='per_page'&gt;&lt;?php echo &quot;Trang &quot; . $current . &quot; =&gt; &quot;. $page; ?&gt;&lt;/span&gt;

		&lt;/div&gt;
	&lt;/div&gt;&lt;!-- End #wrapper --&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<h3>STEP 1.1 – CSS</h3>
<pre class="brush: css; title: ; notranslate">
*{margin:0; padding:0;}

body {
	font-size: 62.5%;
	font-family: Arial, Helvetica, sans-serif;
}

#wrapper {
	width: 1000px;
	margin: 0 auto;
}

#data {
	position: relative;
}

h1 {
	font-size: 2.0em;
	text-align: center;
	margin-top: 50px;
}

nav[role=&quot;list&quot;] {
	position: absolute;
	left: 230px;
	top: 20px;
	font-size: 1.7em;
}

nav[role=&quot;list&quot;] ul li {
	padding-bottom: 10px;
}

nav[role=&quot;list&quot;] ul li span {
	color: green;
	font-weight: bold;
}

nav[role=&quot;page&quot;] {
	position: absolute;
	top: 300px;
	left: 220px;
}

nav[role=&quot;page&quot;] ul li {
	float: left;
	margin-left: 10px;
	background: url(../images/pagenavi_bg.jpg) repeat-x top left;
}

nav[role=&quot;page&quot;] ul li a {
	color: white;
	text-decoration: none;
	display: block; 
	padding: 8px;
	font-weight: bold;
	font-size: 1.2em;
}

nav[role=&quot;page&quot;] ul li a:hover {
	background: url(../images/pagenavi_bg.jpg) repeat-x bottom left;
}

nav[role=&quot;page&quot;] ul li.current {
	font-weight: normal;
	font-size: 1.2em; 
	padding: 8px;
	color: white;
	background: url(../images/pagenavi_bg.jpg) repeat-x bottom left 
}

#data &gt;  span.per_page {
	font-weight: bold; 
	padding: 8px 8px 9px 8px;
	color: white;
	background: url(../images/pagenavi_bg.jpg) repeat-x top left;
	position: absolute;
	top: 300px;
	right: 150px;
	font-size: 1.2em;
	width: 88px;
	text-align: center;
}


</pre>
<div id="view-demo">
<a href="http://minhman.me/izwebz/ajax-nav/demo-1" target="_blank" class="view-demo">Demo</a>
</div>
<p>Công việc mình cần làm ở phần này như sau :</p>
<p><strong>1. Xác định bao nhiêu dòng dữ liệu hiển thị trên một trang</strong></p>
<pre class="brush: php; title: ; notranslate">
$display = 10; // Mình muốn hiển thị 10 dòng trên một trang
</pre>
<p><strong>2. Tính tổng số trang</strong></p>
<pre class="brush: php; title: ; notranslate">
If(isset($_GET[‘page’]) &amp;&amp; (int)$_GET[‘page’]&gt;=0) {
	$page = $_GET[‘page’];
}
</pre>
<p>Đầu tiên mình sẽ kiểm tra xem nếu tổng số trang đã được tính chưa và tổng số trang của mình phải là một số nguyên &gt;=0 thì mình lấy giá trị của nó, nếu chưa có mình sẽ đi tính tổng số trang.</p>
<p>Mình sử dụng hàm COUNT trong câu lệnh truy vấn MYSQL để lấy ra tổng số dòng trong CSDL. Tiếp theo mình tính số trang bằng cách lấy tổng số dòng dữ liệu chia cho tổng số dữ liệu muốn hiển thị và dùng hàm ceil để làm tròn số vì mình không muốn trang của mình có số dư như là 1.4 hay 2.2, số trang của mình phải là một số nguyên không âm.</p>
<pre class="brush: php; title: ; notranslate">
if($record &gt; $display) {
	$page = ceil($record/$display);
} else {
	$page = 1;
}

</pre>
<p>Nhưng gặp trường hợp tổng số dòng dữ liệu mình lấy ra nó lại nhỏ hơn số dòng muốn hiển thị thì mình phải kiểm tra nó, nếu tổng số dữ liệu mình lớn hơn tổng số dòng hiển thị thì mình thực hiện tính và ngược lại thì tổng số trang của mình là 1.</p>
<p><strong>3. Xác định dòng bắt đầu trong CSDL</strong></p>
<pre class="brush: php; title: ; notranslate">
$start = (isset($_GET['start']) &amp;&amp; (int)$_GET['start']&gt;=0) ? $_GET['start'] : 0;
</pre>
<p>Nếu số đã có số dòng bắt đầu và nó là một số nguyên &gt;=0 thì mình lưu nó lại, ngược lại thì dòng bắt đầu của mình là 0.</p>
<p><strong>4. Tính trang hiện tại, trang sau, trang kế tiếp, trang cuối, hiển thị số trang.</strong></p>
<pre class="brush: php; title: ; notranslate">
$current = ($start/$display)+1;  // Trang hiện tại = ( số dòng bắt đầu / số dòng hiển thị ) + 1
$next = $start + $display;  // Trang tiếp theo =  số dòng bắt đầu + số dòng hiển thị 
$previous = $start - $display; // Trang sau = số dòng bắt đầu  - số dòng hiển thị
$last = ($page - 1)*$display; // Trang cuối = ( tổng số trang – 1 ) * số dòng hiển thị
</pre>
<p>Hiển thị số link của trang</p>
<pre class="brush: php; title: ; notranslate">
if ($cur_page &gt;= 7) {
	$start_page = $cur_page - 3;
if ($page &gt; $cur_page + 3)
	$end_page = $cur_page + 3;
else if ($cur_page &lt;= $page &amp;&amp; $cur_page &gt; $page - 6) {
	$start_page = $page - 6;
	$end_page = $page;
} else {
	$end_page = $page;
}
} else {
	$start_page = 1;
if ($page &gt; 7)
	$end_page = 7;
else
	$end_page = $page;
}
</pre>
<p>Mình muốn số link hiển thị là 7 để khi CSDL nó lên đến hàng ngàn dòng thì số link sẽ không hiển thị ra quá nhiều. Nếu trang hiện tại &gt;=7 thì trang bắt đầu bằng trang hiện tại trừ đi 3. Mình muốn ở sau trang hiện tại của mình là 3 trang và phía trước của nó là 3 trang thì mình kiểm tra thêm một lần nữa là nếu tổng số trang lớn hơn trang hiện tại + 3 thì trang kết thúc của mình là trang hiện tại + 3. Ngược lại nếu trang hiện tại mình nhỏ hơn hoặc bằng tổng số trang và trang hiện tại nhỏ hơn tổng số trang – 6 thì trang bắt đầu của mình là tổng số trang – 6 và trang kết thúc của mình là bằng chính tổng số trang. Nếu trường hợp trên không xảy ra thì mình gán trang kết thúc bằng tổng số trang.</p>
<p>Ngược lại của trường hợp trang hiện tại &gt;= 7 thì trang bắt đầu sẽ là 1. Nếu tổng số trang lớn hơn 7 thì trang kết thúc của mình sẽ là 7 và ngược lại thì trang kết thúc bằng tổng số trang. Đoạn hiển thị số link của trang có vẽ hơi khó hiểu, bạn nên xem kỹ nhé.</p>
<p><strong>5. Truy vấn CSDL</strong></p>
<p>Sau khi đã có hai biến $display &amp; $start thì mình bắt đầu SELECT CSDL, LIMIT ở đây được gọi là giới hạn, khi người dùng truy cập vào lần đầu tiên thì biến $start của mình sẽ không sét được có nghĩa là nó là = 0 và biến $display mình đã khai báo trên kia là 10 thì nó sẽ xuất ra cho mình 10 dòng dữ liệu đầu tiên.</p>
<p><strong>6. Hiển thị phân trang</strong></p>
<p>Sau khi mình đã tính toán các bước cần thiết ở trên, bây giờ mình sẽ cho nó hiển thị ra ngoài. Nếu tổng số trang của mình &gt; 1 thì mình sẽ phân trang cho nó còn nhỏ hơn 1 thì chỉ có 1 trang nên mình không cần phân trang làm gì.</p>
<p>Hiển thị trang đầu ( First page ) và trang sau ( Previous page )</p>
<pre class="brush: php; title: ; notranslate">
if ($current &gt; 1) {
	echo &quot;&lt;li&gt;&lt;a href='index.php?start=0&amp;page=$page'&gt;First&lt;/a&gt;&lt;/li&gt;&quot;;
if ($current &gt; 1) {
	echo &quot;&lt;li&gt;&lt;a href='index.php?start=$previous&amp;page=$page'&gt;Previous&lt;/a&gt;&lt;/li&gt;&quot;;
}

</pre>
<p>Nếu trang hiện tại của mình &gt; 1 thì nó mới xuất hiện, trang đầu của mình thì tham số start của mình chắc chắn nó sẽ = 0 thì mình sẽ gán trực tiếp giá trị vào luôn.</p>
<p>Hiển thị số link của trang ( Link page )</p>
<pre class="brush: php; title: ; notranslate">
for ($i = $start_page; $i &lt;= $end_page; $i++) {
	if ($current == $i)
	echo &quot;&lt;li class='current'&gt;$i&lt;/li&gt;&quot;;
else
echo &quot;&lt;li&gt;&lt;a href='index.php?start=&quot;.($display*($i-1)).&quot;&amp;page=$page'&gt;$i&lt;/a&gt;&lt;/li&gt;&quot;; }

</pre>
<p>Ở phần trên mình đã tính được trang bắt đầu và trang cuối của mình thì bây giờ mình sẽ dùng vòng lặp For để lấy nó ra. Khi người dùng truy cập lần đầu tiên thì trang bắt đầu của mình luôn luôn sẽ là 1 và trang kết thúc của mình sẽ là 7. Khi người dùng di chuyển sang trang 7 thì bước nhảy của mình sẽ được tính như ở trên có nghĩa là trang hiện tại của mình là 7 thì phía sau nó sẽ có 3 trang là 6 5 4 và phía trước của nó sẽ có 3 trang nữa là 8 9 10 và nó sẽ tiếp tục tăng dần cho đến trang cuối cùng.<br />
 Hiển thị trang tiếp theo ( Next page ) và trang cuối ( Last page )</p>
<pre class="brush: php; title: ; notranslate">
if ($current &lt; $page) {
	echo &quot;&lt;li&gt;&lt;a href='index.php?start=$next&amp;page=$page'&gt;Next&lt;/a&gt;&lt;/li&gt;&quot;;
}
if ($current &lt; $page) {
	echo &quot;&lt;li&gt;&lt;a href='index.php?start=$last'&gt;Last&lt;/a&gt;&lt;/li&gt;&quot;;
}
</pre>
<p>Nếu trang hiện tại của mình vẫn nhỏ hơn tổng số trang thì mình cho hiển thị nó ra, các tham số mình đã tính ở trên thì bây giờ chỉ việc thay biến đó vào thôi ^^.</p>
<h3>STEP 2 – ÁP DỤNG JQUERY AJAX</h3>
<pre class="brush: php; title: ; notranslate">
&lt;?php 

if($_POST['page']) {
$page = $_POST['page'];
$current_page = $page;
$page -= 1;
$display = 10;
$start = $page * $display;
$db = mysqli_connect('localhost','root','','pagination_ajax');

$data = &quot;&quot;;

$query = &quot;SELECT * FROM data
		  ORDER BY id
		  LIMIT $start, $display&quot;;
$result = mysqli_query($db,$query);
while($rows = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
	$id = $rows['id'];
	$content = $rows['content'];
	$data .= &quot;&lt;li&gt;&lt;span&gt;$id&lt;/span&gt; - $content&lt;/li&gt;&quot;;
}

$data = &quot;&lt;nav role='list'&gt;
			&lt;ul&gt;&quot;.$data.&quot;&lt;/ul&gt;
		&lt;/nav&gt;&quot;;

$query_page = &quot;SELECT COUNT(*) AS count FROM data&quot;;
$result_page = mysqli_query($db,$query_page);
$row = mysqli_fetch_array($result_page);
$count = $row['count'];
$pages = ceil($count / $display);

if ($current_page &gt;= 7) {
	$start_page = $current_page - 3;
		if ($pages &gt; $current_page + 3)
			$end_page = $current_page + 3;
		else if ($current_page &lt;= $pages &amp;&amp; $current_page &gt; $pages - 6) {
			$start_page = $pages - 6;
			$end_page = $pages;
		} else {
			$end_page = $pages;
		}
} else {
	$start_page = 1;
if ($pages &gt; 7)
	$end_page = 7;
else
	$end_page = $pages;
}

$data .= &quot;&lt;nav role='page'&gt;&lt;ul&gt;&quot;;

if ($current_page &gt; 1) {
	$data .= &quot;&lt;li page='1'&gt;First&lt;/li&gt;&quot;;
	$previous = $current_page - 1;
	$data .= &quot;&lt;li page='$previous'&gt;Previous&lt;/li&gt;&quot;;
} 

for ($i = $start_page; $i &lt;= $end_page; $i++) {
	if ($current_page == $i)
		$data .= &quot;&lt;li page='$i' class='current'&gt;{$i}&lt;/li&gt;&quot;;
	else
		$data .= &quot;&lt;li page='$i'&gt;{$i}&lt;/li&gt;&quot;;
}

if ($current_page &lt; $pages) {
	$next = $current_page + 1;
	$data .= &quot;&lt;li page='$next'&gt;Next&lt;/li&gt;&quot;;
	$data .= &quot;&lt;li page='$pages'&gt;Last&lt;/li&gt;&quot;;
} 

$total_page = &quot;&lt;span class='per_page'&gt;Trang &quot;. $current_page .&quot; =&gt; $pages &lt;/span&gt;&quot;;

$data = $data . &quot;&lt;/ul&gt;&lt;/nav&gt;&quot;.$total_page;

echo $data;

}
?&gt;
</pre>
<p>Khi mình bắt đầu chuyển nó sang dạng phân trang với Jquery AJAX thì cấu trúc của nó sẽ có một số thay đổi để phù hợp nên phần này là quan trọng các bạn hãy chú ý thật kỹ nhé.</p>
<p>Khi mình sử dụng Jquery AJAX để load dữ liệu thì mình phải kiểm tra xem nếu có trang nào thì mới thực hiện load dữ liệu và ngược lại sẽ không load gì cả.</p>
<p>Nếu có thì mình sẽ lưu giá trị nó vào một biến $page và biến $page của mình khi được load lần đầu tiên thì nó luôn luôn là trang 1 và nó cũng chính là trang hiện tại.</p>
<p>Các bạn thấy biến $page -= 1 nó có nghĩa là khi truy cập lần đầu tiên thì biến $page của mình là trang 1 thì -=1 là chính nó trừ đi 1 thì lúc này $page của mình sẽ là 0. Sau đó mình có biến $display =10 thì lúc này $page của mình = 0 và $display = 10 thì mình sẽ có $start = 0 vì 0 x 10 thì = 0 chứ nhỉ ^^ .</p>
<p>Trong cuộc gọi AJAX thì dữ liệu của mình trả về là một chuỗi hay một mảng giá trị lưu giữ toàn bộ giá trị đó thì lúc này mình sẽ khởi tạo một biến $data = &#8221; &#8220;, có nghĩa là chuỗi này ban đầu sẽ chưa có gì cả. Sau đó mình mới truy vấn CSDL và lấy dữ liệu của nó ra và lưu vào biến này.</p>
<p>Trong đó biến $data .= này có nghĩa là khi vòng lặp while của mình nó lấy dữ liệu từ dòng thứ 1 cho đến dòng cuối cùng thì nó sẽ nối tiếp lại với nhau. Trong PHP muốn nối một chuỗi thì mình dùng dấu “ . “ nhưng ở đây mình muốn nối tiếp nhiều chuỗi vào cùng trong một biến thì mình dùng thêm “ = “ vậy là mình đã nối chúng lại với nhau thành một chuỗi lớn.</p>
<p>Và cuối cùng mình cũng thực hiện các bước phân trang như ở phần 1 và mình sẽ không xuất nó ra mà lưu nó tiếp vào biến $data vì để khi mình echo $data ra thì dữ liệu của mình sẽ trả về toàn bộ.</p>
<p>Nhưng một đặc điểm đáng lưu lý ở đây là các bạn sẽ thấy mình sẽ không còn dùng thẻ a với link là index.php?start=??&amp;page=?? nữa vì bây giờ mình chỉ cần lấy số trang và dùng AJAX để load trang đó nên mình chỉ cần thẻ li là đủ, trong này mình sẽ truyền tham số cho thẻ li qua một chổ tạm là page và khi mình load trang thì chỉ cần sử dụng hàm attr trong Jquery để lấy tham số này và truyền vào để AJAX xử lý thôi.</p>
<p>Bước cuối cùng cũng là bước quan trọng nhất khi dữ liệu mình đã có thì mình dùng AJAX để gọi nó ra.</p>
<pre class="brush: jscript; title: ; notranslate">
function pagination(page){
	$('#loading').html(&quot;&lt;img src='images/loading.gif'/&gt;&quot;).fadeIn('fast');                 
	$.ajax ({
		type: &quot;POST&quot;,
		url: &quot;pagination.php&quot;,
		data: &quot;page=&quot;+page,
		success: function(data_page) { 
			$('#loading').fadeOut('fast');
			$(&quot;#data&quot;).html(data_page);  
		}
	});
}

</pre>
<p>Mình sẽ viết một hàm pagination có tham số là page có nghĩa là tham số mình truyền vào chính là số trang. Mình vẫn sử dụng phương thức là POST và dữ liệu của mình là từ file pagination.php, data của mình là số trang hiển thị, thì page của mình sẽ = tham số page, nhắc lại một xíu là dấu &#8221; + &#8221; có nghĩa là nối chuỗi trong Jquery nhé. Lúc này trong thẻ</p>
<pre class="brush: xml; title: ; notranslate">&lt;div id=&quot;data&quot;&gt;</pre>
<p>của mình sẽ là rỗng, chưa có gì cả và bây giờ mình dùng AJAX để đổ dữ liệu vào đó.</p>
<pre class="brush: jscript; title: ; notranslate">
   pagination(1);  
   $(&quot;nav[role='page'] &gt; ul li&quot;).live('click',function(){
	var page = $(this).attr('page');
	pagination(page);
});    
</pre>
<p>Sau khi viết xong hàm pagination để gọi trang thì lúc đầu mình muốn khi người dùng truy cập lần đầu tiên nó sẽ gọi trang 1 thì mình chạy hàm pagination với tham số page=1. Sau đó mình sử dụng Jquery để xử lý khi họ chuyển trang, khi thẻ li được click thì mình sẽ lấy tham số của thẻ li mà mình đã truyền trong file pagination.php đó lưu vào biến page và gọi hàm pagination với tham số là page để gọi trang mà họ di chuyển tới.</p>
<p>Một điểm nữa là khi mình sử dụng sự kiện live() thì sự kiện này sẽ được sử dụng trong suốt quá trình chạy website và khi mình dùng AJAX kết quả trả về là success thì dữ liệu sẽ được append vào document. Những element ( thẻ li ) sau sẽ không nhận được các sự kiện click hay submit nữa, khi đó mình phải sử dụng sự kiện live() để di chuyển sang trang khác.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/jquery/phan-trang-voi-jquery-ajax-php-mysql/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Contact Form với Jquery AJAX + PHP</title>
		<link>http://www.izwebz.com/css/contact-form-voi-jquery-ajax-php/</link>
		<comments>http://www.izwebz.com/css/contact-form-voi-jquery-ajax-php/#comments</comments>
		<pubDate>Mon, 24 Sep 2012 08:17:35 +0000</pubDate>
		<dc:creator>Mr. Nav</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=4145</guid>
		<description><![CDATA[Hi! Xin chào các bạn, mình là Mr.Nav, hôm nay mình sẽ hướng dẫn các bạn cách tạo một Contact Form với Jquery AJAX + PHP. Đây là tuts đầu tiên do mình viết nếu có thiếu sót gì các bạn góp ý để mình hoàn thiện hơn trong các bài sau. Mình sẽ cố gắng viết rõ ràng để các bạn tiện theo dỗi và nắm bắt được code trong bài. Để tiện cho việc tiếp thu bài này, các bạn cần biết PHP căn bản và các bạn hãy xem thêm các tuts AJAX đầu tiên do bạn [...]]]></description>
				<content:encoded><![CDATA[<p>Hi! Xin chào các bạn, mình là Mr.Nav, hôm nay mình sẽ hướng dẫn các bạn cách tạo một Contact Form với Jquery AJAX + PHP. Đây là tuts đầu tiên do mình viết nếu có thiếu sót gì các bạn góp ý để mình hoàn thiện hơn trong các bài sau. Mình sẽ cố gắng viết rõ ràng để các bạn tiện theo dỗi và nắm bắt được code trong bài.<br />
<span id="more-4145"></span><br />
Để tiện cho việc tiếp thu bài này, các bạn cần biết PHP căn bản và các bạn hãy xem thêm các tuts AJAX đầu tiên do bạn KytoSai viết.</p>
<ul>
<li><a href="http://www.izwebz.com/video-tutorials/ajax-thuan-javascript-phan-2-su-dung-phuong-thuc-post/" target="_blank">[Ajax phần 1] Ajax thuần javascript</a></li>
<li><a href="http://www.izwebz.com/video-tutorials/ajax-thuan-javascript-by-kytosai/" target="_blank">[Ajax phần 2] Ajax thuần javascript – Sử dụng phương thức POST</a></li>
<li><a href="http://www.izwebz.com/video-tutorials/jquery-video-tutorials/ajax-phan-3-jquery-ajax-co-ban/" target="_blank">[Ajax phần 3] jQuery Ajax cơ bản</a></li>
</ul>
<p>Mọi thắc mắc các bạn có thể gửi mail cho mình: mr.nav90@gmail.com hoặc các bạn comment ở dưới mình sẽ support cho các bạn nhanh nhất có thể, nào chúng ta cùng bắt đầu ^^</p>
<h3>Step 1 – Setup HTML</h3>
<pre class="brush: php; title: ; notranslate">
&lt;?php session_start(); ?&gt;
&lt;!DOCTYPE HTML&gt;
&lt;html lang=&quot;en-US&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot;&gt;
	&lt;title&gt;Jquery AJAX Contact Form With PHP&lt;/title&gt;
	&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/reset.css&quot; media=&quot;all&quot;&gt;
	&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/style.css&quot; media=&quot;all&quot;&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.1.7.2.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/AJAX.js&quot;&gt;&lt;/script&gt; 
&lt;/head&gt;
&lt;body&gt;
	&lt;div id=&quot;wrapper&quot;&gt;
		&lt;div id=&quot;container&quot;&gt;
			&lt;h1&gt;Jquery AJAX Contact Form With PHP&lt;span class=&quot;arrow&quot;&gt;&lt;/span&gt;&lt;/h1&gt;
			&lt;div id=&quot;loading&quot;&gt;&lt;/div&gt;
			&lt;form action=&quot;&quot; method=&quot;POST&quot;&gt;
				&lt;div id=&quot;success&quot;&gt;Thanks your contact me !!!&lt;/div&gt;
				&lt;div id=&quot;error&quot;&gt;Error !!! Can not sending Email.&lt;/div&gt;
				&lt;p&gt;
				&lt;input type=&quot;text&quot; id=&quot;name&quot; name=&quot;name&quot; placeholder=&quot;Please insert your Name&quot; required=&quot;&quot;&gt;
				&lt;div class=&quot;warning&quot; id=&quot;nameError&quot;&gt;Vui lòng nhập tên của bạn&lt;/div&gt;
				&lt;/p&gt;

				&lt;p&gt;
				&lt;input type=&quot;email&quot; id=&quot;email&quot; name=&quot;email&quot; placeholder=&quot;Please insert your Email&quot; required=&quot;&quot;&gt;
				&lt;div class=&quot;warning&quot; id=&quot;emailError&quot;&gt;Email không hợp lệ&lt;/div&gt;
				&lt;/p&gt;

				&lt;p&gt;
				&lt;input type=&quot;url&quot; id=&quot;website&quot; name=&quot;website&quot; placeholder=&quot;Please insert your Website&quot; required=&quot;&quot;&gt;
				&lt;div class=&quot;warning&quot; id=&quot;websiteError&quot;&gt;Vui lòng nhập Website của bạn&lt;/div&gt;
				&lt;/p&gt;

				&lt;p&gt;
				&lt;input type=&quot;text&quot; id=&quot;subject&quot; name=&quot;subject&quot; placeholder=&quot;Please insert your Subject&quot; required=&quot;&quot;&gt;
				&lt;div class=&quot;warning&quot; id=&quot;subjectError&quot;&gt;Vui lòng nhập tiêu đề&lt;/div&gt;
				&lt;/p&gt;

				&lt;p&gt;
				&lt;textarea id=&quot;content&quot; name=&quot;content&quot; placeholder=&quot;Please insert your Message&quot; required=&quot;&quot; &gt;&lt;/textarea&gt;
				&lt;div class=&quot;warning&quot; id=&quot;contentError&quot;&gt;Vui lòng nhập nội dung&lt;/div&gt;
				&lt;/p&gt;

				&lt;p&gt;
				&lt;input type=&quot;text&quot; id=&quot;captcha&quot; name=&quot;captcha&quot; placeholder=&quot;Please insert Captcha&quot; required=&quot;&quot; alt=&quot;Security Code&quot;&gt;
				&lt;img src=&quot;captcha.php&quot; id=&quot;img_captcha&quot;&gt;
				&lt;img src=&quot;images/load.png&quot; id=&quot;load_captcha&quot;&gt;
				&lt;div class=&quot;warning&quot; id=&quot;captchaError&quot;&gt;Vui lòng nhập Captcha&lt;/div&gt;
				&lt;/p&gt;

				&lt;p&gt;
				&lt;input type=&quot;submit&quot; id=&quot;SendMail&quot; value=&quot;Send Mail&quot;&gt;
				&lt;/p&gt;

			&lt;/form&gt;
		&lt;/div&gt;&lt;!-- End #container --&gt;
	&lt;/div&gt;&lt;!-- End #wrapper --&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Các thuộc tính HTML5 mình dùng trong bài mình sẽ giới thiệu lại cho các bạn nào mới làm quen với HTML5.</p>
<ul>
<li>Required => Bắt buộc bạn nhập vào hộp thoại input trước khi submit</li>
<li>Placeholder => Tạo một đoạn text mờ trong input</li>
<li>Type: Email => Định dạng input nhập vào phải là một Email hợp lệ</li>
<li>Type:Url => Định dạng input nhập vào phải là một đường dẫn hợp lệ</li>
</ul>
<h3>Step 2 – CSS</h3>
<pre class="brush: css; title: ; notranslate">
html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent;margin:0;padding:0;}body{line-height:1;}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block;}nav ul{list-style:none;}blockquote,q{quotes:none;}blockquote:before,blockquote:after,q:before,q:after{content:none;}a{font-size:100%;vertical-align:baseline;background:transparent;margin:0;padding:0;}ins{background-color:#ff9;color:#000;text-decoration:none;}mark{background-color:#ff9;color:#000;font-style:italic;font-weight:700;}del{text-decoration:line-through;}abbr[title],dfn[title]{border-bottom:1px dotted;cursor:help;}table{border-collapse:collapse;border-spacing:0;}hr{ /* display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0; */}input,select{vertical-align:middle;}

*{margin:0; padding:0;}

@font-face { 
	font-family: 'UTM Avo';
	src:url('../font/UTM-Avo.ttf') format('truetype')
}

#wrapper {
		width: 1000px;
		margin: 0 auto; 
}

#container {
  	width: 450px;
  	background: #ebebeb;
  	border: 1px solid #d4d4d4;
		margin-left: 300px;
    margin-top: 10px;
    position: relative;
}

#container h1 {
		margin-top: 20px;
		background: -moz-linear-gradient(top,#E3654C,#B85140);
    background: -webkit-linear-gradient(top,#E3654C,#B85140);
  	padding: 10px 20px;
  	margin-left: -20px;
  	width: 70%;
  	color: #fff;
		font-family: UTM Avo;
  	position: relative;
  	box-shadow: 1px 1px 1px #292929;
  	-moz-box-shadow: 1px 1px 1px #292929;
  	-webkit-box-shadow: 1px 1px 1px #292929;
    text-shadow: 0px 1px 0px #333;
}

.arrow {
		width: 0; height: 0;
  	line-height: 0;
  	border-left: 20px solid transparent;
  	border-top: 10px solid #ac0202;
  	position: absolute;
  	top: 100%;
  	left: 0px;
}

#container form {
		margin: 20px 20px 0px 20px;  
}

#container div#loading {
    position: absolute;
    top: 130px;
    right: 40px;
}

#container form div#success {
    border: 1px solid green;
    color: green;
    padding: 5px;
    width: 170px;
    margin-bottom: 10px;
    display: none;
}

#container form div#error {
    border: 1px solid red;
    color: #333;
    padding: 5px;
    width: 200px;
    margin-bottom: 10px;
    display: none;
}

#container form p {
		padding-bottom: 10px;  
}

#container form input {
		width: 250px;
		height: 30px;
		font-family: UTM Avo;
  	padding: 0px 10px;
}

#container form div.warning {
    border: 1px solid #777;
    padding: 5px;
    width: 200px;
    color: red;
    display: none;
}

#container form input#captcha {
		width: 205px;
		float: left; 
}

#container form img {
		margin: 0px 10px;
		border: 1px solid #A7A6AA;  
}

#container form img#img_captcha {
		float: left;  
}

#container form img#load_captcha {
		background: #fff;
		padding: 4px;  
  	margin: 0px;
    cursor: pointer;
}

#container form textarea {
		resize: none;
		width: 385px;
		height: 120px; 
  	padding: 10px;
  	font-family: UTM Avo;
  	font-size: 14px;
}

#container form input[type=&quot;submit&quot;] {
  	width: 120px;
  	font-weight: bold;
  	font-family: UTM Avo;
 		border: 1px solid #A7A6AA;
  	background: -moz-linear-gradient(top,#fff,#d4d4d4);
  	background: -webkit-linear-gradient(top,#fff,#d4d4d4);
}
</pre>
<p>Sau khi xong 2 phần HTML &#038; CSS các bạn có thể xem demo bên dưới</p>
<div id="view-demo">
<a href="http://minhman.me/izwebz/contact_form/demo-1" target="_blank" class="view-demo">Demo</a>
</div>
<h3>Step 3 – Create Captcha</h3>
<pre class="brush: php; title: ; notranslate">
&lt;?php 
	session_start();
	$captcha = imagecreate(125, 32);
	$bg = imagecolorallocate($captcha, 255, 255, 255);
	$font_color = imagecolorallocate($captcha, 106, 189, 197);
	$font = &quot;font/UTM-Avo.ttf&quot;;

	$string = md5(microtime() * mktime());
	$text = substr($string,0,7);
	$_SESSION['security_code'] = $text;

	imagettftext($captcha, 20, 0, 5, 25, $font_color, $font, $text);
	header(&quot;Content-type: image/png&quot;); 
	imagepng($captcha);
	imagedestroy($captcha);
?&gt;
</pre>
<p>Nếu các bạn xem chưa hiểu thì các bạn hãy xem lại video của anh Demon Warlock hướng dẫn cách tạo Captcha nhé <a href="http://www.izwebz.com/video-tutorials/php-video-tutorials/cach-tao-captcha/" target="_blank">Cách tạo captcha</a></p>
<h3>Step 4 – Send Mail</h3>
<pre class="brush: php; title: ; notranslate">
&lt;?php 
	session_start();
	if($_SESSION['security_code'] == $_POST['captcha']) {
		$name = $_POST['name'];
		$email = $_POST['email'];
		$website = $_POST['website'];
		$subject = $_POST['subject'];
		$content = $_POST['content'];

		$to = &quot;contact.email.example@gmail.com&quot;;

		$body = &quot;Ngày: &quot;. date('d/m/Y').&quot;\n&quot;;
		$body .= $name . &quot;- Email:&quot; . $email . &quot;\n&quot;;
		$body .= &quot;Website: $website\n&quot;;
		$body .= &quot;Send a Email with content:\n&quot;.nl2br($content);
		$headers = &quot;From: $email \n&quot;;

		mail($to, $subject, $body, $headers);
		echo &quot;true&quot;;

	} else {
		echo &quot;false&quot;;
	}

?&gt;
</pre>
<p>Tớ giải thích một chút trong này nhé, ban đầu mình sẽ kiểm tra xem captcha đã nhập đúng hay chưa, đoạn text trong cái hình captcha chúng ta đã lưu nó lại vào một SESSION có tên là: security_code và input của mình sẽ là: captcha. Nếu hai cái này bằng nhau thì mình sẽ thực hiện công việc ở trong này.</p>
<p>- Lấy giá trị các input được nhập, và cho vào nội dung, trong này mình có sử dụng “\n” nghĩa là xuống một hàng và hàm nl2br dùng để tự động xuống hàng khi trong nội dung họ gõ text xuống hàng.</p>
<p>Sau đó chúng ta thực hiện send mail với nội dung trên và lưu ý điểm quan trọng cuối cùng đó là kết quả trả về để chúng ta sử dụng AJAX.</p>
<p>Sau khi send mail xong sẽ echo &#8220;true&#8221;  và  ngược lại của hàm If sẽ echo &#8220;false&#8221;<br />
Chuỗi &#8220;true&#8221; và &#8220;false&#8221; chính là kết quả trả về.</p>
<p>Sau khi xong phần PHP cho form chúng ta có thể xem kết quả ở dưới</p>
<div id="view-demo">
<a href="http://minhman.me/izwebz/contact_form/demo-2" target="_blank" class="view-demo">Demo</a>
</div>
<h3>Step 5 – Jquery</h3>
<p>Bây giờ chúng ta sẽ áp dụng jQuery vào cho Form</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function() {
            $(&quot;#SendMail&quot;).click(function() {
                    var name = $(&quot;#name&quot;).val();
                    var email = $(&quot;#email&quot;).val();
                    var website = $(&quot;#website&quot;).val();
                    var subject = $(&quot;#subject&quot;).val();
                    var content = $(&quot;#content&quot;).val();
                    var captcha = $(&quot;#captcha&quot;).val();
                    var email_regex = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
                   var data_string = 'name=' + name + '&amp;email=' + email + '&amp;website=' + website + '&amp;subject=' + subject + '&amp;content=' + content + '&amp;captcha=' + captcha;
	});
});
</pre>
<p>Giải thích đoạn code trên có ý nghĩa thế này, khi Form được submit thì chúng ta sẽ lấy giá trị của Form bằng Jquery, chúng ta lấy giá trị của nó thông qua id của input các bạn có thể xem trong phần HTML.<br />
Sau đó ta có 1 biến kiểm tra Email, thì cái này là một chuỗi check định dạng Email, đoạn này các bạn copy vào luôn cũng được, giải thích thì khó hiểu lắm.</p>
<p>Tiếp đến chúng ta sẽ lưu tất cả các giá trị mà mình lấy được vào biến data_string. Lưu ý ở đây là các chuỗi trong cặp dấu &#8216; &#8216; là name của input trong Form nhé, trong Jquery muốn nối một chuỗi thì mình dùng dấu &#8216;+&#8217;<br />
Tiếp theo chúng ta sẽ dùng Jquery để kiểm tra giá trị trong Form xem người dùng nhập đầy đủ hay chưa.</p>
<pre class="brush: jscript; title: ; notranslate">
if(name == &quot;&quot;) {
	$(&quot;#nameError&quot;).slideDown('slow').delay(1000).slideUp('slow');
	$(&quot;#name&quot;).focus();
	return false;
       }
        if(!email_regex.test(email) || email == &quot;&quot;) {
               $(&quot;#emailError&quot;).slideDown('slow').delay(1000).slideUp('slow');
              $(&quot;#email&quot;).focus()
              return false;
        }
       if(website == &quot;&quot;) {
               $(&quot;#websiteError&quot;).slideDown('slow').delay(1000).slideUp('slow');
               $(&quot;#website&quot;).focus()
              return false;
       }

        if(subject == &quot;&quot;) {
               $(&quot;#subjectError&quot;).slideDown('slow').delay(1000).slideUp('slow');
               $(&quot;#subject&quot;).focus();
               return false;
        }
        if(content == &quot;&quot;) {
                $(&quot;#contentError&quot;).slideDown('slow').delay(1000).slideUp('slow');
               $(&quot;#content&quot;).focus()
               return false;
       }
        if(captcha == &quot;&quot;) {
                $(&quot;#captchaError&quot;).slideDown('slow').delay(1000).slideUp('slow');
               $(&quot;#captcha&quot;).focus()
              return false;
       }        
</pre>
<p>Trong đoạn Jquery trên, chúng ta sẽ kiểm tra xem nếu các input rỗng thì sẽ dùng Jquery để hiển thị lỗi của nó ra. Ở trong phần HTML mình đã đặt một div ngay ở dưới mỗi input có id tương ứng với mỗi input, trong CSS mình đã cho nó display: none. Mình sử dụng hàm slideDown để show lỗi của input ra, tham số ‘slow’ => chậm, các bạn có thể đổi thành &#8216;fast&#8217; => nhanh hay các con số 400, 500 hay 800 thì tùy ý các bạn.</p>
<p>Delay(1000) tức là nó sẽ dừng lại trong 1s, nó tính thế này: 1000 => 1s, 60000 => 1p .. thì chúng ta sẽ cho nó slideUp ẩn nó đi và đồng thời trỏ con chuột vào ô input chưa nhập và return false nó luôn.<br />
Tiếp theo chúng ta sẽ viết thêm 2 Function nữa đó là:</p>
<p>Clear Form => Xóa các giá trị vừa nhập khi gửi mail thành công</p>
<pre class="brush: jscript; title: ; notranslate">
function clear_form() {
            $(&quot;#name&quot;).val('');
            $(&quot;#email&quot;).val('');
            $(&quot;#website&quot;).val('');
           $(&quot;#subject&quot;).val('');
           $(&quot;#content&quot;).val('');
           $(&quot;#captcha&quot;).val('');
}
</pre>
<p>Change Captcha => Thay đổi hình ảnh Captcha</p>
<pre class="brush: jscript; title: ; notranslate">
function change_captcha() {
	document.getElementById('img_captcha').src=&quot;captcha.php?rnd=&quot; + Math.random();
}
</pre>
<p>Giải thích một chút ở đây có nghĩa là cái hình Captcha của chúng ta sẽ có id là img_captcha mình sẽ hướng tới nó thông qua id và trỏ nó tới đường dẫn file captcha với tham số rnd là ngẫu nhiên nối với hàm Math.random để tạo một chuỗi mới.</p>
<p>Trong Form chúng ta có một cái hình để load Captcha mới với id là #load_captcha thì chúng ta sẽ xử lý nó khi được click thì chúng ta sẽ gọi hàm change_captcha(); mình vừa viết ở trên.</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#load_captcha&quot;).click(function() {
	change_captcha();
});
</pre>
<h3>Step 6 – AJAX</h3>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#loading&quot;).html(&quot;&lt;img src='images/loading.gif'/&gt;&quot;).fadeIn('fast');
$.ajax({
	type: &quot;POST&quot;,
	url: &quot;sendmail.php&quot;,
	data: data_string,
	success: function(data_form) {
	         if(data_form == &quot;true&quot;) {
	        $('#loading').fadeOut('fast');
                       $(&quot;#success&quot;).slideDown('slow').delay(3000).slideUp('slow');
                       clear_form();
                       change_captcha();
                       } else {
	        $('#loading').fadeOut('fast');
                      $(&quot;#error&quot;).slideDown('slow').delay(3000).slideUp('slow');
                     }
               }
 });
return false;
</pre>
<p>Khi Form được nhập đầy đủ và được submit thì mình sẽ cho hiển thị cái hình dạng load dữ liệu ra. Và sau đó gọi AJAX để thực hiện công việc chính của Form như sau:</p>
<ul>
<li>Type:  “POST” => Phương thức mình sử dụng ở đây là POST</li>
<li>Url:  “sendmail.php” => Đường dẫn tới file sendmail.php </li>
<li>Data:  data_string  => Lúc ở đoạn Jquery ở trên kia chúng ta đã lấy giá trị của Form và lưu vào biến này, bây giờ mình sẽ sử dụng biến này để gửi giá trị tới file sendmail.php để xử lý.</li>
<li>Success: function(data_form) => Khi Form được gửi thành công thì chúng ta sẽ thực hiện hàm data_form.</li>
</ul>
<p>Ở đây chính là bước quan trọng, các bạn còn nhớ trong file sendmail.php chúng ta đã trả về kết quả là gì không ? Đó chính là 2 chuỗi “true” và “false”</p>
<p>Bây giờ chúng ta sẽ thực hiện so sánh nó, nếu nó là “true” tức là bạn đã gữi được mail thì chúng ta sẽ ẩn cái trạng thái Loading đi và đồng thời show ra thông báo gửi mail thành công và gọi hàm clear_form(); để xóa dữ liệu trên Form + hàm change_captcha(); để thay đổi captcha cho Form để có thể bắt đầu gửi một Email mới. Và ngược lại thì kết quả trả về của chúng ta chính là “false” thì mình sẽ ẩn trạng thái Loading và show lỗi ra thôi và return false nó luôn.</p>
<p>Các bạn có thể xem Code đầy đủ của file js đầy đủ ở đây.</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function() {
	$(&quot;#SendMail&quot;).click(function() {
		var name = $(&quot;#name&quot;).val();
		var email = $(&quot;#email&quot;).val();
		var website = $(&quot;#website&quot;).val();
		var subject = $(&quot;#subject&quot;).val();
		var content = $(&quot;#content&quot;).val();
		var captcha = $(&quot;#captcha&quot;).val();
		var email_regex = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
		var data_string = 'name=' + name + '&amp;email=' + email + '&amp;website=' + website + '&amp;subject=' + subject + '&amp;content=' + content + '&amp;captcha=' + captcha; 
		
		if(name == &quot;&quot;) {
           $(&quot;#nameError&quot;).slideDown('slow').delay(1000).slideUp('slow');
           $(&quot;#name&quot;).focus();
           return false;
        }

        if(!email_regex.test(email) || email == &quot;&quot;) {
           $(&quot;#emailError&quot;).slideDown('slow').delay(1000).slideUp('slow');
           $(&quot;#email&quot;).focus()
           return false;
        }

        if(website == &quot;&quot;) {
           $(&quot;#websiteError&quot;).slideDown('slow').delay(1000).slideUp('slow');
           $(&quot;#website&quot;).focus()
           return false;
        }

        if(subject == &quot;&quot;) {
           $(&quot;#subjectError&quot;).slideDown('slow').delay(1000).slideUp('slow');
           $(&quot;#subject&quot;).focus();
           return false;
        }

        if(content == &quot;&quot;) {
           $(&quot;#contentError&quot;).slideDown('slow').delay(1000).slideUp('slow');
           $(&quot;#content&quot;).focus()
           return false;
        }

        if(captcha == &quot;&quot;) {
           $(&quot;#captchaError&quot;).slideDown('slow').delay(1000).slideUp('slow');
           $(&quot;#captcha&quot;).focus()
           return false;
        }

        $(&quot;#loading&quot;).html(&quot;&lt;img src='images/loading.gif'/&gt;&quot;).fadeIn('fast');
            $.ajax({
                type: &quot;POST&quot;,
                url: &quot;sendmail.php&quot;,
                data: data_string,
                success: function(data_form) {
                    if(data_form == &quot;true&quot;) {
                        $('#loading').fadeOut('fast');
                        $(&quot;#success&quot;).slideDown('slow').delay(3000).slideUp('slow');
                            clear_form();
                            change_captcha();
                    } else {
                        $('#loading').fadeOut('fast');
                        $(&quot;#error&quot;).slideDown('slow').delay(3000).slideUp('slow');
                        }
                    }
                });
        return false;

	});

	function clear_form() {
        $(&quot;#name&quot;).val('');
        $(&quot;#email&quot;).val('');
        $(&quot;#website&quot;).val('');
        $(&quot;#subject&quot;).val('');
        $(&quot;#content&quot;).val('');
        $(&quot;#captcha&quot;).val('');
    }

    $(&quot;#load_captcha&quot;).click(function() {
        change_captcha();
    });

    function change_captcha() {
        document.getElementById('img_captcha').src=&quot;captcha.php?rnd=&quot; + Math.random();
    }
});
</pre>
<p>Vậy là chúng ta đã hoàn thành một Contact Form sử dụng Jquery AJAX + PHP rồi ^^. Tớ mong các bạn có thể áp dụng được nó vào project của chính mình.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/css/contact-form-voi-jquery-ajax-php/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>[Ajax phần 3] jQuery Ajax cơ bản</title>
		<link>http://www.izwebz.com/video-tutorials/jquery-video-tutorials/ajax-phan-3-jquery-ajax-co-ban/</link>
		<comments>http://www.izwebz.com/video-tutorials/jquery-video-tutorials/ajax-phan-3-jquery-ajax-co-ban/#comments</comments>
		<pubDate>Wed, 01 Aug 2012 13:43:02 +0000</pubDate>
		<dc:creator>KytoSai</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=3886</guid>
		<description><![CDATA[Hôm nay mình xin gửi đến các bạn bài thứ 3 trong seri về ajax do mình thực hiện. Ban đầu mình định thực hiện thêm một vài bài như trang login,play nhạc bằng ajax thuần javascript nhưng có lẽ các bạn hứng thú nhiều hơn với jquery nên mình quyết định sẽ để sang phần jquery thực hiện các bài đó. Ở bài thứ 3 này có nội dung như sau - Khác nhau cơ bản giữa ajax thuần javascript và ajax với jquery ( chủ yếu là cú pháp của jquery ngắn gọn hơn ) - Giới thiệu [...]]]></description>
				<content:encoded><![CDATA[<p>Hôm nay mình xin gửi đến các bạn bài thứ 3 trong seri về ajax do mình thực hiện. Ban đầu mình định thực hiện thêm một vài bài như trang login,play nhạc bằng ajax thuần javascript nhưng có lẽ các bạn hứng thú nhiều hơn với jquery nên mình quyết định sẽ để sang phần jquery thực hiện các bài đó.<br />
<span id="more-3886"></span><br />
Ở bài thứ 3 này có nội dung như sau</p>
<p>- Khác nhau cơ bản giữa ajax thuần javascript và ajax với jquery ( chủ yếu là cú pháp của jquery ngắn gọn hơn )</p>
<p>- Giới thiệu bạn 3 cách viết ajax đơn giản bằng jquery ($.ajax,$.get,$.post)</p>
<div class="tutorial-image">
<iframe width="640" height="360" src="http://www.youtube.com/embed/zW4WHU1sGFo" frameborder="0" allowfullscreen></iframe>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/video-tutorials/jquery-video-tutorials/ajax-phan-3-jquery-ajax-co-ban/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>[Ajax phần 2] Ajax thuần javascript &#8211; Sử dụng phương thức POST</title>
		<link>http://www.izwebz.com/video-tutorials/jquery-video-tutorials/ajax-thuan-javascript-phan-2-su-dung-phuong-thuc-post/</link>
		<comments>http://www.izwebz.com/video-tutorials/jquery-video-tutorials/ajax-thuan-javascript-phan-2-su-dung-phuong-thuc-post/#comments</comments>
		<pubDate>Thu, 12 Jul 2012 03:34:03 +0000</pubDate>
		<dc:creator>KytoSai</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=3779</guid>
		<description><![CDATA[Trong phần trước, chúng ta đã làm quen với tác giả mới của izwebz là Kyto Sai. Trong phần này, bạn ấy sẽ tiếp tục giới thiệu cho chúng ta về công nghệ ajax với Ajax thuần javascript &#8211; Sử dụng phương thức POST. Sơ qua nội dung bài này: 1/ Hiển thị loading trước khi xuất kết quả 2/ Sử dụng form để xuất kết quả 3/ Khác nhau giữa POST và GET 4/ Giới thiệu kỹ hơn những điểm ở clip đầu tiên chưa giới thiệu]]></description>
				<content:encoded><![CDATA[<p>Trong <a href="http://www.izwebz.com/video-tutorials/ajax-thuan-javascript-by-kytosai/" target="_blank">phần trước</a>, chúng ta đã làm quen với tác giả mới của izwebz là Kyto Sai. Trong phần này, bạn ấy sẽ tiếp tục giới thiệu cho chúng ta về công nghệ ajax với <strong>Ajax thuần javascript &#8211; Sử dụng phương thức POST</strong>.<br />
<span id="more-3779"></span><br />
Sơ qua nội dung bài này:<br />
1/ Hiển thị loading trước khi xuất kết quả<br />
2/ Sử dụng form để xuất kết quả<br />
3/ Khác nhau giữa POST và GET<br />
4/ Giới thiệu kỹ hơn những điểm ở clip đầu tiên chưa giới thiệu</p>
<div class="tutorial-image"><iframe width="640" height="360" src="http://www.youtube.com/embed/YX89DfjVfy0" frameborder="0" allowfullscreen></iframe></div>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/video-tutorials/jquery-video-tutorials/ajax-thuan-javascript-phan-2-su-dung-phuong-thuc-post/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>[Ajax phần 1] Ajax thuần javascript</title>
		<link>http://www.izwebz.com/video-tutorials/jquery-video-tutorials/ajax-thuan-javascript-by-kytosai/</link>
		<comments>http://www.izwebz.com/video-tutorials/jquery-video-tutorials/ajax-thuan-javascript-by-kytosai/#comments</comments>
		<pubDate>Sat, 07 Jul 2012 13:54:37 +0000</pubDate>
		<dc:creator>KytoSai</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=3763</guid>
		<description><![CDATA[Ajax thuật ngữ được viết tắt bởi Asynchronous JavaScript and XML và đây thực thực không phải là ngôn ngữ lập trình mới. Nhưng cách thức sử dụng của Ajax đem lại hiệu quả làm việc cao hơn nhờ việc có thể cập nhật một phần của trang web mà không phải load lại toàn bộ trang web. Bài viết này được thực hiện bởi Kytosai. Đây là video đầu tiên mình làm nên phải nói là vẫn còn rất run, đọc lóng ngóng, nên rất mong các bạn thông cảm cho mình. ( và trình độ đọc tiếng anh [...]]]></description>
				<content:encoded><![CDATA[<p>Ajax thuật ngữ được viết tắt bởi Asynchronous JavaScript and XML và đây thực thực không phải là ngôn ngữ lập trình mới. Nhưng cách thức sử dụng của Ajax đem lại hiệu quả làm việc cao hơn nhờ việc có thể cập nhật một phần của trang web mà không phải load lại toàn bộ trang web.<br />
<span id="more-3763"></span><br />
<strong>Bài viết này được thực hiện bởi <em>Kytosai</em>.</strong><br />
Đây là video đầu tiên mình làm nên phải nói là vẫn còn rất run, đọc lóng ngóng, nên rất mong<br />
các bạn thông cảm cho mình. ( và trình độ đọc tiếng anh mình rất kém, mình chỉ xem được tài liệu là chính )</p>
<p>Để tiện cho việc tiếp thu bài hướng dẫn các bạn nên biết <a href="http://www.izwebz.com/category/video-tutorials/php-video-tutorials/" target="_blank">PHP căn bản</a></p>
<p>Mình viết tuts này chủ yếu dựa vào tài liệu trên <a href="http://www.w3schools.com/ajax/default.asp" target="_blank">w3schools</a>. Các bạn có thể vào đó để tham khảo thêm.</p>
<p>Mọi thắc mắc về tuts các bạn gửi vào comment bên dưới mình sẽ cố gắng dành thời gian trả lời cho các bạn. Rất mong các bạn ủng hộ mình sẽ tiếp tục thực hiện tiếp các phần sau của bài này nữa !</p>
<p>Các phần tiếp theo: <a href="http://www.izwebz.com/video-tutorials/ajax-thuan-javascript-phan-2-su-dung-phuong-thuc-post/" target="_blank">Phần 2</a></p>
<div class="tutorial-image"><iframe width="640" height="360" src="http://www.youtube.com/embed/Ohop4yjGP80" frameborder="0" allowfullscreen></iframe></div>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/video-tutorials/jquery-video-tutorials/ajax-thuan-javascript-by-kytosai/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
		<item>
		<title>Tạo file swf đơn giản với Indesign</title>
		<link>http://www.izwebz.com/video-tutorials/tao-file-swf-don-gian-voi-indesign/</link>
		<comments>http://www.izwebz.com/video-tutorials/tao-file-swf-don-gian-voi-indesign/#comments</comments>
		<pubDate>Fri, 15 Jun 2012 09:11:49 +0000</pubDate>
		<dc:creator>NamCam™</dc:creator>
				<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=3748</guid>
		<description><![CDATA[Illus mãi rồi, hôm nay đổi gió nào ! Video tutorial này sẽ giúp các bạn có thể tạo những hiệu ứng chuyển động đơn giản và xuất ra file Swf (flash player) nhúng trực tiếp lên web, blog hoặc cũng có thể convert thành HTML5. Sử dụng phần mềm Adobe Indesign CS6]]></description>
				<content:encoded><![CDATA[<p>Illus mãi rồi, hôm nay đổi gió nào !</p>
<p>Video tutorial này sẽ giúp các bạn có thể tạo những hiệu ứng chuyển động đơn giản và xuất ra file Swf (flash player) nhúng trực tiếp lên web, blog hoặc cũng có thể convert thành HTML5. Sử dụng phần mềm Adobe Indesign CS6</p>
<p><span id="more-3748"></span></p>
<div class="tutorial-image"><iframe width="640" height="360" src="http://www.youtube.com/embed/SmgaB1sWoiU" frameborder="0" allowfullscreen></iframe></div>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/video-tutorials/tao-file-swf-don-gian-voi-indesign/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
