Friday, August 14, 2009

10 dự án lập trình viên PHP nên trải qua

(danghienIT) - Đối với một lập trình viên PHP bạn luôn hiểu rằng PHP là một ngôn ngữ phổ biến và có một lượng khổng lồ mã nguồn để tham khảo, đa số các thành phần của một Website đã được phát triển dưới dạng nguồn mở việc sử dụng nó yêu cầu tuân thủ theo giấy phép của tác giả đôi khi không bao gồm sự ràng buộc nào. Việc mở mã nguồn mang lại rất nhiều lợi ích so với việc bạn giữ mã nguồn của mình trừ trường hợp thương mại hóa sản phẩm, đơn cử như:
  • Mã nguồn mở được đóng góp bởi nhiều người, kết quả của sản phẩm được làm bởi nhiều người sẽ tốt hơn rất nhiều so với việc bạn phát triển một mình.
  • Dễ dàng cập nhật tính năng mới dựa trên sự đóng góp mã nguồn của các nhà phát triển khác nhau.
  • Giảm thời gian phát triển, giảm giá thành sản phẩm…
  • và nhiều lợi ích khác nữa…

Những dự án dưới đây là những thành phần phổ biến của một Website, tính thông dụng của nó như là một bắt buộc phải biết đối với Web Developer.

  • Gửi eMail: Đây là tính năng phổ biến nhất của mọi Website, hàm mail(); là đủ cho hầu hết các yêu cầu khác nhau của người dùng, ngoài ra PHP còn hỗ trợ một số hàm khác nếu bạn muốn đính kèm tập tin hay gửi mail của SMTP server để có thể dễ dàng tạo một chương trình gửi eMail.
  • Hỗ trợ người dùng: cho phép cá nhân hóa nội dung Website, có thể đa sở hữu, phân cấp quyền quản lý thông tin của cá nhân cũng như các nội dung khác. Tính năng chính của thành phần này hỗ trợ việc đăng nhập, truy vấn sửa đổi cơ sở dữ liệu, phiên làm việc…
  • Tạo RSS, tin rút gọn Feeds: Thời điểm hiện tại Website của bạn sẽ được đánh giá là tụt hậu nếu không hỗ trợ Feed trong việc cung cấp thông tin, lấy tin bằng Feed cho phép người dùng đơn giản hóa việc theo dõi nội dung của một Website nào đó. Tớ sử dụng Magpie RSS trong phần lớn các dự án của mình.
  • Xác định vị trí: xác định vị trí địa lý của người dùng đơn giản nhằm thống kê lượng người truy cập nội dung từ nước nào để có thể phục vụ tốt hơn, tính năng này không thật sự quan trọng nhưng đôi khi lại khá hiệu quả nếu bạn muốn biết người của nước nào hay vào Website mình nhất
  • Lấy thông tin từ xa: truy vấn thông tin từ nhiều nguồn khác nhau, thích hợp với một cổng thông tin tổng hợp, các nội dung này được lưu vào cơ sở dữ liệu.
  • Lưu tạm dữ liệu {Cache data}: giảm truy vấn tới cơ sở dữ liệu, tránh quá tải hệ thống do phần lớn các dự án cá nhân không được tối ưu về mã nguồn cũng như hiệu xuất làm việc, lưu tạm dữ liệu là một giải pháp đơn giản đề tối ưu hệ thống Website có thể hoạt động ổn định
  • Hệ thống giao diện: Dễ dàng thay đổi giao diện Website, đơn giản hóa quá trình thiết kế, giảm công sức tạo lập Website mới. Một hệ thống giao diện tốt không có nghĩa là phải đầy đủ tính năng mà chỉ cần đáp ứng được đúng nhu cầu sử dụng, tốt nhất là bạn nên tự viết sẽ hoàn hảo hơn sử dụng của người khác, theo tớ thì Hệ thống giao diện gần như là nhân {core} của một hệ thống quản lý nội dung. Tiêu biểu như Smarty của PHP
  • BBcode: Tính năng thường thấy của các diễn đàn, nó đơn giản hóa việc trình bày nội dung giúp người sử dụng thông thường có thể tạo một văn bản chuyên nghiệp mà không cần biết về mã HTML, khách hàng của bạn sẽ dễ dàng sử dụng nó như một ứng dụng văn phòng mà thôi. Hãy thử StringParser_BBcode vì nó rất dễ tùy biến theo ý muốn của bạn.
  • Hệ thống truy vấn cơ sở dữ liệu: Cơ sở dữ liệu là phương án tối ưu nhất để lưu trữ dữ liệu của bạn, dữ liệu của bạn có thể lưu trong một hệ CSDL lớn như Mysql hay đơn giản như là một Text file thì hệ thống truy vấn cơ sở dữ liệu sẽ hỗ trợ việc truy vấn dữ liệu, đơn giản và giản lược mã nguồn đi rất nhiều, giảm bớt công sức viết mã nguồn. Cũng như hệ thống giao diện nó là một trong những thành phần quan trọng nhất của tớ khi viết một dự án Web. Hãy thử ezSQL để giảm bớt khai báo truy vấn cho từng query của bạn.
  • Môi trường nhập liệu văn bản: Về cơ bản nó là một dạng xử lý nội dung form được hỗ trợ bở Javascript và kết hợp BBCode nhằm phục vụ người dùng một cách tốt nhất có thể, mục đích của nó là cố gắng mô phỏng môi trường làm việc như các ứng dụng văn phòng. FCKEditor là một ví dụ đơn giản nhất


  • Mỗi người một quan điểm khác nhau nhưng ít nhiều ai cũng từng phải làm việc qua một trong những dự án trên, 10 thành phần đó không phải là toàn bộ mà chỉ là thông dụng thôi.



1. PHP coding standard

Dưới đây là tài liệu hướng dẫn cách viết code theo đúng chuẩn.Nếu bạn muốn trở thành coder chuyên nghiệp xin hãy đọc tài liệu này. php_coding_standard



2. Hàm chuyển đổi tiêu đề tiếng việt có dấu sang không dấu


Để hiển thị tiêu đề vừa là tiếng việt có dấu,vừa không có dấu (cái này có tác dụng lớn đến SEO - Search Enginze Optimized ) thì hàm sau sẽ giúp bạn chuyển tiếng việt có dấu thành không dấu.

function cv2urltitle($text) {

$text = str_replace(

array(’ ‘,’%',”/”,”\\”,’”‘,’?',’<’,'>’,”#”,”^”,”`”,”‘”,”=”,”!”,”:” ,”,,”,”..”,”*”,”&”,”__”,”▄”),

array(’_',” ,” ,” ,” ,” ,” ,” ,” ,” ,” ,” ,’-',” ,’-',” ,” ,” , “_” ,”" ,”"),

$text);

$chars = array(”a”,”A”,”e”,”E”,”o”,”O”,”u”,”U”,”i”,”I”,”d”, “D”,”y”,”Y”);

uni[0] = array(”á”,”à”,”ạ”,”ả”,”ã”,”â”,”ấ”,”ầ”, “ậ”,”ẩ”,”ẫ”,”ă”,”ắ”,”ằ”,”ặ”,”ẳ”,”� �”);

$uni[1] = array(”Á”,”À”,”Ạ”,”Ả”,”Ô,””,”Ấ”,”Ầ”, “Ậ”,”Ẩ”,”Ẫ”,”Ă”,”Ắ”,”Ằ”,”Ặ”,”Ẳ”,”� �”);

$uni[2] = array(”é”,”è”,”ẹ”,”ẻ”,”ẽ”,”ê”,”ế”,”ề” ,”ệ”,”ể”,”ễ”);

$uni[3] = array(”É”,”È”,”Ẹ”,”Ẻ”,”Ẽ”,”Ê”,”Ế”,”Ề” ,”Ệ”,”Ể”,”Ễ”);

$uni[4] = array(”ó”,”ò”,”ọ”,”ỏ”,”õ”,”ô”,”ố”,”ồ”, “ộ”,”ổ”,”ỗ”,”ơ”,”ớ”,”ờ”,”ợ”,”ở”,”� �”);

$uni[5] = array(”Ó”,”Ò”,”Ọ”,”Ỏ”,”Õ”,”Ô”,”Ố”,”Ồ”, “Ộ”,”Ổ”,”Ỗ”,”Ơ”,”Ớ”,”Ờ”,”Ợ”,”Ở”,”� �”);

$uni[6] = array(”ú”,”ù”,”ụ”,”ủ”,”ũ”,”ư”,”ứ”,”ừ”, “ự”,”ử”,”ữ”);

$uni[7] = array(”Ú”,”Ù”,”Ụ”,”Ủ”,”Ũ”,”Ư”,”Ứ”,”Ừ”, “Ự”,”Ử”,”Ữ”);

$uni[8] = array(”í”,”ì”,”ị”,”ỉ”,”ĩ”);

$uni[9] = array(”Í”,”Ì”,”Ị”,”Ỉ”,”Ĩ”);

$uni[10] = array(”đ”);

$uni[11] = array(”Đ”);

$uni[12] = array(”ý”,”ỳ”,”ỵ”,”ỷ”,”ỹ”);

$uni[13] = array(”Ý”,”Ỳ”,”Ỵ”,”Ỷ”,”Ỹ”);

for($i=0; $i<=13; $i++) {

$text = str_replace($uni[$i],$chars[$i],$text);
}

return $text;

}

Trên đây là 1 cách khá ngắn gọn và hay.Dưới đây cũng có 1 cách khác hay ko kém mà mình tổng hợp được trên internet nay post các bạn tham khảo.



Cách 2:

#function convert to viet nam

function CovertVn($str)

{

$str = preg_replace(”/(àáạảãâầấậẩẫăằ� �ặẳẵ)/”, ‘a’, $str);

$str = preg_replace(”/(èéẹẻẽêềếệểễ)/”, ‘e’, $str);

$str = preg_replace(”/(ìíịỉĩ)/”, ‘i’, $str);

$str = preg_replace(”/(òóọỏõôồốộổỗơờ� �ợởỡ)/”, ‘o’, $str);

$str = preg_replace(”/(ùúụủũưừứựửữ)/”, ‘u’, $str);

$str = preg_replace(”/(ỳýỵỷỹ)/”, ‘y’, $str);

$str = preg_replace(”/(đ)/”, ‘d’, $str);

$str = preg_replace(”/(ÀÁẠẢÃÂẦẤẬẨẪĂẰ� �ẶẲẴ)/”, ‘A’, $str);

$str = preg_replace(”/(ÈÉẸẺẼÊỀẾỆỂỄ)/”, ‘E’, $str);

$str = preg_replace(”/(ÌÍỊỈĨ)/”, ‘I’, $str);

$str = preg_replace(”/(ÒÓỌỎÕÔỒỐỘỔỖƠỜ� �ỢỞỠ)/”, ‘O’, $str);

$str = preg_replace(”/(ÙÚỤỦŨƯỪỨỰỬỮ)/”, ‘U’, $str);

$str = preg_replace(”/(ỲÝỴỶỸ)/”, ‘Y’, $str);

$str = preg_replace(”/(Đ)/”, ‘D’, $str);

$str = preg_replace(”/( )/”, ‘_’, $str);

return $str;

}

3. Lấy tin dự báo thời tiết & tỷ giá ngoại tệ tự động


Để lấy tin dự báo thời tiết từ một số website ( ví dụ từ VNexpress.net chẳng hạn) các bạn làm như sau:


Vì hôm nay muộn quá mình Upload lên đây để các bạn download về tìm hiểu nhé.Các file này mình đã test thử và chạy tốt. Thời thiêt.rar Tỷgiá.rar

Các bạn bấm vào 2 đường link trên để download về chạy thử nhé.

4. Chuyển chuỗi string sang mảng (Convert string into array).


Nhiều khi bạn có 1 chuỗi string và muốn chuyển từng ký tự string đó vào 1 mảng.


Ví dụ:bạn có chuỗi: $str=123789456 và bây giờ bạn muốn chuyển các số trong chuỗi trên vào mảng với mục đích để sắp xếp thành: 123456789 chẳng hạn.Vậy thì Hàm dưới đây sẽ giúp bạn làm được điều đó trong giây lát.?>


<?php

function strsplit($thetext,$num)

{

if (!$num) $num=1;

$arr=array();

$x=floor(strlen($thetext)/$num);

while ($i<=$x)

{

$y=substr($thetext,$j,$num);

if ($y) {

array_push($arr,$y);

}

$i++;

$j=$j+$num;

}

return $arr;

}

?>

ví dụ:

<?php

$str1="25431";

$str2="thegioiwebsite.net";

$arr1=strsplit($str1,1);

$arr2=strsplit($str2,5);

?>

Kết quả sẽ có dạng:

$arr1[0]=>2

$arr1[1]=>5

$arr1[2]=>4

$arr1[3]=>3

$arr1[4]=>1

——————

$arr2[0]=>thegi

$arr2[1]=>oiweb

$arr2[2]=>site.

$arr2[3]=>net

Đối với PHP5 trở đi bạn có thể sử dụng hàm có sẵn: str_split trong PHP để cắt chuỗi string rồi cho nó vào mảng

5. Upload ảnh lên Server từ một địa chỉ URL


Ở bài Hàm Upload ảnh lên Server Đức Mạnh tôi đưa ra cách để upload ảnh từ máy tính của bạn lên Server.Nay tui lại đưa ra 1 vấn đề thế này : Bạn thấy các website khác có những ảnh bạn cần.Thông thường bạn phải save về máy tính của bạn rồi dùng hàm upload ở bài trước để upload lên server.Nói chung công việc cũng khá vất vả,nếu kết hợp cả cách đó và cách tôi sẽ đưa ra dưới đây sẽ làm bạn nhàn hạ hơn rất nhiều.

#function upload_url can upload file from URL to your host.This function written by Nguyen Duc Manh - ducmanh@thegioiwebsite.net
function upload_url($url,$save_to)
{
/*$save_to là đường dẫn đến file cần save lại.Ví dụ: $save_to=”images/news/”

*/

$type_upload=explode(”,”,jpg,bmp,gif,png);//return an array

$ext=getExt(basename($url));// return extension of filename

$name=basename($url);//lấy tên file từ URL

if (!in_array($ext,$type_upload))

{

msg(”Khong upload duoc anh vi : Anh khong dung dinh dang “);

}

else{

$fn=$save_to.$name;//vi du:images/news/

$fp=fopen($fn,”w”);

$content=file_get_contents($url);//lấy nội dung của file

fwrite($fp,$content,strlen($content));

fclose($fp);

}
}

Giải thích:

Một số hàm có sử dụng từ bài trước : hàm msg($str), hàm getExt($filename),

Cách sử dụng:

<?php

//ví dụ url=http://www.thegioiwebsite.net/layout_images/banner/kien-thuc-web.gif

$url=”http://www.thegioiwebsite.net/layout_images/banner/kien-thuc-web.gif”;

$save_to=”images/upload/”;

upload_url($url,$save_to);//upload len SERVER

?>

Kết quả bạn vào thư mục images/upload bạn sẽ thấy file ảnh : kien-thuc-web.gif.


6. Hàm upload ảnh lên Server


Ở bài trước Tạo Form upload lên Server đã chỉ ra cách upload file lên server.Tuy nhiên đây là một cách khác đơn giản mà tớ đã viết thành hàm để sử dụng nhiều lần.Nó vừa đơn giản về cách viết và dễ sử dụng.


Bắt đầu:

Trước hết ta viết hàm để lấy extension ( định dạng file cho phép upload lên SERVER)

function getExt($file)
{
return substr($file,strrpos($file,".")+1);
}


#Hàm này trả về extentsion của file.Ví dụ có file xinhgai.jpg khi gọi $ext=getExt("xinhgai.jpg") thì kết quả $ext=jpg

function msg($str) {


//Ham nay thong bao hop thoai



echo"<script>alert($str);</script>";

}



Sau khi viết xong hàm này ta viết phần chính để xử lý file upload

# Ham upload image

function upload($filename,$path)

{

$type_upload=explode(",","jpg,gif,BMP,PNG,jpeg");//return an array


$IMAGE_SIZE=5120; // 5KB

$ext=getExt(basename($path));// return extension of filename

$size=$_FILES[$filename]["size"];

if(!in_array($ext,$type_upload) (floatval($size/1024)>floatval($IMAGE_SIZE))){

msg("Khong upload duoc anh vi : Anh khong dung dinh dang hoac kich thuoc > ".$IMAGE_SIZE." KB");

}

else{

move_uploaded_file($_FILES[$filename]["tmp_name"],$path);

}

}

Giải thích:



$type_upload là mảng các định dạng ảnh được phép upload.



$IMAGE_SIZE: Là kích thước ảnh tối đa được upload ( ở ví dụ này là 5 KB)



$filename: tên của form upload



$path:Tên file ảnh đầy đủ ( Gồm cả đường dẫn .Ví dụ : mages/upload/tenanh.jpg )



Cách Sử dụng:

Ví dụ có Form HTML như sau



<form method="post" enctype="multipart/form-data">

<input type="file" name="image" size="50" />

<input type="submit" value="Upload Now" />

</form>

CODE PHP:



<?php



#Upload image:
$image=$_FILES['image']['name'];

$path="images/upload/".$image; // Lấy đường dẫn đến ảnh

upload(’image’,$path); //Upload lên Server



?>



Khi bạn click nút Upload Now thì ảnh sẽ được upload vào thư mục chỉ định : images/upload.

7. Hàm lấy kích thước thật của ảnh

Khi bạn view ảnh bằng popup và bạn muốn làm sao để kích thước popup lớn đúng bằng kích thước của ảnh.Như vậy trước hết bạn phải biết được kích thước thật của ảnh đã.Dưới đây tôi xin trình bày với các bạn cách để lấy kích thước thật của ảnh.


#Lay kich thuoc that cua anh
function GetPictureSize($filename )
{
$size_info=getimagesize($filename);
return $size_info;

}

Hàm trên trả về 1 mảng gồm 2 phần tử: $size_info[0] là chiều rộng của ảnh , $size_info[1] là chiều cao của ảnh. Nếu không thích dùng dùng mảng mà muốn trả về ngay giá trị cụ thể của thì bạn viết tách thành 2 hàm sau:

function GetPictureWidth($filename)


{

$temp=getimagesize($filename);

return $temp[0];

}



function GetPictureHeight($filename)

{

$temp=getimagesize($filename);

return $temp[1];

}

8. Tạo Form để upload file lên Server.

TẠO FORM ĐỂ UPLOAD FILE

Form để upload file cần thoã mãn các điều kiện sau:

* method là POST

* enctype là multipart/form-data


Mã HTML của form sẽ từa tựa như sau:

<form method="POST" enctype="multipart/form-data" action="process_upload.php">

<input type="hidden" name="MAX_FILE_SIZE" value="30000">

<input type="file" name="file_upload" size="20">

<input type="submit" value="Upload">

</form>

Đoạn code trên sẽ tạo 1 form với 1 nút Browse… để ban chọn file cần upload, và 1 nút Upload để bạn submit form. Form sẽ được submit tới file process_upload.php nằm cùng thư mục với file chứa form.


Một số browser support MAX_FILE_SIZE sẽ kiểm tra dung lượng file trước khi form được submit, tuy nhiên không phải browser nào cũng vậy. Cho nên bạn đừng nên tin tưởng tuyệt đối vào server! Ở ví dụ trên, nếu browser hỗ trợ, nhưng file có dung lượng lớn hơn 30000 byte sẽ được browser thông báo lỗi khi submit form.

XỬ LÝ DỮ LIỆU ĐƯỢC SUBMIT LÊN SERVER

Bây giờ ta hãy xem xét tới phần xử lý dữ liệu được submit lên server trong file process_upload.php. PHP lưu thông tin về file được upload lên server trong biến global $_FILES. Với form ở ví dụ trên, PHP sẽ truyền cho script process_upload.php các thông tin sau:

* $_FILES['file_upload']['name']: tên file gốc trên máy client. Tuỳ vào browser, tên file có thể được truyền lên server ở dạng C:\folder\filename.ext hoặc chỉ là filename.ext. Chương trình phải tự kiểm tra và trích ra tên file nếu cần thiết.

* $_FILES['file_upload']['type']: kiểu của file, được lưu ở dạng MINE (Ví dụ: image/gif, audio/wav).

* $_FILES['file_upload']['size']: dung lượng của file tính theo byte.

* $_FILES['file_upload']['tmp_name']: sau khi upload, server sẽ lưu file vào một file tạm trên server, biến này cho ta biết đường dẫn và tên của file tạm đó. Chương trình sẽ đọc file tạm này để lấy nội dung của file được upload.

* $_FILES['file_upload']['error']: mã lỗi, chương trình nên kiểm tra biến này để bảo đảm rằng quá trình upload không xảy ra lỗi.

o UPLOAD_ERR_OK ( = 0 ): không có lỗi, quá trình upload thành công.

o UPLOAD_ERR_INI_SIZE ( = 1 ): dung lượng file upload vượt quá giới hạn được chỉ định trong file php.ini.

o UPLOAD_ERR_FORM_SIZE ( = 2 ): dung lượng file upload vượt quá giới hạn được chỉnh định bởi MAX_FILE_SIZE.

o UPLOAD_ERR_PARTIAL ( = 3 ): file chỉ được upload 1 phần (có thể là do lỗi đường truyền trong quá trình upload).

o UPLOAD_ERR_NO_FILE ( = 4 ): không có file nào được upload (có thể là file ở client không tồn tại).

Khi đã có toàn bộ các thông tin cần thiết, xử lý file như thế nào là quyến định của bạn. Bạn có thể đọc nội dung của file và lưu vào database, hoặc di chuyển file và lưu vào thư mục upload của bạn. Sau đây là 1 ví dụ của file process_upload.php.

Đầu tiên, kiểm tra xem tác vụ có phải là upload hay không:


if ( $_SERVER["REQUEST_METHOD"] != "POST" ) {

//thông báo lỗi không phải là method POST

//và thoát

exit(-1);

} //end if




Tiếp theo kiểm tra xem quá trình upload có lỗi gì không:


if ( !isset($_FILES["file_upload"]["error"]

$_FILES["file_upload"]["error"] != 0 ) {

//thông báo lỗi dựa vào giá trị của $_FILES["file_upload"]["error"]

//và thoát

exit(-1);

} //end if

//ta cũng có thể kiểm tra xem dung lượng file có vượt quá giới hạn

//của chương trình hay không

if ( $_FILES["file_upload"]["size"] > $MAX_FILE_SIZE ) {

//thông báo lỗi

//và thoát

exit(-1);

}



Tách tên file từ client:


$temp = preg_split(’/[\/\\\\]+/’, $_FILES["file_upload"]["name"]);

$filename = $temp[count($temp)-1];

//ta cũng có thể kiểm tra phần mở rộng của file nếu cần thiết

if ( !preg_match(’/\.(gifjpg)$/i’, $filename ) {

//thông báo lỗi file upload không phải là dạng GIF hoặc JPG

//và thoát

exit(-1);

} //end if

Và cuối cùng, lưu file được upload vào nơi cần thiết:


$upload_dir = "/home/nbthanh/public_html/uploads/";

$upload_file = $uploaddir . $filename;

if ( move_uploaded_file($_FILES["file_upload"]["tmp_name"], $upload_file) ) {

//file đã được upload và copy sang thư mục lưu trữ thành công

} else {

//có lỗi xảy ra

} //end if

9. CÁC HÀM PHP ĐƯỢC DÙNG TRONG VÍ DỤ

* exit: dừng/thoát chương trình ngay lập tức.

* isset: kiểm tra xem biến có tồn tại hay không. Trong ví dụ của bài viết, ta dùng hàm isset để kiểm tra xem biến $_FILES["file_upload"]["error"] có tồn tại hay không.

* preg_split: tách một chuỗi thành từng phần nhỏ theo regular expression. Trong ví dụ của bài viết, ta dùng hàm này để tách tên file cùng đường dẫn ra thành từng phần nhỏ (phân cách nhau bằng ký tự \ hoặc /, ta không biết chắc được client là Windows hay Linux nên ta tách theo trường hợp tổng quát). Sau khi tách, phần tử cuối cùng sẽ là tên file.

Một cách khác để lấy tên file là dùng hàm basename. Tuy nhiên sử dụng hàm này sẽ có một số vấn đề nảy sinh, bạn tham khảo thêm ở đây: http://www.php.net/manual/en/function.basename.php.

* count: đếm số lượng phần tử trong mảng. $a[count($a)-1] sẽ truy cập tới phần tử cuối cùng của mảng $a.

* preg_match: sử dụng regular expression để tìm xem chuỗi con có xuất hiện trong chuỗi mẹ hay không. Trong ví dụ của bài viết, ta dùng hàm này để kiểm tra xem tên của của có được kết thúc bằng .gif hoặc .jpg hay không.

* move_uploaded_file: di chuyển file được upload từ client đến 1 thư mục khác trên server.


TÀI LIỆU THAM KHẢO



* Regular Expression Functions (Perl-Compatible): http://www.php.net/manual/en/ref.pcre.php

* Handling file uploads: http://www.php.net/manual/en/features.file-upload.php



10. Xử lý lỗi tìm kiếm trong MYSQL


Không biết các bạn đã bao giờ gặp phải vấn đề lỗi tìm kiếm trong MYSQL chưa. Vấn đề thế này :

Ví dụ : Trong cơ sở dữ liệu bạn có các chữ : ” ống dây cáp,cuộc sống,…”.

Khi bạn Search với từ khóa : “ỐNG day cáp” hay cuỘc sỐng thì bạn không nhận được kết quả nào cả.


Qua tìm hiểu mình thấy rằng các phiên bản MYSQL 4.xxx không nhận dạng được một số ký tự unicode chữ hoa hay chữ thường.( Các phiên bản mới hơn thì mình cũng ko biết có bị lỗi vậy ko ).

Để giải quyết vấn đề này mình đã viết ra hai hàm sau mong rằng sẽ có ích cho các bạn


#Function Fillter to Search

function toUpper ($text) {

$lower = array(

‘á’,'à’,'ả’,'ã’,'ạ’,'â’,'ấ’,'ầ’,'ậ’,'ẩ’,'ẫ’,'ă’,'ắ’,'ằ’,'ặ’,'ẵ’,'ẳ’,'ê’,'ế’,'ề’,'ệ’,'ể’,'ễ’,

‘ô’,'ố’,'ồ’,'ộ’,'ổ’,'ỗ’,'ơ’,'ớ’,'ờ’,'ợ’,'ỡ’,'ở’,'ư’,'ứ’,'ừ’,'ự’,'ữ’,'ử’,'ị’,'ì’,'í’,'ĩ’,'ỉ’,

‘ý’,'ỳ’,'ỵ’,'ỷ’,'ỹ’,'ù’,'ú’,'ụ’,'ũ’,'ủ’

);


$upper=array(

‘Á’,'À’,'Ả’,'Ã’,'Ạ’,'Â’,'Ấ’,'Ầ’,'Ậ’,'Ẩ’,'Ẫ’,'Ă’,'Ắ’,'Ằ’,'Ặ’,'Ẵ’,'Ẳ’,'Ê’,'Ế’,'Ề’,'Ệ’,'Ể’,'Ễ’,

‘Ô’,'Ố’,'Ồ’,'Ộ’,'Ổ’,'Ỗ’,'Ơ’,'Ớ’,'Ờ’,'Ợ’,'Ỡ’,'Ở’,'Ư’,'Ứ’,'Ừ’,'Ự’,'Ữ’,'Ử’,'Ị’,'Ì’,'Í’,'Ĩ’,'Ỉ’,

‘Ý’,'Ỳ’,'Ỵ’,'Ỷ’,'Ỹ’,'Ù’,'Ú’,'Ụ’,'Ũ’,'Ủ’

);


$text = str_replace($lower, $upper,$text);

return strToUpper($text);

}

function toLower ($text) {

$lower = array(

‘á’,'à’,'ả’,'ã’,'ạ’,'â’,'ấ’,'ầ’,'ậ’,'ẩ’,'ẫ’,'ă’,'ắ’,'ằ’,'ặ’,'ẵ’,'ẳ’,'ê’,'ế’,'ề’,'ệ’,'ể’,'ễ’,

‘ô’,'ố’,'ồ’,'ộ’,'ổ’,'ỗ’,'ơ’,'ớ’,'ờ’,'ợ’,'ỡ’,'ở’,'ư’,'ứ’,'ừ’,'ự’,'ữ’,'ử’,'ị’,'ì’,'í’,'ĩ’,'ỉ’,

‘ý’,'ỳ’,'ỵ’,'ỷ’,'ỹ’,'ù’,'ú’,'ụ’,'ũ’,'ủ’

);




$upper=array(

‘Á’,'À’,'Ả’,'Ã’,'Ạ’,'Â’,'Ấ’,'Ầ’,'Ậ’,'Ẩ’,'Ẫ’,'Ă’,'Ắ’,'Ằ’,'Ặ’,'Ẵ’,'Ẳ’,'Ê’,'Ế’,'Ề’,'Ệ’,'Ể’,'Ễ’,

‘Ô’,'Ố’,'Ồ’,'Ộ’,'Ổ’,'Ỗ’,'Ơ’,'Ớ’,'Ờ’,'Ợ’,'Ỡ’,'Ở’,'Ư’,'Ứ’,'Ừ’,'Ự’,'Ữ’,'Ử’,'Ị’,'Ì’,'Í’,'Ĩ’,'Ỉ’,

‘Ý’,'Ỳ’,'Ỵ’,'Ỷ’,'Ỹ’,'Ù’,'Ú’,'Ụ’,'Ũ’,'Ủ’
);


$text = str_replace($upper,$lower, $text);

return strToLower($text);

}

Hai hàm ở trên dùng để convert tất cả chữ hoa sang chữ thường hoặc chữ thường sang chữ hoa.

Để giải quyết vấn đề trên mình đã làm như sau:

$key_lower=toLower($_POST["keyword"]);

$key_upper=toUpper($_POST["keyword"]);

khi truy vấn mình chỉ cần so sánh với 2 key trên

$sql=”SELECT * FROM tbl_content WHERE content LIKE ‘%$key_lower%’ OR content LIKE ‘%$key_upper%’”;

Với cách này vấn đề của mình đã được giải quyết.Nếu bạn nào có cách hay hơn thì post lên cho mọi người cùng tham khảo nhé!

10 dự án lập trình viên PHP nên trải quaSocialTwist Tell-a-Friend


Đang tải xin vui lòng chờ...

0 comments:

Post a Comment

[▼/▲] Chèn biểu tượng vui danghienIT
:)) ;)) ;;) :D ;) :p :(( :) :( :X =(( :-o :-/ :-* :| 8-} :)] ~x( :-t b-( :-L x( =))

/

Chuyên mục

Tool box

Liên kết

Trao đổi Liên kết
Loading Logos...
Bookmark and Share
 

Copyright 2009 All Rights Reserved iupro theme by Dang Quang Hien