2010-07-26 26 views
7

Tôi có upload3.php mẫu mã sau:

<html> 
<head> 
<title>PHP Form Upload</title> 
</head> 
<body> 

<form method='post' action='upload3.php' enctype='multipart/form-data'> 
    Select a File: 
    <input type='file' name='filename' size='10' /> 
    <input type='submit' value='Upload' /> 
</form> 

<?php 

if (isset($_POST['submit'])) 
{ 
    echo "isset submit"; 
} 
else 
{ 
    echo "NOT isset submit"; 
} 

?> 

</body> 
</html> 

Mã này luôn trả về "KHÔNG isset submit". Tại sao điều này xảy ra? Bởi vì cùng một tập lệnh upload3.php gọi chính nó?

Trả lời

33

Bạn không có nút gửi của bạn tên là:
Thay đổi

<input type='submit' value='Upload' /> 

Để:

<input type='submit' value='Upload' name="submit"/> 
3

Vì bạn không có bất kỳ phần tử biểu mẫu nào có thuộc tính namesubmit.

Hãy thử sử dụng var_dump($_POST) để xem các khóa được xác định.

Lưu ý rằng tệp là ngoại lệ; chúng không được bao gồm trong $_POST; chúng được lưu trữ trong hệ thống tệp và chúng là siêu dữ liệu (vị trí, tên, v.v.) nằm trong các siêu dữ liệu $_FILES.

2

Hãy thử nhìn vào REQUEST_METHOD và xem nếu nó là POST. Nó đẹp hơn một chút.

+0

Vấn đề với phương pháp đó, nó là bạn không biết đầu vào làm hành động. Nếu bạn có nhiều nút gửi trên cùng một trang, bạn sẽ không biết người dùng nào đã nhấp vào. – HoLyVieR

+0

Đúng. Vâng, nếu bạn có các nút trong các hình thức riêng biệt, nhưng bản thân tôi không phải là một fan hâm mộ của việc có nhiều hình thức gửi đến cùng một trang (hình thức khác nhau thường có một hành động khác nhau). Hai nút gửi có tên khác nhau trong cùng một biểu mẫu sẽ được gửi trong yêu cầu POST. – CharlesLeaf

+0

Dữ liệu nút gửi sẽ chỉ được gửi nếu đó là điều khiển khởi chạy quá trình gửi. – HoLyVieR

4

Hai điều:

Bạn sẽ muốn thử array_key_exists thay vì isset khi sử dụng mảng. PHP có thể có một số hành vi hinky khi sử dụng isset trên một phần tử mảng.

http://www.php.net/manual/en/function.array-key-exists.php

if (array_key_exists ('submit', $ _POST)) {}

Thứ hai, bạn cần có một thuộc tính tên trên nút của bạn ("name = 'submit'")

+1

+1: Đối với đề xuất 'array_key_exists'. Đối với những người đang tự hỏi, 'array_key_exists' trả về' TRUE' nếu khóa tồn tại bất kể giá trị trong khi 'isset' trả về' TRUE' nếu khóa tồn tại và giá trị không phải là 'NULL'. –

+0

Đối với mảng biểu mẫu, mặc dù, nó không thực sự quan trọng nhiều. Nếu một khóa tồn tại, thì giá trị - ngay cả khi nó chỉ là một chuỗi rỗng. – cHao

0
<input type='submit' value='Upload' /> 

nên

<input type='submit' value='Upload' name='subname'/> 

và subname mà phải ở trong $ _POST [' ']

nó sẽ trông giống như

if (isset($_POST['subname'])) 
{ 
    echo "isset submit"; 
} 
else 
{ 
    echo "NOT isset submit"; 
} 
Các vấn đề liên quan