2010-07-26 34 views
7

tengo el siguiente ejemplo de código 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> 

El código siempre devuelve "NO presente isset". ¿Por qué sucede esto? Porque el mismo script upload3.php se llama a sí mismo?

Respuesta

33

Usted no tiene el botón de enviar nombre:
Cambio

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

Para:

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

Porque no tiene ningún elemento de formulario cuya propiedad name es submit.

Intente usar var_dump($_POST) para ver las claves que están definidas.

Observe que los archivos son una excepción; no están incluidos en $_POST; están almacenados en el sistema de archivos y son metadatos (ubicación, nombre, etc.) en el superglobal $_FILES.

2

Trate de buscar en el REQUEST_METHOD y ver si es POST. Es un poco mejor.

+0

El problema con este método, es que usted no sabe qué entrada hecha la acción. Si tiene muchos botones para enviar en la misma página, no sabrá en cuál hizo clic el usuario. – HoLyVieR

+0

Es cierto. Bien, si tiene esos botones en formularios separados, pero yo no soy partidario de que múltiples formularios se envíen a la misma página (la forma diferente generalmente tiene una acción diferente). Se enviarán dos botones de envío de nombre diferente en la misma forma en la solicitud POST. – CharlesLeaf

+0

Los datos del botón de envío solo se enviarán si es el control el que inicia el envío. – HoLyVieR

4

dos cosas:

que querrá tratar array_key_exists en lugar de isset Cuando se usan matrices. PHP puede tener algún comportamiento hinky cuando se utiliza isset en un elemento de matriz.

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

si (array_key_exists ('enviar', $ _POST)) {}

En segundo lugar, se necesita un atributo de nombre en su botón ("name = 'submit'")

+1

+1: para la sugerencia 'array_key_exists'. Para aquellos que se preguntan, 'array_key_exists' devuelve' TRUE' si la clave existe independientemente del valor, mientras que 'isset' devuelve' TRUE' si la clave existe y el valor no es 'NULL'. –

+0

Para matrices de formularios, sin embargo, realmente no importa mucho. Si existe una clave, también lo hace el valor, incluso si solo es una cadena vacía. – cHao

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

debería haber

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

y que subnombre debería estar en $ _POST [' ']

que se verá como

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