Thứ Tư, 28 tháng 9, 2011

Khai triển tiếp 1 code thứ 2

| |
Sau bước 3, các bạn đã biết và hoàn thành 1 code đơn gia3n nhất rồi.
Cũng như đã có các file trên host!
Giờ mình sẽ khai triển tiếp 1 code thứ 2 cao cấp hơn nha!
Bây giờ mình làm 1 code thế này, ứng dụng với forum VBB và mod Casino - Shop
(các mod khác thì tương tự nhé)
Ứng dụng:
Soạn tin: SMS DONATE USERID gửi đến 8222
Trong đó:

  • SMS: keyword
  • DONATE: Tiếp đầu ngữ
  • USERID: mã số của user trong Forum, cái mã số này khi bạn click vào username, hiện trên thanh address mấy số cuối cùng đó
Khi KH nhắn tin như thế, tiền trong tài khoản của Forum sẽ tăng lên 1 số nhất định cho user có mã số là USERID!

1. Kiến thức cần có
Ở ứng dụng này, đòi hỏi các bạn ngoài kiến thức về php, cần phải có kiến thức về
+Forum VBB, cái này chắc các bạn biết ít nhiều!
+MySQL: đây là hệ CSDL mà VBB cũng như các host Linux cung cấp.
Vì ở ứng dụng này, chúng ta sẽ truy vấn đến CSDL của VBB, lấy các thông tin cũng như cập nhật lại!

2. Chuẩn bị trước khi code:


Trước khi code, các bạn cần phải vào CSDL của forum, để xem table và column tiền. Tong ví dụ này, Table là user, và column cash.
Tạo 1 code kết nối CSDL:
Để truy vấn vào MySQL, các bạn phải kết nối vào database.
Database này cũng chính là database của forum!
Cấu trúc file này đơn giản như sau:

PHP Code:
<?php
$dbname 
'tên_database';$link mysql_connect("localhost","tên_user","mật_khẩu") or die("Couldn't make connection.");$db mysql_select_db($dbname$link) or die("Couldn't select database");?>
Các bạn mở EmEditor, dán đoạn code rồi save với 1 tên nào đó, ví dụ connect.php nhé!
Cái này mình sẽ không giải thích nhiều, quan trọng nhất là 2 lệnh
mysql_connect() và mysql_select_db()

3. Bắt tay vào code


Có file connect rồi, bây giờ, chúng ta mở Emeditr, và chuẩn bị cho 1 code mới.
Code này tất nhiên sẽ có những đều bắt buộc như code trên nha

PHP Code:
<?php//Nhận nội dung từ GW$cuphap=$_REQUEST['message'];$phone$_REQUEST['phone'];$service=$_REQUEST['service'];?>
Bắt đầu suy nghĩ nha, ở ứng dụng này, chúng ta cần phải lấy ra userID phải không? Nếu không có userID, thì sẽ không cộng cho tiền cho tài khoản được.
Các bạn chú ý thấy, cú pháp tin nhắn là
SMS DONATE USERID
Vậy, 1 tin nhắn sẽ có 3 phần khác nhau, và cách nhau bằng dấu cách.
Để ấy được USERID, chúng ta có nhiều cách, mình dùng cách đơn giản nhất, là tách nguyên message trên ra các phần khác nhau, phân biệt bởi dấu cách nhé
Lệnh tách chuỗi sẽ là:

PHP Code:
$tmp=explode(" ",$cuphap); 
Lệnh trên, sẽ tách nội dung trong biến cuphap mà ta đã request, ra thành 1 mảng các phần tử, các phần tử này, được nhận dạng bằng dấu cách do ta explode(" ",$cuphap), sau đó sẽ gán vào biến tmp.
Vậy lúc này, $tmp sẽ là 1 mảng kiểu chuỗi, được bắt đầu từ 0.
Ta sẽ có $tmp[0], $tmp[1], $tmp[2]....

Ví dụ, KH nhắn tin: SMS DONATE 1
Thì:
$tmp[0]='SMS';
$tmp[1]='DONATE';
$tmp[2]='1';

Xong, bây giờ ta sẽ quan tâm đến cái mà ta cần, đó là USERID, bây giờ nó là $tmp[2].

Ta sẽ tiến hành xét xem, KH nhắn tin có đúng cú pháp không nhé! Nghĩa là có USERID trong tin nhắn, hay $tmp[2] khác rỗng.

PHP Code:
if(@$tmp[2]!=NULL)
{
     
//Ok, KH đã nhắn đúng cú pháp, tiến hành xử lý tiếp}
else
{
    
//Khách hàng không nhắn đúng cú pháp, trả về tin nhắn báo lỗi!
Bây giờ ta báo lỗi trước cái đã, khi KH nhắn tin không có USERID

PHP Code:
echo '<ClientResponse>
         <Message>
              <PhoneNumber>'
.$phone.'</PhoneNumber>
              <Message>Tin nhan sai cu phap, soan SMS DONATE USERID gui 8222 nhe! Xin vui long lien he voi chung toi neu khong biet USERID. Than.</Message>
              <SMSID> -1</SMSID>
              <ServiceNo>'
.$service.'</ServiceNo>
           </Message>
       </ClientResponse>'
Hì, đã lỗi thì không có gì xử lý, nên chỉ echo lại như vậy thôi!
Bây giờ hợp những gì chúng ta đã làm ở trên nhé, để xem ta đã có gì, và làm được gì!
PHP Code:
<?php//Nhận nội dung từ GW$cuphap=$_REQUEST['message'];$phone$_REQUEST['phone'];$service=$_REQUEST['service'];//Phân tách cú pháp tin nhắn đến để nhận USERID$tmp=explode(" ",$cuphap);//Kiểm tra tin nhắn có đúng cú pháp khôngif(@$tmp[2]!=NULL)
{
     
//Ok, KH đã nhắn đúng cú pháp, tiến hành xử lý tiếp}
else
{
    
//Khách hàng không nhắn đúng cú pháp, trả về tin nhắn báo lỗi!echo '<ClientResponse>
         <Message>
              <PhoneNumber>'
.$phone.'</PhoneNumber>
              <Message>Tin nhan sai cu phap, soan SMS DONATE USERID gui 8222 nhe! Xin vui long lien he voi chung toi neu khong biet USERID. Than.</Message>
              <SMSID> -1</SMSID>
              <ServiceNo>'
.$service.'</ServiceNo>
           </Message>
       </ClientResponse>'
;
}
?>
Hì, được 50% rồi đấy. Giờ thì khi KH nhắn tin đến, và không đúng cú pháp ta sẽ báo lỗi.
Việc tiếp theo, ta sẽ viết tiếp code để xử lý khi cú pháp đúng!
Lúc này, ta lại phải kiểm tra 1 tường hợp nữa. Cái USERID mà KH gửi là đúng hay sai? Có USER nào có mã số đó không? Để làm được việc này, ta cần phải connect vào database. Đến lúc cần dùng cái file connect.php rồi đó!

Khai triển tiếp 1 code thứ 2 (tiếp theo)

3. Bắt tay vào code (tiếp theo)


PHP Code:
require_once("connect.php"); 
Xong, giờ ta kiểm tra xem USERID đó có ồn tại không?
PHP Code:
$result mysql_query("SELECT * FROM user where userid='$tmp[2]'");$duplicates mysql_num_rows($result); 
Ta tiến hành querry vào CSDL, chọn tất cả thông tin về những USER có USERID bằng $tmp[2], và trả kết quả vào biến $result. Để querry 1 câu lệnh mysql đừ php, ta dùng lệnh mysql_query() như các bạn thấy đó.
Tiếp theo ta sẽ đếm xem có bao nhiêu kết quả được trả về, nghĩa là có bao nhiêu user có userid = $tmp[2].
Ta sẽ chỉ có 2 trường hợp, hoặc có 1, hoặc không có!
Vì thế, biến $duplicates cũng chỉ có 2 giá trị 0 hoặc 1.
Phân tích tí nhé!
Nếu $duplicates =0 nghĩa là hoặc KH nhắn sai mã số, hoặc mã số đó không tồn tại. Lúc này, ta đơn giản hồi báo 1 tin cho KH là USERID đó không tồn tại!
PHP Code:
                    echo '
                   
                        '
.$phone.'
                        Cam on ban da ung ho VuiHoc.Info. Nhung ma so thanh vien '
.$tmp[2].' khong ton tai!
                         -1
                        '
.$service.'
                   
                '
Còn nếu tồn tại thì sao? Ta sẽ tiến hành cộng điểm cho USER đó, và hồi báo tin nhắn báo đã donate thành công!
PHP Code:
  //xử lý khi userid tồn tại             
                // Đặt biến số tiền tăng thêm
                
$money 2000;
                
// đọc dữ liệu từ MySQL vào biến $row
                
$row mysql_fetch_array($resultMYSQL_ASSOC);
                
// tính số tiền sau khi cộng vào
                
$money $row['cash'] + $money;
                
//Thực hiện lệnh querry để cộng thêm tiền cho user
                
mysql_query("UPDATE user SET cash='$money' where userid=$tmp[2]") or die(mysql_error());

echo 
'<ClientResponse>
        <Message>
           <PhoneNumber>'
.$phone.'</PhoneNumber>
           <Message>Ban da nap tien thanh cong. So tien hien tai cua ban la '
.$money.'. Chuc ban luon vui!</Message>
           <SMSID> -1</SMSID>
           <ServiceNo>'
.$service.'</ServiceNo>
        </Message>
        </ClientResponse>'
Mọi thứ đã xong xui. Giờ tổng hợp lại là ta có code hoàn chỉnh rồi
PHP Code:
<?php
 
//Nhận nội dung từ GW
 
$cuphap=$_REQUEST['message'];
 
$phone$_REQUEST['phone'];
 
$service=$_REQUEST['service'];//Phân tách cú pháp tin nhắn đến để nhận USERID$tmp=explode(" ",$cuphap);//Kiểm tra tin nhắn có đúng cú pháp khôngif(@$tmp[2]!=NULL)
 {
      
//Ok, KH đã nhắn đúng cú pháp, tiến hành xử lý tiếp
     //Kết nối vào CSDL
     
require_once("connect.php");
     
//Xác định xem userid có tồn tại không
     
$result mysql_query("SELECT * FROM user where userid='$tmp[2]'");
     
$duplicates mysql_num_rows($result);
     if(
$duplicates == 0)
            {
                 
//Hồi báo khi userid không tồn tại
            
echo '<ClientResponse>
                    <Message>
                        <PhoneNumber>'
.$phone.'</PhoneNumber>
                        <Message>Cam on ban da ung ho VuiHoc.info. Nhung ma so '
.$tmp[2].' khong ton tai!</Message>
                        <SMSID> -1</SMSID>
                        <ServiceNo>'
.$service.'</ServiceNo>
                    </Message>
                    </ClientResponse>'

            }
            else
            {
                
//xử lý khi userid tồn tại             
                // Đặt biến số tiền tăng thêm
                
$money 2000;
                
// đọc dữ liệu từ MySQL vào biến $row
                 
$row mysql_fetch_array($resultMYSQL_ASSOC);
                
// tính số tiền sau khi cộng vào
                
$money $row['cash'] + $money;
                
//Thực hiện lệnh querry để cộng thêm tiền cho user
                
mysql_query("UPDATE user SET cash='$money' where userid=$tmp[2]") or die(mysql_error());
echo 
'<ClientResponse>
        <Message>
           <PhoneNumber>'
.$phone.'</PhoneNumber>
           <Message>Ban da nap tien thanh cong. So tien hien tai cua ban la '
.$money.'. Chuc ban luon vui!</Message>
           <SMSID> -1</SMSID>
           <ServiceNo>'
.$service.'</ServiceNo>
        </Message>
        </ClientResponse>'

        }
 }
 else
 {
     
//Khách hàng không nhắn đúng cú pháp, trả về tin nhắn báo lỗi!
                
echo '<ClientResponse>
        <Message>
           <PhoneNumber>'
.$phone.'</PhoneNumber>
           <Message>Tin nhan sai cu phap, soan SMS DONATE USERID gui 8222 nhe! Xin vui long lien he voi chung toi neu khong biet USERID. Than.</Message>
           <SMSID>-1/SMSID>
           <ServiceNo>'
.$service.'</ServiceNo>
        </Message>
        </ClientResponse>'
;
 }
 
?>
4. Up lên host và tạo 1 cấu hình mới
Xong, giờ save file lại, ví dụ donate.php, up lên host chung với các file bắt buộc của Fibo nhé, và up luôn file connect.php nha! Giống hôm qua vậy!
Hôm qua ta đã up lên thư mục donggop, thì bay6 giờ vẫn up vào donggop nhé.
Rồi, vậy trong thư mục đóng góp giờ sẽ có 6 file, 4 file hôm qua và 2 file mới up.
(Đảm bảo chắc chắn như thế nhé)
Xong, vào http://fibosms.com, đăng nhập và thiết lập 1 cấu hình tin nhắn mới thôi! Cái này khỏi nhắc lại nhé!

Vậy là xong hết rồi, các bạn đã biết cách thiết lập 1 cấu hình tin nhắn với 1 code tương đối phức tạp, liên quan đến phân tích cú pháp lẫn truy vấn CSDL.
Cứ như thế mà phát triển các ứng dụng khác theo ý mình nhé!

Chúc các bạn thành công!!! 

0 nhận xét:

Đăng nhận xét