mảng php $ _POST trống khi gửi biểu mẫu


99

Tôi có một CMS tùy chỉnh mà tôi đã xây dựng hoạt động hoàn hảo trên hộp phát triển của tôi (Ubuntu / PHP5 + / MySQL5 +).

Tôi vừa chuyển nó vào hộp sản xuất cho khách hàng của mình và bây giờ tất cả các biểu mẫu gửi đang hiển thị dưới dạng mảng $ _POST trống.

Tôi đã tìm thấy một mẹo để xác minh dữ liệu đang thực sự được chuyển bằng cách sử dụng file_get_contents('php://input');và dữ liệu đang hiển thị tốt ở đó - các mảng $_POST/ $_REQUESTluôn trống.

Tôi cũng đã xác minh các tiêu đề loại nội dung cũng chính xác thông qua firebug ( application/x-www-form-urlencoded; charset=utf-8).

Vấn đề này đang xảy ra bất kể biểu mẫu được gửi qua AJAX hay gửi biểu mẫu thông thường.

Bất kỳ trợ giúp nào cũng được đánh giá rất cao!

php  arrays  forms  post 

Kiểm tra post_max_size: giá trị phải được đặt là 8M, không phải 8MB. Trong trường hợp mới nhất, bạn sẽ không thấy bất kỳ lỗi nào, nhưng kích thước $ _POST sẽ được đặt thành 0
Sergei Karpov

Câu trả lời:


186

Tôi biết câu hỏi này là về ĐĂNG qua Biểu mẫu, nhưng đến đây để tìm câu trả lời cho vấn đề tương tự khi ĐĂNG với kiểu nội dung JSON. Tôi đã tìm thấy câu trả lời và muốn chia sẻ vì nó khiến tôi mất nhiều thời gian.

Khi sử dụng kiểu nội dung JSON, mảng $ _POST sẽ không được điền (chỉ với các biểu mẫu nhiều phần mà tôi tin tưởng)

Đây là những gì đã làm để khắc phục sự cố:

$rest_json = file_get_contents("php://input");
$_POST = json_decode($rest_json, true);

hy vọng điều này sẽ giúp ai đó!


Việc này làm cho tinh thần - nó cố định điều khiển hàng loạt cập nhật của tôi :)
Martin Zeitler

2
Một cách khác là thay đổi Content-Typetiêu đề thành application/x-www-form-urlencodedvà sau đó tuần tự hóa dữ liệu của bạn với $.param(dataObject). Điều đó sẽ giúp ích.
ŁukaszBachman

1
@ ŁukaszBachman Làm thế nào để làm điều đó nếu DataObject là một cái gì đó giống như ........ title=something&body=anything. Tôi muốn lấy tiêu đề và nội dung. $ dataobject ["title"] trả về trống. Trong trường hợp của tôi, $ _POST trống. Và cách duy nhất để lấy nó bằng cách sử dụng file_get_contents ("php: // input") ... ngoại trừ việc nó không được mã hóa json.
Khurshid Alam

Điều này rất hữu ích. Điều kỳ lạ là tôi không gặp khó khăn gì khi gửi Json trên máy phát triển của mình, nhưng lại làm với máy sản xuất.
Simon H


86

Đây là một nguyên nhân có thể xảy ra khác - biểu mẫu của tôi đã được gửi tới domain.com mà không có WWW. và tôi đã thiết lập chuyển hướng tự động để thêm "WWW." Mảng $ _POST đã được làm trống trong quá trình này. Vì vậy, để khắc phục, tất cả những gì tôi phải làm là gửi đến www.domain.com


24
Khỉ thật, việc viết lại url trong của tôi htaccesslà nguyên nhân khiến POST không hoạt động. Tôi đã tự động thêm dấu gạch chéo vào tất cả các url, nhưng trong mã là HÀNH ĐỘNG, tôi đang sử dụng một url không có dấu gạch chéo. Câu trả lời của bạn đã giúp ích, như tôi chưa bao giờ nghĩ để kiểm tra .htaccess. +1
binar

Tôi đã chuyển tiếp miền (với mặt nạ) bằng Godaddy và đây dường như là nguồn gốc của vấn đề.
Chris Prince

1
Tôi cũng gặp sự cố tương tự, nó đến từ .htaccesstệp của tôi . Nó đã loại bỏ .phptiện ích mở rộng khỏi URL và biểu mẫu của tôi đã POSTnhập vào URL có tiện ích mở rộng.
Emanuel Vintilă

25

Tôi đã có một vấn đề tương tự. Hóa ra là một sửa chữa đơn giản. Ở dạng tôi đã có

<form action = "directory" method = "post">

nơi thư mục là tên của ... thư mục. Mảng POST của tôi hoàn toàn trống. Khi tôi nhìn vào url trong trình duyệt của mình, nó được hiển thị với một dấu gạch chéo ở cuối.

Thêm dấu gạch chéo vào cuối hành động của tôi đã thực hiện thủ thuật -

<form action = "directory /" method = "post">

Mảng $ _POST của tôi đã đầy trở lại!


1
Đây không phải là một bản sửa lỗi, chẳng hạn như trên CakePHP, có hệ thống định tuyến tốt, lỗi này không thành công, (ý tôi không phải là Cake không thành công), có thể cách tiếp cận vấn đề này không phải là khuôn khổ hoặc các tệp .php, nhưng một số cấu hình trên apache, tôi muốn điều tra thêm về vấn đề này. Nó khá thú vị.
James

Trên một lưu ý tương tự, tôi đã gặp vấn đề tương tự với OP, nhưng chỉ khi <form>thẻ không có namethuộc tính và chỉ trong IE.
jkt123

13

Đảm bảo rằng, trong php.ini:

  • track_vars (nó chỉ có sẵn trên các phiên bản PHP rất cũ) được đặt thành On
  • variables_order chứa bức thư P
  • post_max_size được đặt thành giá trị hợp lý (ví dụ: 8 MB)
  • (nếu sử dụng miếng dán suhosin) suhosin.post.max_varssuhosin.request.max_varsđủ lớn.

Tôi cho rằng gợi ý thứ hai của tôi sẽ giải quyết được vấn đề của bạn.


1
Cảm ơn MrMage, đánh giá cao cái nhìn sâu sắc của bạn và sẽ kiểm tra các cài đặt ini đó và cho bạn biết nếu điều đó có thực hiện thủ thuật hay không. Cảm ơn!

1
cài đặt "post_max_size" là trình chiếu của tôi. Tôi đang tải lên một tệp lớn trong khi gửi biểu mẫu và cài đặt này chứa ít giá trị hơn. Vì vậy, tôi nhận được một mảng bài viết trống khi tôi gửi biểu mẫu.
shasi kanth

9

Tôi nhận thấy rằng khi đăng từ HTTP lên HTTPS, nó $_POSTtrống. Điều này đã xảy ra trong khi kiểm tra biểu mẫu, nhưng tôi đã mất một lúc cho đến khi tôi nhận ra điều đó.


5

Tôi đã gặp một vấn đề tương tự nhưng hơi khác và phải mất 2 ngày để hiểu vấn đề.

  • Trong trường hợp của tôi, mảng POST cũng trống.

  • Sau đó, kiểm tra với file_get_contents ('php: // input'); và điều đó cũng trống rỗng.

Sau đó, tôi thấy rằng trình duyệt đã không yêu cầu xác nhận gửi lại dữ liệu biểu mẫu sau Nếu tôi làm mới trang được tải sau khi gửi POST. Nó đã trực tiếp làm mới trang. Nhưng khi tôi thay đổi URL của biểu mẫu thành một URL khác, nó đang chuyển POST đúng cách và yêu cầu gửi lại dữ liệu khi cố gắng làm mới trang.

Sau đó, tôi đã kiểm tra xem có gì sai với URL thực. Không có lỗi với URL, tuy nhiên, nó đã trỏ đến một thư mục không có index.php trong URL và tôi đang kiểm tra POST tại index.php.

Ở đây tôi nghi ngờ việc chuyển hướng từ / sang /index.php khiến dữ liệu POST bị mất và URL được kiểm tra với việc nối thêm index.php vào URL.

Điều đó đã hoạt động.

Đăng nó ở đây để ai đó sẽ thấy nó hữu ích.


1
Tôi đã gặp vấn đề tương tự, không có '/' ở cuối url, không có gì tồn tại trong $ _REQUEST, nhưng với '/' hoặc '/index.php', tất cả dữ liệu đã đăng đều tồn tại trong $ _REQUEST. Nó có thể là cài đặt nginx của tôi hoặc một số thứ khác!
MohaMad

4

Không có một giải pháp thanh lịch vào thời điểm này mà muốn chia sẻ những phát hiện của tôi để những người khác gặp vấn đề này tham khảo trong tương lai. Nguồn gốc của sự cố là 2 giá trị php bị ghi đè trong tệp .htaccess. Tôi chỉ cần thêm 2 giá trị này để tăng giới hạn kích thước tệp cho tệp tải lên từ 8MB mặc định lên một cái gì đó lớn hơn - Tôi nhận thấy rằng chỉ cần có 2 giá trị này trong tệp htaccess, dù lớn hơn hay nhỏ hơn mặc định, đều gây ra sự cố .

php_value post_max_size xxMB
php_value upload_max_filesize xxMB

Tôi đã thêm các biến bổ sung để hy vọng tăng giới hạn cho tất cả các vars suhosin.post.xxx/suhosin.upload.xxx nhưng chúng không có bất kỳ tác dụng nào với sự cố này.

Tóm lại, tôi không thể thực sự giải thích "tại sao" ở đây, nhưng đã xác định được nguyên nhân gốc rễ. Cảm giác của tôi là đây cuối cùng là một vấn đề suhosin / htaccess, nhưng tiếc là một vấn đề mà tôi không thể giải quyết ngoài việc loại bỏ 2 giá trị ghi đè php ở trên.

Hy vọng điều này sẽ giúp ai đó trong tương lai khi tôi đã mất một vài giờ để tìm ra điều này. Cảm ơn tất cả những người đã dành thời gian để giúp tôi làm việc này (MrMage, Andrew)


Có thể bạn nên hỏi câu hỏi này trên Serverfault, đặc biệt nếu vấn đề nằm ở thiết lập máy chủ / htaccess.
David nói hãy phục hồi Monica vào

5
Nếu tôi không nhầm, kích thước nên được quy định như 'XXM', và không phải là 'xxMB', vì vậy tôi tự hỏi, nếu mà có thể có cái gì để làm với nó ...
JC Inacio

4

Tôi có thể giải quyết vấn đề bằng cách sử dụng enctype = "application / x-www-form-urlencoded" vì mặc định là "text / pure". Khi bạn kiểm tra $ DATA, bộ phân tách là một không gian cho "văn bản / đồng bằng" và một ký tự đặc biệt cho "urlencoded".

Trân trọng Frank


4

Việc enable_post_data_readingtắt cài đặt sẽ gây ra điều này. Theo tài liệu:

enable_post_data_reading

Việc tắt tùy chọn này sẽ khiến $ _POST và $ _FILES không được điền. Cách duy nhất để đọc postdata sau đó sẽ là thông qua trình bao bọc luồng đầu vào php: //. Điều này có thể hữu ích cho các yêu cầu proxy hoặc để xử lý dữ liệu POST theo cách hiệu quả về bộ nhớ.


4

Nếu bạn đang đăng lên tệp index.php trong thư mục ví dụ /api/index.php, hãy đảm bảo rằng trong biểu mẫu của bạn, bạn chỉ định thư mục đầy đủ cho tệp, ví dụ:

Điều này

<form method="post" action="/api/index.php"> 
</form>

HOẶC LÀ

<form method="post" action="/api/"> 
</form>

làm.

Nhưng điều này không thành công

<form method="post" action="/api"> 
</form>

Tôi thực sự hoàn toàn ngược lại. Tôi phát hiện ra rằng /my_urisẽ hoạt động nhưng không /my_uri/.
Link 14

có cùng một vấn đề. có vẻ như apache hoặc nginx thêm chuyển hướng từ / api đến / api /
John Smith

4
<form action="test.php" method="post">
                        ^^^^^^^^^^^^^

Được rồi, điều này thật ngu ngốc và tôi sẽ tự làm xấu mình trước công chúng, nhưng tôi đã viết một đoạn mã thử nghiệm nhỏ cho một thứ gì đó trong PHP và khi $_POSTmảng của tôi trống, StackOverflow là nơi đầu tiên tôi xem xét và tôi không tìm thấy câu trả lời mình cần .

Tôi đã chỉ viết

<form action="test.php">

và quên chỉ định phương thức là hiện hữu POST!

Tôi chắc chắn ai đó sẽ phát hiện ra, nhưng nếu điều này giúp người khác làm điều tương tự, thì tôi không phiền! Tất cả chúng ta đều làm điều đó theo thời gian!


không thể tin rằng tôi cũng quên điều đó! Tôi chỉ đang thử một máy chủ mới và nghĩ rằng đó là một cái gì đó do cấu hình ... dù sao, cảm ơn vì đã nhắc nhở!
Samuel Aiala Ferreira

4

Trong trường hợp của tôi, khi đăng từ HTTP lên HTTPS, $ _POST sẽ trống. Vấn đề là biểu mẫu có một hành động như thế này //example.com Khi tôi sửa url thành https://example.com , sự cố đã biến mất.


1
Tôi nghĩ là một cái gì đó liên quan đến cách máy chủ được thiết lập. Tôi đang gặp vấn đề tương tự khi sử dụng GoDaddy làm máy chủ. Giải pháp này không giải quyết được vấn đề.
acarlstein

Giải pháp này đã giải quyết vấn đề của tôi. Tôi đã có một headeach tốt đẹp.
gokaysatir

3

vấn đề tương tự ở đây!

tôi đã cố gắng kết nối với mã máy chủ cục bộ của mình thông qua yêu cầu gửi bài trong người đưa thư và vấn đề này đã làm lãng phí thời gian của tôi rất nhiều!

đối với bất kỳ ai sử dụng dự án cục bộ (ví dụ: người đưa thư): sử dụng địa chỉ IPv4 của bạn (nhập ipconfig trong cmd) thay vì từ khóa "localhost". trong trường hợp của tôi:

trước:

localhost/app/login

sau:

192.168.1.101/app/login

Người đưa thư đã cho tôi một số vấn đề với các giá trị json được cạo có dấu ngoặc kép hoặc dấu cách. Nó mong đợi một định dạng cụ thể.
Tom Anderson

2

THAM KHẢO: http://www.openjs.com/articles/ajax_xmlhttp_using_post.php

Phương thức POST

Chúng tôi sẽ thực hiện một số sửa đổi để phương thức POST sẽ được sử dụng khi gửi yêu cầu ...

var url = "get_data.php";
var params = "lorem=ipsum&name=binny";
http.open("POST", url, true);

//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");

http.onreadystatechange = function() {//Call a function when the state changes.
  if(http.readyState == 4 && http.status == 200) {
    alert(http.responseText);
  }
}
http.send(params);

Một số tiêu đề http phải được đặt cùng với bất kỳ yêu cầu ĐĂNG nào. Vì vậy, chúng tôi đặt chúng trong những dòng này ...

http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");

Với những dòng trên, về cơ bản chúng ta đang nói rằng dữ liệu được gửi ở định dạng của một biểu mẫu gửi. Chúng tôi cũng cung cấp độ dài của các tham số mà chúng tôi đang gửi.

http.onreadystatechange = function() {//Call a function when the state changes.
  if(http.readyState == 4 && http.status == 200) {
    alert(http.responseText);
  }
}

Chúng tôi đặt một trình xử lý cho sự kiện thay đổi 'trạng thái sẵn sàng'. Đây là cùng một trình xử lý mà chúng tôi đã sử dụng cho phương thức GET. Bạn có thể sử dụng http.responseText tại đây - chèn vào một div bằng innerHTML (AHAH), đánh giá nó (JSON) hoặc bất kỳ thứ gì khác.

http.send(params);

Cuối cùng, chúng tôi gửi các thông số với yêu cầu. Url đã cho chỉ được tải sau khi dòng này được gọi. Trong phương thức GET, tham số sẽ là giá trị null. Nhưng trong phương thức POST, dữ liệu được gửi sẽ được gửi dưới dạng đối số của hàm gửi. Biến params được khai báo ở dòng thứ hai là lorem=ipsum&name=binny- vì vậy chúng tôi gửi hai tham số - 'lorem' và 'name' với các giá trị 'ipsum' và 'binny' tương ứng.


1

Trong trường hợp của tôi, đó là do tôi đang sử dụng jQuery để tắt tất cả các đầu vào trên trang ngay trước khi sử dụng jQuery để gửi biểu mẫu. Vì vậy, tôi đã thay đổi "vô hiệu hóa mọi đầu vào ngay cả các loại 'ẩn'":

$(":input").attr("disabled","disabled"); 

để "chỉ vô hiệu hóa các đầu vào loại 'nút'":

$('input[type=button]').attr('disabled',true);

Điều này để người dùng không thể vô tình nhấn nút 'đi' hai lần và nâng cấp DB của chúng tôi! Có vẻ như nếu bạn đặt thuộc tính 'vô hiệu hóa' trên một đầu vào biểu mẫu loại 'ẩn', giá trị của chúng sẽ không được gửi đi nếu biểu mẫu được gửi!


1

Đối với tôi, .htaccess đã chuyển hướng khi mod_rewrite chưa được cài đặt. Cài đặt mod_rewite và tất cả đều ổn.

Đặc biệt:

<IfModule !mod_rewrite.c>
  ErrorDocument 404 /index.php
</Ifmodule>

đang thực thi.


1

Tôi vừa dành hàng giờ để khắc phục sự cố tương tự. Vấn đề trong trường hợp của tôi, là

max_input_vars = "1000"

theo mặc định, trong php.ini. Tôi đã có một hình thức thực sự lớn mà không cần tải lên. php.ini được đặt thành upload_max_filesize = "100M" và post_max_size = "108M" và nó chắc chắn không phải là vấn đề trong trường hợp của tôi. Hành vi PHP cũng giống như vậy đối với max_input_vars khi nó vượt quá 1000 biến trong biểu mẫu. Nó trả về và làm trống mảng _POST. Tôi ước mình có thể tìm thấy điều đó một giờ, vài giờ trước.


1

Tôi biết điều này là cũ, nhưng muốn chia sẻ giải pháp của tôi.

Trong trường hợp của tôi, vấn đề là trong .htaccess của tôi khi tôi thêm các biến để tăng giới hạn tải lên tối đa của PHP. Mã của tôi như thế này:

php_value post_max_size 50MB
php_value upload_max_filesize 50MB

Sau đó, tôi nhận thấy rằng các giá trị sẽ giống như xxM chứ không phải xxMB và khi tôi thay đổi nó thành:

php_value post_max_size 50M
php_value upload_max_filesize 50M

bây giờ $ _POST của tôi đã trả lại dữ liệu như bình thường trước đây. Mong rằng điều này sẽ giúp ai đó trong tương lai.


0

Ngoài bài đăng của MRMage:

Tôi đã phải đặt biến này để giải quyết vấn đề một số $_POSTbiến (với một mảng lớn> 1000 mục) đã biến mất:

suhosin.request.max_vars = 2500

" request", không phải " post" là giải pháp ...


0

Có lẽ không phải là giải pháp thuận tiện nhất, nhưng tôi đã phát hiện ra rằng nếu tôi đặt actionthuộc tính biểu mẫu thành miền gốc, index.php có thể được truy cập và nhận các biến đã đăng. Tuy nhiên, nếu tôi đặt URL được viết lại làm hành động, nó không hoạt động.


0

Điều này tương tự như những gì @icesar đã nói .

Nhưng tôi đã cố gắng đăng nội dung lên api của mình, nằm trong đó site/api/index.php, chỉ đăng lên site/apivì nó được tự chuyển sang index.php. Tuy nhiên, điều này dường như gây ra một cái gì đó lộn xộn, vì của tôi $_POSTđã được làm trống ngay lập tức. Đơn giản chỉ cần đăng site/api/index.phptrực tiếp để giải quyết nó.


0

Vấn đề của tôi là tôi đang sử dụng <base>thẻ HTML để thay đổi URL cơ sở của trang web thử nghiệm của mình. Sau khi tôi xóa thẻ đó khỏi tiêu đề, $_POSTdữ liệu sẽ quay trở lại.


0

Trong trường hợp của tôi (trang php trên máy chủ OVH lẫn nhau) enctype="text/plain"không hoạt động ( $_POSTvà tương ứng $_REQUESTlà trống), các ví dụ khác bên dưới hoạt động. `

<form action="?" method="post">
<!-- in this case, my google chrome 45.0.2454.101 uses -->
<!--     Content-Type:application/x-www-form-urlencoded -->
    <input name="say" value="Hi">
    <button>Send my greetings</button>
</form>

<form action="?" method="post" enctype="application/x-www-form-urlencoded">
    <input name="say" value="Hi">
    <button>Send my application/x-www-form-urlencoded greetings</button>
</form>

<form action="?" method="post"  enctype="multipart/form-data">
    <input name="say" value="Hi">
    <button>Send my multipart/form-data greetings</button>
</form>

<form action="?" method="post" enctype="text/plain"><!-- not working -->
    <input name="say" value="Hi">
    <button>Send my text/plain greetings</button>
</form>

`

Thêm ở đây: method = "post" enctype = "text / trơn" không tương thích?


0

Tôi gặp lỗi sau từ Mod Security:

Access denied with code 500 (phase 2). Pattern match "((select|grant|delete|insert|drop|alter|replace|truncate|update|create|rename|describe)[[:space:]]+[A-Z|a-z|0-9|\*| |\,]+[[:space:]]+(from|into|table|database|index|view)[[:space:]]+[A-Z|a-z|0-9|\*| |\,]|UNION SELECT.*\'.*\'.*,[0-9].*INTO.*FROM)" at REQUEST_BODY. [file "/usr/local/apache/conf/modsec2.user.conf"] [line "345"] [id "300013"] [rev "1"] [msg "Generic SQL injection protection"] [severity "CRITICAL"]

Sau khi tôi xóa cấu hình bảo mật mod của mình để kiểm tra, tất cả đều hoạt động như mong đợi. Bây giờ tôi chỉ cần sửa đổi các quy tắc của mình để giữ an toàn nhưng đủ linh hoạt cho nhu cầu của tôi :)


0

Đảm bảo rằng bạn sử dụng name = " your_variable_name " trong thẻ đầu vào.

Tôi sử dụng nhầm id = " your_variable_name ".

Tôi đã dành nhiều thời gian để bắt lỗi.


0

Đảm bảo rằng thuộc nametính của mỗi trường được xác định.

Điều này tạo cho bạn một POST trống trên PHP

<input type="text" id="Phone">

Nhưng, điều này sẽ hoạt động

<input type="text" name="Phone" id="Phone">

Tôi nghĩ là một cái gì đó liên quan đến cách máy chủ được thiết lập. Tôi đang gặp vấn đề tương tự khi sử dụng GoDaddy làm máy chủ. Giải pháp này không giải quyết được vấn đề.
acarlstein

-1

OK, tôi nghĩ rằng tôi nên đặt trường hợp của mình ở đây .... Tôi đã nhận được mảng bài đăng trống trong các trường hợp cụ thể .. Biểu mẫu hoạt động tốt, nhưng một số lần người dùng phàn nàn rằng họ nhấn nút gửi và không có gì xảy ra ... Sau khi tìm hiểu một thời gian, tôi phát hiện ra rằng công ty lưu trữ của tôi có một mô-đun bảo mật kiểm tra đầu vào của người dùng và xóa toàn bộ mảng bài đăng (không chỉ dữ liệu độc hại) nếu phát hiện ra như vậy. Trong ví dụ của tôi, một giáo viên toán đã cố gắng nhập phương trình: dy + dx + 0 = 0; và dữ liệu đã bị xóa hoàn toàn.

Để khắc phục điều này, tôi chỉ khuyên anh ấy bây giờ nên nhập dữ liệu vào vùng văn bản là dy + dx + 0 = zero, và bây giờ nó hoạt động .... Điều này có thể giúp ai đó tiết kiệm thời gian ..


5
Yêu cầu người dùng thực hiện cho phép đối với mã bị lỗi không phải là người khởi động.
freeworlder

Nó không thực sự là mã bị lỗi nhưng bạn có thể cân nhắc một nhà cung cấp dịch vụ lưu trữ mới. Hoặc đăng đầu vào ở một biểu mẫu khác, ví dụ: mã hóa URL HTML.
Tom Anderson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.