Lập trình mã nguồn mở - 31

Đ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).

Hình 3 14 Giao diện trang Upload file Vậy toàn bộ code của trang upload này sẽ như 1

Hình 3.14. Giao diện trang Upload file

Vậy toàn bộ code của trang upload này sẽ như sau:

<form action="upload.php" method="post">

Enter your Image: <input type="text" name="txtnum" value="<?php echo

$_POST['txtnum']; ?>" size="10" />

<input type="submit" name="ok_num" value="Accept" />

</form>

<?php if(isset($_POST['ok_num'])){

$num=$_POST['txtnum']; echo "<hr />";

echo "Ban dang chon $num file upload<br />";

echo "<form action='doupload.php?file=$num' method='post' enctype='multipart/form-data'>";

for($i=1; $i <= $num; $i++){

echo "<input type='file' name='img[]' /><br />";

}

echo "<input type='submit' name='ok_upload' value='Upload' />"; echo "</form>";

}

?>

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_upload'])){

//thực thi upload

}

else{

echo "Vui long chon hinh truoc khi truy cap vao trang nay";

}

?>

Như vậy, khi người dùng nhấn upload, sẽ lấy được tham số là biến $num từ liên kết $_GET[„file'] đã 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 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 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ụ: $_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 phải tạo thư mục data ngang cấp với 2 file upload và doupload. Nếu là host thật, 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 như sau:

<?php

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

move_uploaded_file($_FILES['img']['tmp_name'][$i],"data/".$_FILES['img'][' name'][$i]);

$url="data/".$_FILES['img']['name'][$i];

$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.

Vậy hoàn chỉnh code cho file doupload.php này như sau:

<?php

$site="http://www.qhonline.info"; if(isset($_POST['ok_upload'])){

$num=$_GET['file'];

echo "<h3>Demo Images Script - Copyright by QHOnline.Info</h3>";

$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'][' name'][$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 <b>$name</b><br />"; echo "<img src='$url' width='120' /><br />";

echo "Images URL: <input type='text' name='link' value='$site/$url' size='35'

/><br />";

}

mysql_close($conn);

}

else{

echo "Vui long chon hinh truoc khi truy cap vao trang nay";

}

?>

3.4. Bài tập

Bài 1. Làm việc với cơ sở dữ liệu MySQL

1.1. Tạo CSDL theo yêu cầu sau:

- Thiết kế CSDL có tên là QL_BAN_SUA

- Các field in đậm và gạch dưới là khóa chính của bảng

- Sau đó tạo link giữa các bảng này (nếu có)

Tạo các bảng dữ liệu sau:

HANG_SUA – Hãng sữa

LOAI SUA – Loại sữa SUA – Sữa KHACH HANG – Khách hàng HOA DON – Hóa đơn 2

LOAI_SUA – Loại sữa

SUA – Sữa KHACH HANG – Khách hàng HOA DON – Hóa đơn CT HOADON – Hóa đơn Nhập 3

SUA – Sữa

KHACH HANG – Khách hàng HOA DON – Hóa đơn CT HOADON – Hóa đơn Nhập liệu vào 4

KHACH_HANG – Khách hàng

HOA DON – Hóa đơn CT HOADON – Hóa đơn Nhập liệu vào bảng 1 2 Import và Export 5

HOA_DON – Hóa đơn

CT HOADON – Hóa đơn Nhập liệu vào bảng 1 2 Import và Export dữ liệu Import dữ 6

CT_HOADON – Hóa đơn

Nhập liệu vào bảng 1 2 Import và Export dữ liệu Import dữ liệu của CSDL 7

Nhập liệu vào bảng:

1.2. Import và Export dữ liệu

Import dữ liệu của CSDL QL_BAN_SUA vào từ một file dữ liệu sql được cung cấp sẵn (ql_ban_sua.sql)

Export toàn bộ CSDL QL_BAN_SUA ra file script và đặt tên là ql_ban_sua.sql

1.3. Truy vấn lọc và sắp xếp dữ liệu

1. Liệt kê danh sách hãng sữa gồm có tên hãng sữa, địa chỉ, điện thoại.

2. Liệt kê danh sách khách hàng gồm có các thông tin sau: tên khách hàng, địa chỉ, điện thoại, danh sách sẽ được sắp theo thứ tự tên khách hàng tăng dần.

3. Liệt kê danh sách khách hàng gồm có các thông tin sau: tên khách hàng, phái, địa chỉ, điện thoại, danh sách sẽ được sắp theo thứ tự nam trước, nữ sau.

4. Liệt kê danh sách sữa gồm có: tên sữa, trọng lượng, đơn giá. Có sắp tăng theo cột tên sữa, và sắp giảm theo cột đơn giá

5. Liệt kê danh sách sữa gồm có: tên sữa, trọng lượng, đơn giá, thành phần dinh dưỡng. Chỉ liệt kê các sữa có tên bắt đầu là 'S'.

6. Liệt kê danh sách các hãng sữa có ký tự cuối cùng của mã hãng sữa là 'M', gồm có các thông tin sau: mã hãng sữa, tên hãng sữa, địa chỉ, điện thoại.

7. Liệt kê danh sách sữa mà trong tên sữa có từ 'grow'.

8. Liệt kê danh sách sữa có đơn giá lớn hơn 100.000 VNĐ, gồm các thông tin: tên sữa, đơn giá, trọng lượng, danh sách được xếp theo thứ tự tên sữa giảm dần.

9. Cho biết các sữa có mã loại sữa là 'SC' và có mã hãng sữa là 'VNM' gồm các thông tin sau: tên sữa, thành phần dinh dưỡng, lợi ích, trong đó tên sữa sắp theo thứ tự tăng dần

10. Liệt kê danh sách sữa có trọng lượng lớn hơn hay bằng 900 gr hoặc mã hãng sữa là 'DS'

11. Liệt kê danh sách các sữa có đơn giá từ 100.000 VNĐ đến 150.000 VNĐ

12. Liệt kê các sữa có mã hãng sữa là 'DM' hay 'DL' hay 'DS' và có trọng lượng lớn hơn hay bằng 800 gr, sắp tăng dần theo trọng lượng.

13. Liệt kê các sữa có mã loại là 'SD' hoặc có giá tiền nhỏ hơn hay bằng 12.000 VNĐ

14. Liệt kê những khách hàng nam, và có họ tên bắt đầu là 'N'

15. Liệt kê tên các hãng sữa mà mã hãng sữa không có ký tự 'M'

16. Liệt kê các sữa có thành phần dinh dưỡng chứa 'canxi' và 'vitamin', gồm các thông tin: tên sữa, thành phần dinh dưỡng.

17. Liệt kê các sản phẩm sữa có trọng lượng là 180gr, 200gr hoặc 900 gr

18. Liệt kê các sản phẩm sữa có trọng lượng không là 400gr, 800gr,900gr

19. Cho biết tên sữa, đơn giá, thành phần dinh dưỡng của 10 sữa có đơn giá cao nhất

20. Cho biết 3 sản phẩm sữa của hãng Vinamilk có trọng lượng nặng nhất, gồm các thông tin: Tên sữa, trọng lượng

21. Liệt kê các sữa của hãng Vinamilk gồm các thông tin: tên sữa, lợi ích, đơn giá, trong đó đơn giá sắp giảm dần.

22. Liệt kê danh sách các sữa của hãng Abbott có: tên sữa, trọng lượng, lợi ích, trong đó trọng lượng sắp tăng dần.

Bài 2. Kết hợp PHP và MySQL sử dụng các thông tin và dữ liệu cho trong bài 1

1. Hiển thị lưới

Tạo ra một trang hiển thị thông tin như sau:

Yêu cầu chức năng STT Đối tượng Yêu cầu xử lí chức năng Ghi chú trang o 8

Yêu cầu chức năng:


STT

Đối tượng

Yêu cầu xử lí chức năng

Ghi chú


trang

o Kết nối vào MySQL


luoi_tho_hang_sua

o Chọn CSDL QL_BAN_SUA


o Đọc bảng hang_sua


o Xuất các thông tin về hãng sữa dưới


dạng lưới thô (table) như hình trên.

Có thể bạn quan tâm!

Xem toàn bộ 270 trang tài liệu này.

2. Lưới định dạng

Thiết kế trang hiển thị thông tin khách hàng có định dạng như sau

Yêu cầu chức năng STT Đối tượng Yêu cầu xử lí chức năng Ghi chú 1 trang o 9

Yêu cầu chức năng:


STT

Đối tượng

Yêu cầu xử lí chức năng

Ghi chú

1

trang

o Kết nối vào MySQL



luoi_dinh_dang

o Chọn CSDL QL_BAN_SUA



o Đọc bảng khach_hang



o Xuất các thông tin về khách hàng dạng lưới



có định dạng như hình trên, trong đó: dòng



tiêu đề có các cột được canh giữa, chữ in đậm,



có màu khác so với các dòng nội dung; dòng



chẵn và dòng lẻ ở phần nội dung có màu nền



khác nhau; cột giới tính được canh giữa

3. Lưới tùy biến

Thiết kế trang hiển thị thông tin khách hàng có tùy biến cột giới tính như sau

Yêu cầu chức năng STT Đối tượng Yêu cầu xử lí chức năng Ghi chú 1 trang 10

Yêu cầu chức năng:


STT

Đối tượng

Yêu cầu xử lí chức năng

Ghi chú

1

trang luoi_tuy_bien

o Kết nối vào MySQL, chọn CSDL QL_BAN_SUA

o Đọc bảng khach_hang



o Xuất các thông tin về khách hàng dạng lưới có địnhdạng như hình trên, trong đó: dòng tiêu đề có các cột được canh giữa, chữ in đậm, có màu khác so với các dòng nội dung; dòng chẵn và dòng lẻ hiển thị nội dung có màu nền khác nhau.

o Cột giới tính được canh giữa và sẽ hiển thị thông tin như sau: nếu giới tính của khách hàng là Nam thì hiển thị hình tượng trưng cho phái Nam, còn nếu ngược lại thì hiển thị hình tượng trưng cho phái Nữ

như hình trên


..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 15/07/2022