Giáo trình Mô đun PHP và MySQL - Thiết kế trang Web

Hàm tự định nghĩa

Cú pháp:

function

functiono_name()

{

//Lệnh thực thi

}

Tên hàm có thể là một tổ hợp bất kỳ những chứ cái, con số và dấu gạch dưới,

nhưng phải bắt đầu từ chứ cái và dấu gạch dưới.

Ví dụ:

<>

function

name()

{

$name= array("Kenny", "Jiro", "Calvin", "Gillian");

foreach ($name as $test)

{ echo "$test
"; }

}

name(

);

?>

Giáo trình Mô đun PHP và MySQL - Thiết kế trang Web trang 1

Trang 1

Giáo trình Mô đun PHP và MySQL - Thiết kế trang Web trang 2

Trang 2

Giáo trình Mô đun PHP và MySQL - Thiết kế trang Web trang 3

Trang 3

Giáo trình Mô đun PHP và MySQL - Thiết kế trang Web trang 4

Trang 4

Giáo trình Mô đun PHP và MySQL - Thiết kế trang Web trang 5

Trang 5

Giáo trình Mô đun PHP và MySQL - Thiết kế trang Web trang 6

Trang 6

Giáo trình Mô đun PHP và MySQL - Thiết kế trang Web trang 7

Trang 7

Giáo trình Mô đun PHP và MySQL - Thiết kế trang Web trang 8

Trang 8

Giáo trình Mô đun PHP và MySQL - Thiết kế trang Web trang 9

Trang 9

Giáo trình Mô đun PHP và MySQL - Thiết kế trang Web trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 42 trang duykhanh 8220
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Mô đun PHP và MySQL - Thiết kế trang Web", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Mô đun PHP và MySQL - Thiết kế trang Web

Giáo trình Mô đun PHP và MySQL - Thiết kế trang Web
; 
$tgout=900; 
$tgnew=$tg - $tgout; 
$conn=mysql_connect("localhost","root","root") or die("can't connect"); 
mysql_select_db("online",$conn); 
$sql="insert into useronline(tgtmp,ip,local) 
values('$tg','$REMOTE_ADDR','$PHP_SELF')"; $query=mysql_query($sql); 
$sql="delete from useronline where tgtmp < $tgnew"; 
$query=mysql_query($sql); 
$sql="SELECT DISTINCT ip FROM useronline WHERE file='$PHP_SELF'"; 
$query=mysql_query($sql); $user = mysql_num_rows($query); echo "user 
online :$user"; 
Trang 30 
?> 
4. Xây dựng hệ thống bình chọn bằng PHP và MYSQL 
Ở loạt bài trước, chúng ta đã bàn tới các ứng dụng quản lý người sử dụng, xây 
dựng bộ đếm, tạo mã bảo mật để phòng chống những người có dụng ý xấu trên 
website. Tiếp theo, trong bài này chúng ta sẽ bàn về cách thức xây dựng hệ thống cho 
phép người dùng bình chọn khi họ tiến hành thăm viếng website của chúng ta. Để xây 
dựng hệ thống bình chọn chúng ta cần phân tích xem hệ thống này cần có bao nhiêu 
bảng quan hệ. 
A- Phân tích và thiết kế cơ sở dữ liệu: 
Trong tình huống này chúng ta cần 1 bảng câu hỏi và 1 bảng câu trả lời. 
Phân tích quan hệ giữa chúng ta có: 
1 Câu hỏi có nhiều câu trả lời. 
1 câu trả lời chỉ dành cho 1 câu hỏi. 
Vậy giữa 2 bảng này sẽ phát sinh một khóa ngoại, là khóa dùng để liên kết giữa 
hai bảng này. 
Vậy ta có cú pháp tạo 2 bảng như sau. 
Bảng câu hỏi ( question) 
mysql> create table question(qid INT(10) UNSIGNED NOT NULL 
AUTO_INCREMENT, 
-> qtitle VARCHAR(255) NOT NULL, 
-> qdate DATE NOT NULL DEFAULT '0000-00-00', 
-> PRIMARY KEY(qid)); 
Bảng câu trả lời (anwser) 
mysql> create table answer(aid INT(10) UNSIGNED NOT NULL 
AUTO_INCREMENT, 
-> qid INT(10) UNSIGNED NOT NULL, 
-> atitle VARCHAR(255) NOT NULL, 
Trang 31 
-> acount INT(10) NOT NULL DEFAULT '0', -> PRIMARY KEY(aid)); 
Nhập liệu bằng CSDL ta có: 
mysql> Insert into question(qtitle,qdate) values("Ban thay qhonline the nao ?"," 
2009-10-10"); mysql> Insert into answer(qid,atitle,acount) values("1","Nhin rat 
dep",0); mysql> Insert into answer(qid,atitle,acount) values("1","Nhin Dep",0); 
mysql> Insert into answer(qid,atitle,acount) values("1","Nhin Cung duoc",0); mysql> 
Insert into answer(qid,atitle,acount) values("1","Nhin qua xau",0); 
B- Xây dựng trang bình chọn poll.php 
Kết nối cơ sở dữ liệu: 
<?php 
$conn=mysql_connect("localhost","root","root") or die("can not connect 
database"); mysql_select_db("poll_exam",$conn); ?> 
Lựa chọn câu hỏi có trong cơ sở dữ liệu để liệt kê ra trên website, sau đó ta lại 
tiếp tục liệt kê các câu trả lời của câu hỏi đó bằng cách sử dụng dấu chọn lựa (radio). 
Như vậy chúng ta sẽ phải chạy cùng lúc 2 câu truy vấn lồng nhau trong suốt quá trình 
truy xuất. 
<?php 
$sql="select * from question order by qid desc"; 
$query=mysql_query($sql); 
if(mysql_num_rows($query) > 0) 
{ 
 $row=mysql_fetch_array($query); 
 $qid=$row[qid]; 
 echo ""; echo 
"$row[qtitle]"; 
 $sql2="select * from answer where qid='".$qid."' order by aid"; 
 $query2=mysql_query($sql2); 
 if(mysql_num_rows($query2) > 0) 
 { 
 while($row2=mysql_fetch_array($query2)){ 
 echo "$row2[atitle]"; 
 } 
 } 
 echo ""; echo "<a 
href=result.php?questionid=$qid>Xem Ket Qua"; echo ""; 
} 
?> 
Trang 32 
Và màn hình sẽ xuất ra như hình bên dưới 
Và khi người dùng nhất nút Bình chọn, chúng ta sẽ gọi lại chính trang đó để xử lý dữ 
liệu mà người dùng vừa lựa chọn. 
Vậy ta phải sử dụng lệnh isset() để kiểm tra xem người dùng có nhấn nút bình chọn 
không, tiếp đến ta lấy ra id mà người dùng vừa tiến hành chọn ở form bên dưới. 
Cuối cùng ta cập nhật dữ liệu bằng cách lấy số trong cơ sở dữ liệu cộng tiếp cho 1 đơn 
vị nữa. Và đưa người dùng sang trang kết quả. 
Vì trong đoạn code này có lệnh header nên chúng ta phải đặt quá trình xử lý này ở trên 
form. Nếu không sẽ bị lỗi dữ liệu khi gởi. 
<?php 
if(isset($_POST['ok'])) 
{ 
 $id=$_POST['answer']; 
 $qid=$_GET['questionid']; 
 $sql3="update answer set acount=acount + 1 where 
aid='".$id."'"; mysql_query($sql3); 
 header("location: 
result.php?questionid=$qid"); 
exit(); } 
?> 
Vậy toàn bộ code của trang poll.php này như sau. 
<?php 
$conn=mysql_connect("localhost","root","root") or die("can not connect database"); 
mysql_select_db("poll_exam",$conn); 
if(isset($_POST['ok'])) 
{ 
 $id=$_POST['answer']; 
 $qid=$_GET['questionid']; 
 $sql3="update answer set acount=acount + 1 where 
aid='".$id."'"; mysql_query($sql3); 
Trang 33 
 header("location: 
result.php?questionid=$qid"); exit(); 
} 
$sql="select * from question order by qid desc"; 
$query=mysql_query($sql); 
if(mysql_num_rows($query) > 0) 
{ 
 $row=mysql_fetch_array($query); 
 $qid=$row[qid]; 
 echo "<form action="poll.php?questionid=$qid" 
method="post" >"; echo "$row[qtitle]"; 
 $sql2="select * from answer where qid='".$qid."' order by aid"; 
 $query2=mysql_query($sql2); 
 if(mysql_num_rows($query2) > 0) 
 { 
 while($row2=mysql_fetch_array($query2)){ 
 echo "$row2[atitle]"; 
 } 
 } 
 echo "<input type=submit name=ok 
value="Binh Chon">"; echo "<a 
href=result.php?questionid=$qid>Xem Ket 
Qua"; echo ""; 
} 
?> 
C- Xây dựng trang kết quả bình chọn result.php 
Ở trang này, ta sẽ lấy giá trị question id của người bình chọn từ trang poll.php và tính 
toán xem tỷ lệ phần trăm của các câu hỏi ấy như thế nào. 
Đầu tiên, ta lấy giá trị từ poll.php?questionid=1. vậy 1 là giá trị ta sẽ có được từ 
$_GET['questionid']. Tiếp đến ta lại dùng giá trị vừa lấy được này để liệt kê thông tin 
câu hỏi và tính toán giá trị. 
Để tính toán giá trị, ta cần biết tổng số bình chọn trong toàn bộ các câu trả lời hiện nay 
là bao nhiêu. Bằng câu lệnh SUM ta có thể làm được điều đó. 
$sql2="select qid, SUM(acount) as total from answer group by qid having 
qid='".$qid."'"; 
Câu lệnh này cho phép ta lấy ra tổng số bình chọn trong cơ sở dữ liệu của câu hỏi mà 
ta truyền vào. Để SUM được acount ta cần phải GROUP(gom nhóm) chúng ta lại theo 
Trang 34 
mã câu hỏi mà chúng ta cần tìm. having là mệnh đề theo sau có ý nghĩa tương đương 
với where, nó thường được sử dụng theo GROUP. 
Như vậy để lấy ra tổng số phiếu bình chọn ta chỉ việc thực thi câu truy vấn này, và lấy 
tên cột tạm là total. 
<?php 
$sql2="select qid, SUM(acount) as total from answer group by qid having 
qid='".$qid."'"; 
$query2=mysql_query($sql2); 
$row2=mysql_fetch_array($query2); 
$total=$row2[total]; 
?> 
kế tới, ta lại tính toán số phiếu của từng câu hỏi trong cơ sở dữ liệu, dựa vào tổng số 
câu hỏi này. 
Ví dụ: Tổng số câu hỏi 
là 10 câu 1 là 3 câu 2 
là 4 
câu 3 là 2 câu 4 là 1 
vậy suy ra phần trăm trên tổng số 10 của 4 câu này được tính bằng cách lấy. số liệu của 
từng câu chia cho tổng số câu hỏi và nhân cho 100. (3/10)*100 = 30% 
Để làm tròn kết quả ta sử dụng hàm round(). Giúp dữ liệu đưa về sự đồng bộ và rõ 
ràng nhất. 
Vậy code xử lý của chúng ta như sau: 
<?php 
$sql3="select * from answer where qid='".$qid."' order by aid"; 
$query3=mysql_query($sql3); 
if(mysql_num_rows($query3) > 0) 
{ 
 while($row3=mysql_fetch_array($query3)){ 
$percent=round(($row3[acount]/$total)*100,2); 
 echo "$row3[atitle] : $row3[acount] 
($percent %)"; 
 } 
} 
?> 
Kết quả khi xuất ra sẽ có hình như sau: 
Trang 35 
Vậy toàn bộ mã nguồn của trang result.php này như sau: 
mysql> create table answer(aid INT(10) UNSIGNED NOT NULL 
AUTO_INCREMENT, 
-> qid INT(10) UNSIGNED NOT NULL, 
-> atitle VARCHAR(255) NOT NULL, 
-> acount INT(10) NOT NULL DEFAULT '0', 
-> PRIMARY KEY(aid)); 
5. Xây dựng ứng dụng tạo trang upload nhiều hình ảnh 
Ở những bài trước, chúng ta đã có dịp nghiên cứu từng ứng dụng nhỏ bởi việc kết 
hợp PHP và Mysql. Trong bài này, chúng ta sẽ tiếp tục tìm hiểu phương pháp xây 
dựng một trang upload nhiều hình ảnh như thế nào. Và lưu chúng vào cơ sở dữ liệu ra 
sao trong lập trình php. 
Mô hình này là rất cần thiết đối với các hệ thống. Bởi qua đó người sử dụng có 
thể thao tác và upload những hình ảnh đi kèm với hệ thống của họ như tin tức, sản 
phẩm, 
Đầu tiên, ta tiến hành xây dựng cơ sở dữ liệu với bảng images như sau: 
CREATE TABLE `images` ( 
 `img_id` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY 
KEY , 
 `img_url` VARCHAR( 255 ) NOT NULL , 
 `img_name` VARCHAR( 150 ) NOT NULL 
); 
Như vậy, tôi có bảng images với 3 cột thuộc tính là img_id dùng để lưu khóa của 
từng hình, img_url dùng để lưu đường dẫn vào hệ thống, img_name dùng để lưu tên 
hình ảnh. 
Ứng dụng của chúng ta cũng rất cần sự tùy biến và dễ sử dụng. Sao cho người 
dùng có thể hoàn toàn thao tác. Ví dụ: nếu có 2 hình, họ chỉ muốn tạo ra 2 chế độ 
chọn file thì sẽ chỉ khai báo là 2. 
Trang 36 
Và ngược lại nếu là n hình, họ sẽ tạo được n file lựa chọn. Để làm được điều này, 
trước tiên ta cần tạo 1 form nhỏ cho phép người dùng nhập vào số lượng file mà họ 
muốn thao tác. Vậy tôi khởi tạo file có tên upload.php với mã lệnh form như sau: 
Enter your Image: <input type="text" name="txtnum" value="<?php echo 
$_POST['txtnum']; ?>" size="10" /> <input type="submit" name="ok_num" 
value="Accept" /> 
Sau khi người dùng nhấn nút accept thì cũng là lúc chúng ta tạo ra số field upload 
theo yêu cầu của họ. Vậy, ta có code xử lý bên dưới như sau: 
<?php 
if(isset($_POST['ok_num'])) 
{ 
 $num=$_POST['txtnum']; 
 echo ""; 
 echo "Ban dang chon $num file upload"; 
 echo "<form action='doupload.php?file=$num' method='post' 
enctype='multipart/form-data'>"; for($i=1; $i <= $num; $i++) 
 { 
 echo ""; 
 } 
 echo "<input type='submit' name='ok_upload' 
value='Upload' />"; echo ""; 
} 
?> 
Đoạn code này sử dụng vòng lặp for với điều kiện là biến $i sẽ nhỏ hơn số file 
mà họ nhập vào. Đồng thời, để việc upload thành công tại form ta cũng cần thêm đoạn 
code : enctype='multipart/form-data'. 
Số lượng field sẽ lặp theo yêu cầu của người dùng. Do vậy. tại name của thể 
input, ta sẽ sử dụng mảng để lưu thông tin. Sử dụng name='img[]', có nghĩa là mỗi lần 
lặp và mỗi lần người dùng chọn file thì mảng img sẽ thêm 1 khóa tương ứng. 
Và cuối cùng là nút submit thực thi công việc upload và gọi tới trang 
doupload.php?file=$num (chỉ rõ số file cụ thể do người dùng nhập tại trang doupload). 
Trang 37 
Vậy toàn bộ code của trang upload này sẽ như sau: 
Enter your Image: <input type="text" name="txtnum" value="<?php echo 
$_POST['txtnum']; ?>" size="10" /> <input type="submit" name="ok_num" 
value="Accept" /> 
<?php 
if(isset($_POST['ok_num'])) 
{ 
 $num=$_POST['txtnum']; 
 echo ""; 
 echo "Ban dang chon $num file upload"; 
 echo "<form action='doupload.php?file=$num' method='post' 
enctype='multipart/form-data'>"; for($i=1; $i <= $num; $i++) 
 { 
 echo ""; 
 } 
 echo "<input type='submit' name='ok_upload' 
value='Upload' />"; echo ""; 
} 
?> 
Tại trang thực hiện nhiệm vụ doupload.php ta cần kiểm tra xem, người dùng có 
nhấn nút upload từ trang bên kia hay không ?. Nếu có ta sẽ xử lý công đoạn upload ấy, 
nếu không ta cần thông báo lỗi cho người dùng và yêu cầu họ chọn file. 
<?php 
if(isset($_POST['ok_u
pload'])) { 
Trang 38 
 //thực thi upload 
} 
el
s
e 
{ 
 echo "Vui long chon hinh truoc khi truy cap 
vao trang nay"; } 
?> 
Như vậy, khi người dùng nhấn upload, ta sẽ lấy được tham số là biến $num từ 
liên kết $_GET[‘file'] mà ta đã thiết lập trên phần form action của file upload ở trang 
trước. 
Biến $num này dùng để thực thi việc upload và tuần tự lấy các thông tin của file. 
Để upload file từ máy lên hệ thống ta cần sử dụng hàm: 
move_uploaded_file(tên_file_tạm,đường dẫn tới hệ thống). 
Có thể diễn giải nôm na công việc của hàm này như sau: Ngay sau khi người 
dùng nhấn upload, hệ thống sẽ tạo ra 5 tham số ứng với từng file. Cụ thể là tên tạm 
(tmp_name), tên gốc (name), kích thước (size), định dạng mime (type) và lỗi (error) 
nếu có. 
Và khác với kiểu nhập liệu thông thường, khi chúng ta sử dụng <input type=file 
name=ten> thì lúc này sẽ phát sinh một biến môi trường mới là $_FILES[‘ten'] và dĩ 
nhiên nó sẽ đi kèm với 5 tham số cụ thể ở trên. 
Ví dụ: $_FILES[‘ten'][‘name'] //Lấy ra tên gốc của file. Vậy ứng với 
cú pháp upload ở trên ta sẽ có: 
move_uploaded_file($_FILES['img']['tmp_name'],"data/".$_FILES['img']
['name']); 
Cú pháp này sẽ tự động upload hình ảnh lên thư mục data trên hệ thống. Vậy ta 
cần phải tạo thư mục data ngang cấp với 2 file upload và doupload. Nếu là host thật, 
bạn cần CHMOD thư mục là 777 (cho phép thư mục có toàn quyền) thì mới thực thi 
upload file được. 
Trong tình huống của chúng ta, vì là upload một lúc nhiều file, nên lúc này ta 
phải sử dụng tham số mảng tại trang upload ta đã khởi tạo. 
Vậy ứng với biến $num ta nhận từ upload ở trên ta sẽ triển khai code đơn giản 
như sau: 
<?php 
for($i=0; $i< $num; $i++) 
{ 
move_uploaded_file($_FILES['img']['tmp_name'][$i],"data/".$_FILES['img']['nam
e'][$i]); 
 $url="data/".$_FILES['img']['name'][$i]; 
Trang 39 
 $name=$_FILES['img']['name'][$i]; 
} 
?> 
Với biến $i là số lượng tăng lên theo vòng lặp. Vì mảng luôn bắt đầu bởi khóa là 
0 nên ta cần phải thiết lập khởi tạo biến $i với giá trị là 0. Biến $url và $name là đường 
dẫn hình ảnh và tên gốc của tấm hình được sử dụng để lưu vào CSDL. 
Kế tới, ta cần lưu thông tin hình ảnh tương ứng vào cơ sở dữ liệu. Để làm được 
điều này, ta cần kết nối CSDL với cú pháp sau. 
<?php 
$conn=mysql_connect("localhost","root","root") or die("can't connect your 
database"); mysql_select_db("images",$conn); ?> 
Như vậy mỗi khi upload thành công một hình ảnh, ta phải thêm hình ảnh đó vào 
CSDL như sau: 
<?php 
$sql="insert into images(img_url,img_name) 
values('$url','$name')"; mysql_query($sql); ?> 
Sau khi thêm vào CSDL ta cần hiển thị thông tin và hình ảnh vừa upload để cho 
người dùng biết họ đã upload thành công. 
Khi đó ta sử dụng một biến $site để lưu đường dẫn gốc hiển thị trên textbox. 
Trang 40 
Vậy hoàn chỉnh code cho file doupload.php này như sau: 
<?php 
$site= ""; 
if(isset($_POST['ok_upload'])) 
{ 
 $num=$_GET['file']; 
 echo "Demo Images Script - SotayWeb.com"; 
 $conn=mysql_connect("localhost","root","root") or die("can't connect your 
database"); mysql_select_db("images",$conn); 
 for($i=0; $i< $num; $i++) 
 { 
move_uploaded_file($_FILES['img']['tmp_name'][$i],"data/".$_FILES['img']['nam
e'][$i]); 
 $url="data/".$_FILES['img']['name'][$i]; 
 $name=$_FILES['img']['name'][$i]; 
 $sql="insert into images(img_url,img_name) 
values('$url','$name')"; mysql_query($sql); echo 
"Upload Thanh cong file $name"; 
echo ""; 
 echo "Images URL: <input type='text' name='link' value='$site/$url' size='35' 
/>"; 
}
 mysql_close($conn); 
} else { echo "Vui long chon hinh truoc khi truy cap vao trang nay"; 
} 

File đính kèm:

  • pdfgiao_trinh_mo_dun_php_va_mysql_thiet_ke_trang_web.pdf