2012-05-21 39 views
26

Tengo un sitio web iniciado donde quiero tener 2 botones de envío por separado, uno de los cuales tomará los datos ingresados ​​y hará algunos cálculos para que se muestren en la misma pantalla. Tengo esta trabajando con éxito con:Múltiples botones de envío php acciones diferentes

<form id="form1" name="form1" method="post" onsubmit="" onreset="" action="programname.php"> 
<input type="submit" name="calc" value="Find Angle"> 

y luego utilizo:

if (!isset($_POST['submit'])){ 
Do actions, display calculations} 

Ahora quiero un segundo botón que todavía agarra los datos que ingresó, pero luego se va a enviar una dirección diferente. ¿Hay una manera elegante de hacer esto?

Respuesta

45

Puede agregar un método onclick al nuevo botón Enviar que cambiará la acción del formulario y luego lo enviará.

<script type="text/javascript"> 
    function submitForm(action) { 
    var form = document.getElementById('form1'); 
    form.action = action; 
    form.submit(); 
    } 
</script> 

... 

<form id="form1"> 
    <!-- ... --> 
    <input type="button" onclick="submitForm('page1.php')" value="submit 1" /> 
    <input type="button" onclick="submitForm('page2.php')" value="submit 2" /> 
</form> 
+0

Es wo ¡Gracias! ¡Muchas gracias! Pasé una hora mirando casos ligeramente diferentes a los míos y no pude entenderlo. Lo tienes en 3 segundos :-) Tengo mucho más que aprender .. – Joegramming

+0

¿Qué sucede si el usuario simplemente pulsa la tecla Intro sin hacer clic en ningún botón de enviar? –

+1

@IstiaqueAhmed: a menos que lo modifique, enviará el formulario con la acción que tenga de manera predeterminada. Si eso no es lo que quieres, puedes configurar el comportamiento que quieras a través de un oyente 'onsubmit' en el elemento'

'. – Travesty3

12

Puede cambiar la acción del formulario utilizando formaction = "page1.php" en la propiedad del botón.

<form id="form1" name="form1" method="post" onsubmit="" onreset="" action="programname.php"> 
    <input type="submit" name="calc" value="Find Angle"> 

    <input type="button" type="submit" formaction="page1.php">Action 0</button> 
    <input type="button" type="submit" formaction="page2.php">Action 1</button> 
</form> 

Nota: El atributo de formacción de la etiqueta del botón no es compatible con Internet Explorer 9 y versiones anteriores.

+0

De hecho, existe un atributo como ['formaction'] (http://www.w3.org/TR/html-markup/button.submit.html#button.submit.attrs.formaction) en HTML5 estándar. –

+0

¡Esa parece la solución más limpia, gracias! –

6

La mejor manera de tratar con múltiples botón de enviar es el uso de caso interruptor de en escritura de la acción

<form action="demo_form.php" method="get"> 

    Choose your favorite subject: 

    <button name="subject" type="submit" value="html">HTML</button> 
    <button name="subject" type="submit" value="css">CSS</button> 
    <button name="subject" type="submit" value="javascript">Java Script</button> 
    <button name="subject" type="submit" value="jquery">jQuery</button> 

</form> 

escritura de la acción/del lado del servidor:

demo_form.php

<?php 

switch($_REQUEST['subject']) { 

    case 'html': //action for html here 
       break; 

    case 'css': //action for css here 
       break; 

    case 'javascript': //action for javascript here 
         break; 

    case 'jquery': //action for jquery here 
        break; 
} 

?> 

Ref : W3Schools

+0

Sé que esta pregunta/respuesta es un poco antigua, pero solo una nota: esta solución no va a una dirección diferente según lo solicitado. – Ezenhis

Cuestiones relacionadas