2010-07-26 31 views
7

我有下面的代碼示例upload3.php:

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

代碼總是返回 「NOT isset提交」。 這是爲什麼發生?因爲相同的腳本upload3.php自己調用?

回答

33

你沒有你的提交按鈕命名爲:
變化

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

要:

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

因爲您沒有任何表單元素,其name屬性爲submit。請使用var_dump($_POST)來查看已定義的鍵。

注意文件是一個例外;他們不包括在$_POST;它們存儲在文件系統中,它們的元數據(位置,名稱等)位於超全局的$_FILES中。

2

嘗試尋找在REQUEST_METHOD,看看它是否是POST。這有點更好。

+0

與方法的問題,那就是你不知道哪個輸入做出的動作。如果您在同一頁面上有很多提交按鈕,您將無法知道用戶點擊了哪個按鈕。 – HoLyVieR 2010-07-26 18:21:03

+0

是的。那麼,如果你有不同形式的按鈕,但我自己並不喜歡將多個表單提交到同一頁面(不同的表單通常有不同的動作)。兩個不同名稱的提交按鈕將在POST請求中發送。 – CharlesLeaf 2010-07-26 18:40:39

+0

如果提交按鈕數據是啓動提交的控件,則只會發送。 – HoLyVieR 2010-07-26 18:50:54

4

兩件事情:

你會想用數組時嘗試array_key_exists代替isset的。在數組元素上使用isset時,PHP可能會有一些拙劣的行爲。

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

如果(array_key_exists( '提交',$ _ POST)){}

其次,你需要一個name屬性上的按鈕( 「NAME = '提交'」)

+1

+1:對於'array_key_exists'建議。對於那些想知道的人來說,如果key存在與值無關,'array_key_exists'返回'TRUE';而如果key存在並且值不是'NULL',則'isset'返回'TRUE'。 – 2011-09-12 10:45:19

+0

對於表單數組,雖然它並不重要。如果一個鍵存在,那麼值也是如此 - 即使它只是一個空字符串。 – cHao 2013-05-15 16:47:46

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

應該

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

和子名稱應該在$ _ POST [」「]

它看起來像

if (isset($_POST['subname'])) 
{ 
    echo "isset submit"; 
} 
else 
{ 
    echo "NOT isset submit"; 
} 
相關問題