2010-07-26 13 views
7

Mam następujący przykładowy kod 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> 

Kod zawsze zwraca "NIE isset submit". Dlaczego tak się dzieje? Ponieważ sam skrypt upload3.php wywołuje się sam?

Odpowiedz

33

Nie masz swoją złożyć przycisk o nazwie:
Zmień

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

Do:

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

Ponieważ nie masz żadnego elementu formularza, którego właściwość name to submit.

Spróbuj użyć var_dump($_POST), aby zobaczyć zdefiniowane klucze.

Zwróć uwagę, że pliki są wyjątkiem; nie są one zawarte w $_POST; są przechowywane w systemie plików, a są to metadane (lokalizacja, nazwa itp.) w superglobalnym kodzie $_FILES.

2

Spróbuj patrząc na REQUEST_METHOD i sprawdzić, czy jest POST. Jest trochę ładniej.

+0

Problem z tej metody jest to, że nie wiem, które wejście wykonana czynność. Jeśli masz wiele przycisków przesyłania na tej samej stronie, nie wiesz, który użytkownik kliknął. – HoLyVieR

+0

Prawda. Cóż, jeśli masz te przyciski w oddzielnych formularzach, ale sam nie jestem fanem wielokrotnego przesyłania formularzy na tę samą stronę (inna forma zwykle ma inną akcję). Dwa inaczej nazwane przyciski przesyłania w tym samym formularzu będą wysyłane w żądaniu POST. – CharlesLeaf

+0

Dane przycisku przesyłania będą wysyłane tylko wtedy, gdy jest to formant uruchamiający przesłanie. – HoLyVieR

4

dwie rzeczy:

Będziemy chcieli, aby spróbować array_key_exists zamiast isset przy użyciu tablic. PHP może mieć dziwne zachowanie podczas używania isset na elemencie tablicy.

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

if (array_key_exists ('submit', $ _ POST)) {}

Po drugie, trzeba mieć atrybut nazwy na przycisku ("name = 'submit'")

+1

+1: Dla sugestii 'array_key_exists'. Dla tych, którzy się zastanawiają, 'array_key_exists' zwraca' TRUE', jeśli klucz istnieje niezależnie od wartości, podczas gdy 'isset' zwraca' TRUE', jeśli klucz istnieje, a wartość nie ma wartości 'NULL'. –

+0

Dla tablic form, to jednak nie ma większego znaczenia. Jeśli klucz istnieje, to także wartość - nawet jeśli jest to pusty ciąg. – cHao

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

powinny być

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

i że subname powinny być w $ _POST [”„]

będzie wyglądać

if (isset($_POST['subname'])) 
{ 
    echo "isset submit"; 
} 
else 
{ 
    echo "NOT isset submit"; 
} 
Powiązane problemy