Procesamiento de un formulario con dos botones en PHP

18May08

Este es un artículo que trata sobre algo de una muy simple solución pero que no siempre se puede ver a simple vista. Aquí voy a procesar un único formulario que consta de un texto el caul tenemos que ingresar, y dos botones que, según sea el que seleccionemos, redirigirá la página a otra según corresponda con el valor del texto ingresado.

Aquí les muestro la página principal index.php

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;
<html xmlns=”http://www.w3.org/1999/xhtml”&gt;
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″ />
<title>Procesamiento de un formulario con dos botones en PHP</title>
</head>
<body>
<form action=”procesamiento.php” method=”post”>
<p>Ingrese un texto</p>
<p><input type=”text” name=”texto”/></p>
<p><input type=”submit” name=”cmdForm” value=”Procesar texto con el boton 1″ /></p>
<p><input type=”submit” name=”cmdForm” value=”Procesar texto con el boton 2″ /></p>
</form>
</body>
</html>

Como habrán visto, es sólo un formulario, con un campo texto y dos botones submit dentro. El detalle está en que, si bien son dos botones, los dos llevan el mismo nombre (name=”cmdForm”), solo cambia el valor de esos botones según sea el que seleccionemos: value=”Procesar texto con el boton 1″, para el boton1 y value=”Procesar texto con el boton 2″ para el boton 2. Al seleccionar uno de esos botones, el formulario nos manda a procesamiento.php, independientemente de cual botón presionamos. Será allí donde se procesará el texto según sea el botón seleccionado.

Aqui el segundo archivo: procesamiento.php

<?php
switch( $_POST[‘cmdForm’] ) {
case “Procesar texto con el boton 1”: header (“location:boton1.php?texto=”.$_POST[‘texto’]);
break;
case “Procesar texto con el boton 2”: header (“location:boton2.php?texto=”.$_POST[‘texto’]);
break;
}
?>

Aquí está todo el tratamiento de nuestro formulario con los dos botones: hago un switch (o un case, para otros lenguajes) con el valor del botón cmdForm (recordemos que al llamar a los dos botones con el mismo nombre, es como si fuera un sólo botón que admite dos valores!). Según sea el valor del botón, nos vamos a una página correspondiente al botón1 y a otra correspondiente al botón2. En ambos casos, me voy a esas dos paginas con el valor del texto ingresado para tratarlo según sea la utilidad que le demos.

Aquí estan las dos páginas, una para cada botón:

boton1.php

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;
<html xmlns=”http://www.w3.org/1999/xhtml”&gt;
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″ />
<title>Se procesó el formulario con el boton 1</title>
</head>
<?php
echo “Se procesó el formulario con el boton 1, y el texto de entrada es: <strong>”.$_GET[‘texto’].”</strong> “;
?>
<a href=”index.php”>Volver</a>
<body>
</body>
</html>

boton2.php

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;
<html xmlns=”http://www.w3.org/1999/xhtml”&gt;
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″ />
<title>Se procesó el formulario con el boton 2</title>
</head>
<?php
echo “Se procesó el formulario con el boton 2, y el texto de entrada es: <strong>”.$_GET[‘texto’].”</strong> “;
?>
<a href=”index.php”>Volver</a>
<body>
</body>
</html>

Estos dos scripts son prácticamente iguales, sólo cambian algunos detalles de nombre para cada botón. Podemos ver que aquí recupero la variable con el valor del texto que ingresamos inicialmente. Aquí utilizo GET y no POST, puesto que en el archivo procesamiento.php pasé la variable texto en el prompt (location:boton1.php?texto=”.$_POST[‘texto’]) y luego muestro esa misma variable al final de un echo como para personalizar el resultado.

Eso es todo, espero que les sirva.

Anuncios


9 Responses to “Procesamiento de un formulario con dos botones en PHP”

  1. 1 Alberto Gimenez

    Con el ejemplo que muestra es genial pero me gustaría saber como puedo hacer para pagar varias variables a mismo tiempo

    Gracias

  2. 2 Fernando Cabrera

    Soy nuevo en la programación con php, pero se puede intuir que si tienes un formulario con varios campos, puedes utilizar un array, y utilizar ese array como en el ejemplo del campo ‘texto’.

    Espero sirva de algo el comentario.

  3. 3 Yenni Serrano

    Se que esta parte refiere al tipo de letra etc y los header con respecto a los buscadores y rapidez de que consigan la página. Pero estas lineas siempre deben ir iguales o que hay que cambiar y cuando?????

  4. 4 John

    Saludos, muchas gracias por el aporte, me sirvió mucho ya que tenía dos botones en un mismo form con diferente nombre, ya que necesito que al dar click al primero se validen unos datos en la base de datos y en base a esto que se muestren otros campos en el from con otro botón de submit, el problema era que al darle click al segundo botón perdía el valor de las variables del primer botón.
    Le puse el mismo name a ambos y asunto resuelto!.
    Gracias de nuevo.

  5. 5 piropeator

    Muy buen aporte.
    Si quiero agregar seguridad, es decir no quiero que en la barra de la URL se muestre esto:
    http://localhost/formulario/boton1.php?texto=TENTACULO
    Cómo hago??

    • cuando envies la variable texto declarala de la siguiente manera:

      texto=base64_encode(TENTACULO);

      eso te transformara el texto.
      en la pagina que recibas haces lo siguiente:

      $recibir=base64_decode($texto);
      y listo

  6. Siguiendo la misma lógica, lo que también se podría hacer, sería en el archivo procesamiento.php llamar a la función que uno quiere que se ejecuta, por ejemplo si tenemos botones Editar y Grabar. Las funciones pueden estar en la misma página o haciendo un include.
    Y para transmitir los datos por ejemplo el id, se puede hacer por medio de in input tytpe=”hidden” por metodo post. Así no pasamos variables por la url.

    switch($_POST[‘accfrmCotiNormal’]) {

    case “Editar”:
    funcionEditar();
    break;

    case “Grabar”:
    funcionGrabar();
    break;
    }

    Me ha resultado bastante bien esta forma, tomé la base de aquí y la transformé. Saludos y gracias.

  7. Lo otro que se podría hacer, siguiendo la misma lógica es, pero para hacerlo con método post y así evitar pasar por la url la información, es llamar a funciones dentro del switch.

    tenemos.

    archivoform.php ->
    El mismo formulario del artículo

    procesamiento.php
    <!– antes de esto puede ir todo el HTML con el , header etc –>
    <?php

    switch($_POST['cmdForm']) {

    case "Grabar":
    grabar();
    break;

    case "Modificar":
    modificar();
    break;

    }

    function grabar(){
    echo 'Se supone que yo grabo’;
    }

    function modificar() {
    echo ‘Se supone que yo deberia modificar’;
    }
    ?>

  8. 9 Matias

    como seria un ejemplo similar pero que cada caso se abra en un Target diferente?


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: