Đầu vào php có nghĩa là gì?

PHP $_POST là một biến siêu toàn cầu PHP được sử dụng để thu thập dữ liệu biểu mẫu sau khi gửi biểu mẫu HTML với method="post". $_POST cũng được sử dụng rộng rãi để chuyển các biến

Ví dụ bên dưới hiển thị biểu mẫu có trường nhập và nút gửi. Khi người dùng gửi dữ liệu bằng cách nhấp vào "Gửi", dữ liệu biểu mẫu sẽ được gửi đến tệp được chỉ định trong thuộc tính hành động của

Khi người dùng điền vào biểu mẫu trên và nhấp vào nút gửi, dữ liệu biểu mẫu sẽ được gửi để xử lý thành tệp PHP có tên "welcome. php". Dữ liệu biểu mẫu được gửi bằng phương thức HTTP POST

Để hiển thị dữ liệu đã gửi, bạn chỉ cần lặp lại tất cả các biến. Sự đón chào. php" trông như thế này


Chào mừng

Địa chỉ email của bạn là.


Đầu ra có thể là một cái gì đó như thế này

Chào mừng John
Địa chỉ email của bạn là john. doe@ví dụ. com

Kết quả tương tự cũng có thể đạt được bằng cách sử dụng phương thức HTTP GET

Thí dụ



Tên.

E-mail.



Run Example »

và "welcome_get. php" trông như thế này


Chào mừng

Địa chỉ email của bạn là.


Đoạn mã trên khá đơn giản. Tuy nhiên, điều quan trọng nhất còn thiếu. Bạn cần xác thực dữ liệu biểu mẫu để bảo vệ tập lệnh của mình khỏi mã độc

Hãy nghĩ về BẢO MẬT khi xử lý các biểu mẫu PHP

Trang này không chứa bất kỳ xác thực biểu mẫu nào, nó chỉ hiển thị cách bạn có thể gửi và truy xuất dữ liệu biểu mẫu

Tuy nhiên, các trang tiếp theo sẽ chỉ ra cách xử lý các biểu mẫu PHP có tính đến bảo mật. Xác thực đúng dữ liệu biểu mẫu là rất quan trọng để bảo vệ biểu mẫu của bạn khỏi tin tặc và kẻ gửi thư rác

NHẬN so với. BƯU KIỆN

Cả GET và POST đều tạo một mảng [e. g. mảng [key1 => value1, key2 => value2, key3 => value3,. ]]. Mảng này chứa các cặp khóa/giá trị, trong đó khóa là tên của các điều khiển biểu mẫu và giá trị là dữ liệu đầu vào từ người dùng

Cả GET và POST đều được coi là $_GET và $_POST. Đây là các siêu toàn cầu, có nghĩa là chúng luôn có thể truy cập được, bất kể phạm vi - và bạn có thể truy cập chúng từ bất kỳ chức năng, lớp hoặc tệp nào mà không phải thực hiện bất kỳ điều gì đặc biệt

$_GET là một mảng các biến được truyền tới tập lệnh hiện tại thông qua các tham số URL

$_POST là một mảng các biến được truyền tới tập lệnh hiện tại thông qua phương thức HTTP POST

Khi nào thì sử dụng NHẬN?

Thông tin được gửi từ biểu mẫu bằng phương thức GET hiển thị cho mọi người [tất cả tên và giá trị biến được hiển thị trong URL]. GET cũng có giới hạn về lượng thông tin gửi. Giới hạn là khoảng 2000 ký tự. Tuy nhiên, vì các biến được hiển thị trong URL nên có thể đánh dấu trang. Điều này có thể hữu ích trong một số trường hợp

GET có thể được sử dụng để gửi dữ liệu không nhạy cảm

Ghi chú. KHÔNG BAO GIỜ được sử dụng GET để gửi mật khẩu hoặc thông tin nhạy cảm khác

Khi nào thì sử dụng POST?

Thông tin được gửi từ một biểu mẫu có phương thức POST sẽ ẩn đối với những người khác [tất cả các tên/giá trị được nhúng trong phần nội dung của yêu cầu HTTP] và không có giới hạn về lượng thông tin gửi

Ngoài ra, POST hỗ trợ chức năng nâng cao, chẳng hạn như hỗ trợ đầu vào nhị phân nhiều phần trong khi tải tệp lên máy chủ

Tuy nhiên, vì các biến không được hiển thị trong URL nên không thể đánh dấu trang

Các nhà phát triển thích POST để gửi dữ liệu biểu mẫu

Tiếp theo, hãy xem cách chúng tôi có thể xử lý biểu mẫu PHP theo cách an toàn

Bài tập PHP

Kiểm tra bản thân với các bài tập

Tập thể dục

Nếu biểu mẫu trong phần màu trắng bên dưới được gửi, làm thế nào bạn có thể, chào mừng. php, xuất giá trị từ trường "tên"?

php://input
php://temp
3 là luồng chỉ đọc cho phép bạn đọc dữ liệu thô từ phần thân yêu cầu. Trong trường hợp yêu cầu POST, tốt hơn là
php://input
php://temp
4 vì nó không phụ thuộc vào php đặc biệt. ini chỉ thị. Ngoài ra, đối với những trường hợp mà
php://input
php://temp
4 không được điền theo mặc định, đây là một giải pháp thay thế ít tốn bộ nhớ hơn để kích hoạt
php://input
php://temp
6. php. // đầu vào không khả dụng với
php://input
php://temp
7

Kiểm tra hướng dẫn. http. //php. net/thủ công/vi/trình bao bọc. php. php

Giải pháp liên quan

Php – Cách ngăn SQL injection trong PHP

Cách chính xác để tránh các cuộc tấn công SQL injection, bất kể bạn sử dụng cơ sở dữ liệu nào, là tách dữ liệu khỏi SQL, để dữ liệu vẫn là dữ liệu và sẽ không bao giờ được trình phân tích cú pháp SQL diễn giải thành các lệnh. Có thể tạo câu lệnh SQL với các phần dữ liệu được định dạng chính xác, nhưng nếu bạn không hiểu đầy đủ chi tiết, bạn nên luôn sử dụng câu lệnh đã chuẩn bị sẵn và truy vấn được tham số hóa. Đây là các câu lệnh SQL được máy chủ cơ sở dữ liệu gửi đến và phân tích cú pháp riêng biệt với bất kỳ tham số nào. Bằng cách này, kẻ tấn công không thể tiêm SQL độc hại

Về cơ bản, bạn có hai lựa chọn để đạt được điều này

  1. Sử dụng PDO [đối với mọi trình điều khiển cơ sở dữ liệu được hỗ trợ]

     $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];
    
     $stmt->execute[[ 'name' => $name ]];
    
     foreach [$stmt as $row] {
         // Do something with $row
     }
    
  2. Sử dụng MySQLi [dành cho MySQL]

     $stmt = $dbConnection->prepare['SELECT * FROM employees WHERE name = ?'];
     $stmt->bind_param['s', $name]; // 's' specifies the variable type => 'string'
    
     $stmt->execute[];
    
     $result = $stmt->get_result[];
     while [$row = $result->fetch_assoc[]] {
         // Do something with $row
     }
    

Nếu bạn đang kết nối với cơ sở dữ liệu không phải MySQL, thì có tùy chọn thứ hai dành riêng cho trình điều khiển mà bạn có thể tham khảo [ví dụ:

php://input
php://temp
8 và
php://input
php://temp
9 cho PostgreSQL]. PDO là tùy chọn phổ quát

Thiết lập kết nối chính xác

Lưu ý rằng khi sử dụng PDO để truy cập cơ sở dữ liệu MySQL, các câu lệnh chuẩn bị thực không được sử dụng theo mặc định. Để khắc phục điều này, bạn phải tắt mô phỏng các câu lệnh đã chuẩn bị. Một ví dụ về việc tạo kết nối bằng PDO là

$dbConnection = new PDO['mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'password'];

$dbConnection->setAttribute[PDO::ATTR_EMULATE_PREPARES, false];
$dbConnection->setAttribute[PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION];

Trong ví dụ trên, chế độ lỗi không thực sự cần thiết, nhưng bạn nên thêm nó vào. Bằng cách này, tập lệnh sẽ không dừng lại với số

php://input
php://temp
00 khi có sự cố xảy ra. Và nó mang lại cho nhà phát triển cơ hội
php://input
php://temp
01 bất kỳ [các] lỗi nào
php://input
php://temp
02n thành
php://input
php://temp
03

Tuy nhiên, điều bắt buộc là dòng

php://input
php://temp
04 đầu tiên, yêu cầu PDO tắt các câu lệnh đã chuẩn bị được mô phỏng và sử dụng các câu lệnh đã chuẩn bị thực sự. Điều này đảm bảo rằng câu lệnh và các giá trị không được PHP phân tích cú pháp trước khi gửi nó đến máy chủ MySQL [khiến kẻ tấn công không có cơ hội tiêm SQL độc hại]

Mặc dù bạn có thể đặt

php://input
php://temp
05 trong các tùy chọn của hàm tạo, điều quan trọng cần lưu ý là các phiên bản 'cũ' của PHP [trước 5. 3. 6] âm thầm bỏ qua tham số bộ ký tự trong DSN

Giải trình

Câu lệnh SQL bạn chuyển đến

php://input
php://temp
06 được máy chủ cơ sở dữ liệu phân tích cú pháp và biên dịch. Bằng cách chỉ định các tham số [hoặc một tham số
php://input
php://temp
07 hoặc một tham số được đặt tên như
php://input
php://temp
08 trong ví dụ trên], bạn cho công cụ cơ sở dữ liệu biết nơi bạn muốn lọc. Sau đó, khi bạn gọi
php://input
php://temp
09, câu lệnh đã chuẩn bị được kết hợp với các giá trị tham số mà bạn chỉ định

Điều quan trọng ở đây là các giá trị tham số được kết hợp với câu lệnh đã biên dịch, không phải là chuỗi SQL. SQL injection hoạt động bằng cách lừa tập lệnh bao gồm các chuỗi độc hại khi nó tạo SQL để gửi đến cơ sở dữ liệu. Vì vậy, bằng cách gửi SQL thực riêng biệt với các tham số, bạn sẽ hạn chế rủi ro kết thúc bằng thứ mà bạn không có ý định

Bất kỳ tham số nào bạn gửi khi sử dụng câu lệnh đã chuẩn bị sẽ chỉ được coi là chuỗi [mặc dù công cụ cơ sở dữ liệu có thể thực hiện một số tối ưu hóa để tất nhiên, tham số cũng có thể kết thúc dưới dạng số]. Trong ví dụ trên, nếu biến

 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
0 chứa
 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
1, kết quả sẽ chỉ là tìm kiếm chuỗi
 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
2 và bạn sẽ không nhận được một bảng trống

Một lợi ích khác của việc sử dụng các câu lệnh đã chuẩn bị là nếu bạn thực hiện cùng một câu lệnh nhiều lần trong cùng một phiên thì nó sẽ chỉ được phân tích cú pháp và biên dịch một lần, giúp bạn tăng tốc độ

Ồ, và vì bạn đã hỏi về cách thực hiện cho phần chèn, đây là một ví dụ [sử dụng PDO]

php://input
php://temp
3

Câu lệnh đã chuẩn bị có thể được sử dụng cho các truy vấn động không?

Mặc dù bạn vẫn có thể sử dụng các câu lệnh đã chuẩn bị cho các tham số truy vấn, nhưng bản thân cấu trúc của truy vấn động không thể được tham số hóa và một số tính năng truy vấn nhất định không thể được tham số hóa

Đối với những trường hợp cụ thể này, điều tốt nhất cần làm là sử dụng bộ lọc danh sách trắng để hạn chế các giá trị có thể

php://input
php://temp
4

Php – Bảng liệt kê trên PHP

Tùy thuộc vào trường hợp sử dụng, tôi thường sử dụng một cái gì đó đơn giản như sau

php://input
php://temp
5

Tuy nhiên, các trường hợp sử dụng khác có thể yêu cầu xác thực nhiều hơn các hằng số và giá trị. Dựa trên các nhận xét bên dưới về sự phản ánh và một vài ghi chú khác, đây là một ví dụ mở rộng có thể phục vụ tốt hơn cho nhiều trường hợp hơn

php://input
php://temp
6

Bằng cách tạo một lớp enum đơn giản mở rộng BasicEnum, giờ đây bạn có khả năng sử dụng các phương thức để xác thực đầu vào đơn giản

php://input
php://temp
0

Như một lưu ý phụ, bất cứ khi nào tôi sử dụng sự phản chiếu ít nhất một lần trên lớp tĩnh/const nơi dữ liệu sẽ không thay đổi [chẳng hạn như trong một enum], tôi lưu trữ kết quả của các cuộc gọi phản chiếu đó, vì mỗi lần sử dụng các đối tượng phản chiếu mới

Bây giờ hầu hết mọi người cuối cùng đã nâng cấp lên ít nhất 5. 3 và

 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
3 có sẵn, đó chắc chắn cũng là một lựa chọn khả thi--miễn là bạn không bận tâm đến khái niệm truyền thống không trực quan về việc có các khởi tạo enum thực tế trong cơ sở mã của bạn. Trong ví dụ trên,
 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
4 và
 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
5 hoàn toàn không thể được khởi tạo, chúng cũng không nên

Đầu vào Đầu ra trong php là gì?

php. //đầu ra cho phép bạn ghi vào cơ chế bộ đệm đầu ra giống như print[] và echo[] . php. // đầu vào cho phép bạn đọc dữ liệu POST thô. Nó là một giải pháp thay thế tốn ít bộ nhớ hơn cho $HTTP_RAW_POST_DATA và không cần bất kỳ php đặc biệt nào. ini chỉ thị.

Luồng php là gì?

Giới thiệu luồng PHP . Theo định nghĩa đơn giản nhất, luồng là một đối tượng tài nguyên thể hiện hành vi có thể truyền được. the way of generalizing file, network, data compression, and other operations which share a common set of functions and uses. In its simplest definition, a stream is a resource object which exhibits streamable behavior.

Trình bao bọc php là gì?

Trình bao bọc là mã bổ sung cho luồng biết cách xử lý các giao thức/mã hóa cụ thể . Ví dụ: trình bao bọc http biết cách dịch URL thành HTTP/1. 0 yêu cầu tệp trên máy chủ từ xa.

Chủ Đề