2010-04-21 24 views

Respuesta

110

Con un formulario HTML como:

<input type="submit" name="btnSubmit" value="Save Changes" /> 
<input type="submit" name="btnDelete" value="Delete" /> 

El código php para usar se vería así:

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    //something posted 

    if (isset($_POST['btnDelete'])) { 
     // btnDelete 
    } else { 
     //assume btnSubmit 
    } 
} 

Siempre debe asuma o establezca el primer botón de envío para que aparezca en el código fuente html. En la práctica, los diferentes navegadores envían de forma fiable el nombre/valor de un botón de enviar con los datos de correos cuando:

  1. El usuario, literalmente, hace clic en el botón de enviar con el ratón o dispositivo de puntero
  2. o hay enfoque en el botón de enviar (le asignaron pestañas), y luego se presiona la tecla Intro. Existen

Otras formas de enviar un formulario, y algunos navegadores/versiones deciden no enviar el nombre/valor de cualquier botones de envío en algunas de estas situaciones. Por ejemplo, muchos usuarios envían formularios presionando la tecla Intro cuando el cursor/foco está en un campo de texto. Los formularios también se pueden enviar a través de JavaScript, así como algunos métodos más oscuros.

Es importante prestar atención a este detalle; de ​​lo contrario, puede frustrar a los usuarios cuando envían un formulario, pero "no pasa nada" y se pierden sus datos porque el código no detectó el envío del formulario porque no anticipó el hecho de que el nombre/valor de un botón de envío no se puede enviar con los datos de la publicación.

Además, el consejo anterior se debe utilizar para formularios con un solo botón de envío también porque debe asumir siempre un botón de envío predeterminado.

Soy consciente de que Internet está lleno de toneladas de tutoriales de manejador de formularios, y casi todos ellos hacen nada más que verificar el nombre y el valor de un botón de envío. ¡Pero, están simplemente equivocados!

+1

Gracias por la información adicional sobre asumir un botón predeterminado ... fácil de pasar por alto. – kad81

+0

¿por qué este uso else en lugar de else si? – Buts

+0

@Gorg más si ¿qué? ¿Qué probarías y por qué? – goat

8

En HTML:

<input type="submit" id="btnSubmit" name="btnSubmit" value="Save Changes" /> 
<input type="submit" id="btnDelete" name="btnDelete" value="Delete" /> 

En PHP:

if (isset($_POST["btnSubmit"])){ 
    // "Save Changes" clicked 
} else if (isset($_POST["btnDelete"])){ 
    // "Delete" clicked 
} 
+3

Lo siento, tengo que votar. Los manejadores de formularios que se portan mal cuando se usa la tecla enter para enviar son una de mis preocupaciones. – goat

+2

@chris - Está bien, usted hace un punto perfectamente válido. Vota tu respuesta. – MiffTheFox

-2

lo preguntas en php o javascript.

Si está en php, dé el nombre y utilice la publicación o el método get, después de eso puede usar la opción de isset o ese nombre de botón en particular está marcado con ese valor.

Si es en js, utilice getElemenById para que

Cuestiones relacionadas