Ayuda con paso de variables PHP desde un formulario a un archivo php

Necesito ayuda con el paso de variables html - php, en un formulario tengo el siguiente código para obtener 2 datos de un formulario(nombre e email):

     
<div id="contentForm">

            <!-- The contact form starts from here-->
            <?php
                 $error    = '';
                 $name     = '';
                 $email    = '';
                 

            if(isset($_POST['send']))
            {
                 $name     = $_POST['name'];
                 $email    = $_POST['email'];
                $cantidad = $_POST[4000];
                  $producto = $_POST["xxx"];

                if(trim($name) == '')
                {
                    $error = '<div class="errormsg">Por favor, introduce un nombre</div>';
                }
                   else if(trim($email) == '')
                {
                    $error = '<div class="errormsg">Por favor, introduce un email</div>';
                }
                else if(!isEmail($email))
                {
                    $error = '<div class="errormsg">Has introducido un email incorrecto.Vuelve a intentarlo.</div>';
                }
               
                if($error == '')
                {
                    if(get_magic_quotes_gpc())
                    {
                     
                    }

            ?>

               
            <?php
                }
            }

            if(!isset($_POST['send']) || $error != '')
            {
            ?>

           
            <p>Introduzca sus datos:</p>
            <!--Error Message-->
            <?=$error;?>

            <form  method="post" name="contFrm" id="contFrm" action="">


               <p>
                      <label><span class="required">*</span> Nombre:</label>
                     <input name="name" type="text" class="box" id="name" size="30" value="<?=$name;?>" />
               </p>
               <p>
                     <label><span class="required">*</span> Email: </label>
                     <input name="email" type="text" class="box" id="email" size="30" value="<?=$email;?>" />
               </p>
                     
      
         
            <p><a href="recibir.php?$email=$email&$cantidad=$cantidad&$producto=$producto">ENVIAR</a></p>


            </form>

            <!-- E-mail verification. Do not edit -->
            <?php
            }

            function isEmail($email)
            {
                return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i"
                        ,$email));
            }
            ?>
            <!-- END CONTACT FORM -->

            <p>&nbsp;</p>
           
     </div> <!-- /contentForm -->
         



Y ahora lo que quiero hacer es enviar la variable email recogida del formulario ademas de las variables cantidad y producto que tienen siempre el mismo valor.Las quiero enviar a otro archivo PHP y lo he puesto así:

<p><a href="recibir.php?$email=$email&$cantidad=$cantidad&$producto=$producto">ENVIAR</a></p>


Pero no funciona, nose si tengo que modificar la forma de pasárselo en el enlace y la forma de recogerlas,
1.-¿está bien la forma de pasar las variables?
2.-¿cómo tendría que recogerlas en el archivo recibir.php?

Muchas gracias
1. Sin el primer símbolo $ de cada parámetro, no? primero pones el texto y luego la variable, no 2 variables...
<p><a href="recibir.php?email=$email&cantidad=$cantidad&producto=$producto">ENVIAR</a></p>
2. En el recibir.php recogerías con $_GET['email'], etc

Creo que es así, comenta que tal funciona, que ando algo oxidado en PHP y no estoy muy seguro :D
¿Dónde tienes el formulario? Porque yo ahí no veo dónde recoges los datos.

Y, si tal como parece ser, utilizas POST para el formulario (es más seguro que GET, que no debería utilizarse a menos que no haya más remedio), en el otro archivo para recoger los datos es simplemente: $_POST["nombre_variable"], que en tu caso seria $_POST['mail'].

De todos modos, el código para utilizar GET está mal, y es tal como dice BadBob.

Cuelga el código completo y a ver si te podemos ayudar.

Un saludo.
Buenas el formulario que tengo es este, hay va todo el código del archivo:

     
<div id="contentForm">

            <!-- The contact form starts from here-->
            <?php
                 $error    = '';
                 $name     = '';
                 $email    = '';
                 

            if(isset($_POST['send']))
            {
                 $name     = $_POST['name'];
                 $email    = $_POST['email'];
                $cantidad = $_POST[4000];
                  $producto = $_POST["xxx"];

                if(trim($name) == '')
                {
                    $error = '<div class="errormsg">Por favor, introduce un nombre</div>';
                }
                   else if(trim($email) == '')
                {
                    $error = '<div class="errormsg">Por favor, introduce un email</div>';
                }
                else if(!isEmail($email))
                {
                    $error = '<div class="errormsg">Has introducido un email incorrecto.Vuelve a intentarlo.</div>';
                }
               
                if($error == '')
                {
                    if(get_magic_quotes_gpc())
                    {
                     
                    }

            ?>

               
            <?php
                }
            }

            if(!isset($_POST['send']) || $error != '')
            {
            ?>

           
            <p>Introduzca sus datos:</p>
            <!--Error Message-->
            <?=$error;?>

            <form  method="post" name="contFrm" id="contFrm" action="">


               <p>
                      <label><span class="required">*</span> Nombre:</label>
                     <input name="name" type="text" class="box" id="name" size="30" value="<?=$name;?>" />
               </p>
               <p>
                     <label><span class="required">*</span> Email: </label>
                     <input name="email" type="text" class="box" id="email" size="30" value="<?=$email;?>" />
               </p>
                     
      
         
<p><a href="recibir.php?email=$email&cantidad=$cantidad&producto=$producto">ENVIAR</a></p>


            </form>

            <!-- E-mail verification. Do not edit -->
            <?php
            }

            function isEmail($email)
            {
                return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i"
                        ,$email));
            }
            ?>
            <!-- END CONTACT FORM -->

            <p>&nbsp;</p>
           
     </div> <!-- /contentForm -->
         

Poniendo el enlace así:

<p><a href="recibir.php?email=$email&cantidad=$cantidad&producto=$producto">ENVIAR</a></p>

y luego recogiendo las variables así en recibir.php :
$email=$_GET['email'];

Así tampoco me funciona.
¿El archivo se llama recibir.php? ¿Qué es lo que quieres hacer exactamente? ¿Procesar un formulario?

Si me dices exactamente qué es lo que quieres hacer, te lo corrijo en un momento, porque así a simple vista veo unos cuantos errores. ;)

Un saludo.
rrb32 escribió:¿El archivo se llama recibir.php? ¿Qué es lo que quieres hacer exactamente? ¿Procesar un formulario?

Si me dices exactamente qué es lo que quieres hacer, te lo corrijo en un momento, porque así a simple vista veo unos cuantos errores. ;)

Un saludo.



si, lo que tiene que hacer es recoger el valor de esas variables para luego operar con ellas en recibir.php de dos formas: 1 meter los valores en una base de datos mysql y ademas pasárle alguno de estos valores a otra dirección para que opera también con ellos, lo de la base de datos no hay problema, para que te hagas una idea en recibir.php utilizaria las variables asi:

$url__ok="http://www.direccion.com/url_todo_correcto.php?email=".$email;
Entonces tienes 2 archivos, ¿verdad? recibir.php y éste del formulario, ¿no? ¿Cómo se llama éste?

Lo que deberías hacer es en este archivo procesar las variables (añadirlas a la base de datos) y después pasarlas al otro, aunque lo podrías hacer todo en este mismo archivo, no creo que hubiese ningún problema.

Un saludo.
rrb32 escribió:Entonces tienes 2 archivos, ¿verdad? recibir.php y éste del formulario, ¿no? ¿Cómo se llama éste?

Lo que deberías hacer es en este archivo procesar las variables (añadirlas a la base de datos) y después pasarlas al otro, aunque lo podrías hacer todo en este mismo archivo, no creo que hubiese ningún problema.

Un saludo.



si, lo de añadirlas a la base de datos puede funcionar tanto en este archivo como en recibir.php .

Pero el código del formulario lo tengo hecho en cada página de producto(son unos 10 o así) y cuando el formulario los recoge se lo pasa a recibir.php que es el que se encarga de enviar las variables de email y cantidad a una pasarela de pagos.
Además, recibir.php las pasa a otros 2 archivos en función de si el pago se proceso correctamente o no (uno para pago incorrecto y otro para pago correcto), por eso necesito que las variables se envíen a recibir.php y que este las recoja correctamente.

Saludos
Vale, te corrijo el código y pruebas, y después si falla, me comentas:

     
<div id="contentForm">

            <!-- The contact form starts from here-->
            <?php
                 $error    = '';
                 $name     = '';
                 $email    = '';
                 

            if(isset($_POST['send']))
            {
                 $name     = $_POST['name'];
                 $email    = $_POST['email'];
                $cantidad = $_POST[4000];
                  $producto = $_POST["xxx"];

                if(trim($name) == '')
                {
                    $error = '<div class="errormsg">Por favor, introduce un nombre</div>';
                }
                   else if(trim($email) == '')
                {
                    $error = '<div class="errormsg">Por favor, introduce un email</div>';
                }
                else if(!isEmail($email))
                {
                    $error = '<div class="errormsg">Has introducido un email incorrecto.Vuelve a intentarlo.</div>';
                }
               
                if($error == '')
                {
                    if(get_magic_quotes_gpc())
                    {
                     
                    }

                }

            echo "<meta http-equiv='Refresh' content='0;URL=recibir.php?email=$email&cantidad=$cantidad&producto=$producto' />";

            } else {
            ?>

           
            <p>Introduzca sus datos:</p>
            <!--Error Message-->
            <?=$error;?>

            <form  method="post" name="contFrm" id="contFrm" action="nombre_de_este_archivo.php">


               <p>
                      <label><span class="required">*</span> Nombre:</label>
                     <input name="name" type="text" class="box" id="name" size="30" value="<?=$name;?>" />
               </p>
               <p>
                     <label><span class="required">*</span> Email: </label>
                     <input name="email" type="text" class="box" id="email" size="30" value="<?=$email;?>" />
               </p>
                     
      <input type="Submit" name="Submit" value="ENVIAR" />


            </form>

            <!-- E-mail verification. Do not edit -->
            <?php
            }

            function isEmail($email)
            {
                return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i"
                        ,$email));
            }
            ?>
            <!-- END CONTACT FORM -->

            <p> </p>
           
     </div> <!-- /contentForm -->
         


Ahí tienes. Te comento qué he corregido:

En el formulario, no le pasabas a ninguna superglobal ($_GET o $_POST) ninguna variable, puesto que no hacías un Submit del formulario. Para ello, hay que añadir un botón que te haga el trabajo. Has de tener en cuenta que, cuando presiones el botón, te redirigirá a la página definida en el formulario:

action="nombre_de_este_archivo.php"


En esa página, recibirás los parámetros en la variable superglobal $_POST. Yo he supuesto que los quieres recibir en esa misma página para comprobarlos, por lo que deberás cambiar el nombre del archivo por el correspondiente. A causa de ello, al final de las comprobaciones he redirigido a la página recibir.php, con:

echo "<meta http-equiv='Refresh' content='0;URL=recibir.php?email=$email&cantidad=$cantidad&producto=$producto' />";


Tal vez no es esto lo que quieras hacer, realmente no lo tengo muy claro, pero pruébalo y me comentas.

Un saludo.
rrb32 escribió:Vale, te corrijo el código y pruebas, y después si falla, me comentas:

     
<div id="contentForm">

            <!-- The contact form starts from here-->
            <?php
                 $error    = '';
                 $name     = '';
                 $email    = '';
                 

            if(isset($_POST['send']))
            {
                 $name     = $_POST['name'];
                 $email    = $_POST['email'];
                $cantidad = $_POST[4000];
                  $producto = $_POST["xxx"];

                if(trim($name) == '')
                {
                    $error = '<div class="errormsg">Por favor, introduce un nombre</div>';
                }
                   else if(trim($email) == '')
                {
                    $error = '<div class="errormsg">Por favor, introduce un email</div>';
                }
                else if(!isEmail($email))
                {
                    $error = '<div class="errormsg">Has introducido un email incorrecto.Vuelve a intentarlo.</div>';
                }
               
                if($error == '')
                {
                    if(get_magic_quotes_gpc())
                    {
                     
                    }

                }

            echo "<meta http-equiv='Refresh' content='0;URL=recibir.php?email=$email&cantidad=$cantidad&producto=$producto' />";

            } else {
            ?>

           
            <p>Introduzca sus datos:</p>
            <!--Error Message-->
            <?=$error;?>

            <form  method="post" name="contFrm" id="contFrm" action="nombre_de_este_archivo.php">


               <p>
                      <label><span class="required">*</span> Nombre:</label>
                     <input name="name" type="text" class="box" id="name" size="30" value="<?=$name;?>" />
               </p>
               <p>
                     <label><span class="required">*</span> Email: </label>
                     <input name="email" type="text" class="box" id="email" size="30" value="<?=$email;?>" />
               </p>
                     
      <input type="Submit" name="Submit" value="ENVIAR" />


            </form>

            <!-- E-mail verification. Do not edit -->
            <?php
            }

            function isEmail($email)
            {
                return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i"
                        ,$email));
            }
            ?>
            <!-- END CONTACT FORM -->

            <p> </p>
           
     </div> <!-- /contentForm -->
         


Ahí tienes. Te comento qué he corregido:

En el formulario, no le pasabas a ninguna superglobal ($_GET o $_POST) ninguna variable, puesto que no hacías un Submit del formulario. Para ello, hay que añadir un botón que te haga el trabajo. Has de tener en cuenta que, cuando presiones el botón, te redirigirá a la página definida en el formulario:

action="nombre_de_este_archivo.php"


En esa página, recibirás los parámetros en la variable superglobal $_POST. Yo he supuesto que los quieres recibir en esa misma página para comprobarlos, por lo que deberás cambiar el nombre del archivo por el correspondiente. A causa de ello, al final de las comprobaciones he redirigido a la página recibir.php, con:

echo "<meta http-equiv='Refresh' content='0;URL=recibir.php?email=$email&cantidad=$cantidad&producto=$producto' />";


Tal vez no es esto lo que quieras hacer, realmente no lo tengo muy claro, pero pruébalo y me comentas.

Un saludo.


muchas gracias !! ya va bien XD lo único que tuve que modificar esto:

if(isset($_POST['send']))
por esto otro:
if(isset($_POST['Submit']))
ahora tengo que mirar a ver si me va bien aplicar esta solución en otro archivo que tenía un problema similar :)
Oh, cierto, lo he cambiado en el archivo de texto cuando ya había copiado y se me ha olvidado copiar de nuevo. Lo siento :-|

Si tienes alguna otra duda, postea aquí ;)

Un saludo.
10 respuestas