Gửi dữ liệu lên trình duyệt Web bằng PHP
Để gửi dữ liệu giữa các trang HTML khác nhau (hoặc đến một trang cụ thể), có hai cách để thực hiện việc này. Bằng cách bao gồm trực tiếp các tham số trong URI, (e. g. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 200) hoặc bằng cách tạo một yêu cầu POST và gửi đến một trang. Các chi tiết của hai phương pháp này được thảo luận dưới đây Show Đối số GET là đối số có thể được thêm vào như một phần của URI. ví dụ như http://localhost/mygraph.php?id=12&start=20081223&end=20090115 PHP tự động đặt tất cả các đối số đã cho vào biến mảng "siêu toàn cầu" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 201 dưới dạng một mảng kết hợp Có một vài điều cần lưu ý ở đây
Cách xác định chuỗi đối số này chủ yếu hữu ích khi
"Cách tốt nhất" khi sử dụng phương pháp này là gửi một khóa ngắn (hoặc id) tới tập lệnh biểu đồ và chính tập lệnh biểu đồ sẽ sử dụng id này để trích xuất dữ liệu thực từ DB (hoặc tệp văn bản thuần túy). Bằng cách này, cùng một tập lệnh biểu đồ cốt lõi có thể được sử dụng trong các ngữ cảnh khác nhau để hiển thị dữ liệu mong muốn Cảnh báoĐây là một chủ đề khá nâng cao và nên sử dụng các phương thức khác để gửi dữ liệu tới tập lệnh trừ khi thông số kỹ thuật yêu cầu rõ ràng rằng yêu cầu POST được tạo. Hơn nữa, điều này đòi hỏi bạn phải hiểu rất rõ về các tiêu đề yêu cầu HTTP và sự khác biệt giữa phía máy chủ và phía trình duyệt, vì vậy nếu bạn không chắc chắn rằng mình có nền tảng cần thiết, chúng tôi thực sự khuyên bạn nên tránh xa phương pháp này Hai trong số các hạn chế rõ ràng với phương thức GET là a) độ dài của dữ liệu bị hạn chế và b) dữ liệu hiển thị trực tiếp trong URI. Một cách khác để gửi dữ liệu như một phần của yêu cầu HTTP là sử dụng phương thức POST Thật không may, điều này không dễ dàng như chỉ thực hiện một số phép thuật và sau đó chúng ta có được chức năng tương tự như với phương thức GET. Ngay cả một số tác giả cũng hiểu sai điều này trong một số sách giáo khoa PHP rất nổi bật. Thật không may, chúng ta sẽ mất quá nhiều thời gian để thảo luận về tất cả các chi tiết của tiêu đề yêu cầu HTTP (như được mô tả trong 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 201) nhưng chúng tôi sẽ giải thích những điều cơ bản nhất Đầu tiên. hãy cho biết yêu cầu HTTP là gì
Một sự hiểu lầm phổ biến hơn nữa là có thể sử dụng phương thức PHP 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 202 để tạo một yêu cầu POST. Điều này thậm chí còn được đưa ra như một ví dụ trong các ghi chú cho phương pháp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 202 trong hướng dẫn sử dụng PHP (Xem 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 204). Cái này sai. Không thể sử dụng phương thức 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 202 để gửi tiêu đề POST. Cố gắng làm điều này cho thấy một sự hiểu lầm cơ bản về vai trò của máy chủ và máy khách
Hình 13. 1. Đăng vs. hướng dữ liệu header() Lưu ý rằng hình ảnh được đơn giản hóa rất nhiều để giúp minh họa điểm quan trọng về hướng dữ liệu. Ví dụ: yêu cầu bài đăng được hiển thị bắt nguồn từ trình duyệt có thể bắt nguồn từ bất kỳ ứng dụng khách nào, ví dụ: một tập lệnh khác đảm nhận vai trò của ứng dụng khách Do đó, không bao giờ có thể "mô phỏng" lệnh gọi POST bằng cách sử dụng hàm 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 202. Về cơ bản, có ba cách (chính xác) để mô phỏng yêu cầu POST như được mô tả bên dưới Trước khi chúng tôi tiếp tục, trước tiên hãy tóm tắt lại cách sử dụng phổ biến nhất của yêu cầu POST, tôi. e. trong một lần gửi biểu mẫu HTML. Khi dữ liệu được nhập vào biểu mẫu trên trang HTML và người dùng nhấn nút "Gửi", dữ liệu từ biểu mẫu sẽ được đóng gói dưới dạng yêu cầu POST được gửi đến máy chủ tại URI được chỉ định (URI hành động). Máy chủ sẽ trả lời lại yêu cầu POST (với dữ liệu được gửi lại từ mục tiêu của yêu cầu đăng) và trình duyệt sẽ hiển thị câu trả lời trong cửa sổ thay cho trang biểu mẫu HTML gốc Tuy nhiên, có một sự khác biệt quan trọng khi chúng tôi thực hiện việc này theo cách thủ công từ một tập lệnh (chạy trên máy chủ) so với dữ liệu gửi từ biểu mẫu ban đầu từ trình duyệt đến máy chủ. Sau khi đưa ra yêu cầu POST (xuất phát từ biểu mẫu HTML), trình duyệt sẽ tự động thay thế trang hiện tại bằng phản hồi từ yêu cầu POST dưới dạng trang "mới" (theo mặc định sử dụng cùng một cửa sổ đích như yêu cầu được tạo từ đó) Điều này không thể thực hiện được khi gửi yêu cầu đăng bài "giả mạo" tới một trang vì chúng tôi không phải là trình duyệt. Thay vào đó, những gì chúng ta sẽ thấy trong trình duyệt là trang gửi yêu cầu POST chứ không phải mục tiêu của yêu cầu đăng. Điều tốt nhất chúng tôi có thể thực hiện là hiển thị câu trả lời nội tuyến trong trang cuộc gọi, sau đó được hiển thị trong trình duyệt Điều này có nghĩa là không thể tạo yêu cầu POST và sau đó bằng cách nào đó hiển thị trực tiếp câu trả lời dưới dạng hình ảnh kết quả. Thay vào đó, những gì chúng tôi có thể làm là gửi dữ liệu tới tập lệnh hình ảnh (thông qua tiêu đề POST) và sau đó tập lệnh biểu đồ có thể ghi hình ảnh vào một tệp có thể truy cập được từ máy chủ Vì vậy, để tóm tắt. Những gì chúng ta có thể làm với yêu cầu đăng là gửi dữ liệu đến tập lệnh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 208 từ tập lệnh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 209. Sau đó, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 208 có thể thực thi một số câu lệnh, chẳng hạn như tạo biểu đồ và lưu trữ trên máy chủ. Hình ảnh được lưu trữ này sau đó có thể được đọc bằng tập lệnh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 209, chẳng hạn như thông qua thẻ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 202 Cách tạo yêu cầu POST Về nguyên tắc, có ba cách để xây dựng một yêu cầu POST để gửi dữ liệu đến một URI được chỉ định như hình bên dưới Sau khi chúng tôi thực hiện yêu cầu (với bất kỳ phương pháp nào trong ba phương pháp được hiển thị bên dưới), máy chủ sẽ trả lời lại bằng phản hồi do URI tạo. Phản hồi này là bất kỳ đầu ra nào được gửi bởi tập lệnh mà chúng tôi đang gửi yêu cầu của mình tới. Thông thường, đây chỉ là mã trả về cho biết yêu cầu có thành công hay không Hãy nhớ rằng đây là các cuộc gọi được thực hiện từ tập lệnh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 209 đang chạy trên máy chủ A đến tập lệnh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 208 đang chạy trên máy chủ B. Không có trình duyệt nào tham gia vào các cuộc gọi này ngoài yêu cầu ban đầu để chạy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 209. Hình bên dưới minh họa giai đoạn đầu tiên khi yêu cầu được gửi đến bên B Hình 13. 2. Giai đoạn yêu cầu của tiêu đề POST 1. Yêu cầu ban đầu được thực hiện bằng cách gọi một. tập lệnh php, e. g. http. //máy chủ cục bộ/a. php trong trình duyệt 2. Khi một. php script được thực thi, nó sẽ tạo tiêu đề POST và gọi script b. php trên máy chủ B (có thể là cùng một máy chủ). Vì trình duyệt đang hiển thị tập lệnh. php chúng tôi không bao giờ có thể thay đổi điều đó trực tiếp nhưng chúng tôi có thể hiển thị câu trả lời từ b. php trong trang được hiển thị bởi một. php Hình 13. 3. Giai đoạn trả lời của yêu cầu POST 3. các b. php trả lời trả lời bằng ví dụ linh hoạt lặp lại mã trả lời 4. Tập lệnh chạy trình duyệt nhận dữ liệu cuối cùng của nó (là phản hồi từ b. php) và sau đó hoàn thành yêu cầu ban đầu đã bắt đầu ở bước 1 Ghi chú. Tất cả các phương pháp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 206 bên dưới đều giả định rằng dữ liệu đã được mã hóa url
|