Foros del Web » Programando para Internet » PHP »

Formulario + campos obligatorios + menus desplegables

Estas en el tema de Formulario + campos obligatorios + menus desplegables en el foro de PHP en Foros del Web. Hola, Como se puede controlar con PHP que el usuario haya introducido los campos obligatorios? y que vuelva al formulario, sin borrar los otros datos ...
  #1 (permalink)  
Antiguo 27/03/2007, 02:55
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Formulario + campos obligatorios + menus desplegables

Hola,
Como se puede controlar con PHP que el usuario haya introducido los campos obligatorios? y que vuelva al formulario, sin borrar los otros datos que sí ha completado?

Tengo otra duda, como puedo hacer para que en este mismo formulario, un menu desplegable se rellene segun lo que haya seleccionado en otro menu desplegable? (todo dentro del mismo formulario, y sin coger los valores de la base de datos)

Gracias
  #2 (permalink)  
Antiguo 27/03/2007, 06:10
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 17 años, 7 meses
Puntos: 9
Re: Formulario + campos obligatorios + menus desplegables

Hola eli, con php no se si puede controlar que el usuario haya completado campos obligatorios, con javascript si se puede. Por ejemplo:
Código:
<scritp>
funcion validar(form)
{
if(form.nombre.value==""){
alert("Por favor coloque el nombre");
form.nombre.focus();
return false;
}

if(form.apellido.value==""){
alert("Por favor coloque el apellido");
form.apellido.focus();
return false;
}

}
</script>
Código HTML:
<form action="pagina.php" method="post">
<input type="text" size="20" name="nombre">
<input type="text" size="20" name="apellido">
<input type="text" size="10" name="edad">
<input type="submit" name="enviar" value="Enviar" onclick="return validar(this.form)"> 
Saludos
__________________
->Aprender es un proceso que incluye el error..
  #3 (permalink)  
Antiguo 28/03/2007, 09:14
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Formulario + campos obligatorios + menus desplegables

hola cala
lo he hecho, pero despues de que me salga la alerta, se va a la pagina que procesa el formulario...
  #4 (permalink)  
Antiguo 28/03/2007, 09:26
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 17 años, 7 meses
Puntos: 9
Re: Formulario + campos obligatorios + menus desplegables

A ver si entendi, dices que por mas que el usuario no haya llenado los campos, te sale el alerta y despues envia el formulario con los campos vacios???. Si es asi, mejor coloca tu codigo asi se puede ver mejor el problema, es raro porque yo lo he probado y a mi si me funciona. Saludos
__________________
->Aprender es un proceso que incluye el error..
  #5 (permalink)  
Antiguo 28/03/2007, 09:37
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Formulario + campos obligatorios + menus desplegables

Código:
function validar(form)
{
if(form.nomCognoms.value==""){
alert("Completi el nom i cognoms");
form.nomCognoms.focus();
return false;
}

}
</script>
<form action="nouusuari.php" method="post">
...formulario
<input name="enviar" type="submit" value="Entrar" onClick="return validar(this.form)" > 
</form>
  #6 (permalink)  
Antiguo 28/03/2007, 09:40
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 17 años, 7 meses
Puntos: 9
Re: Formulario + campos obligatorios + menus desplegables

Eli por lo visto esta bien, asegurate de colocar <script></script> entre el tag <head>
__________________
->Aprender es un proceso que incluye el error..
  #7 (permalink)  
Antiguo 28/03/2007, 09:47
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Formulario + campos obligatorios + menus desplegables

Era eso
  #8 (permalink)  
Antiguo 28/03/2007, 09:51
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 17 años, 7 meses
Puntos: 9
Re: Formulario + campos obligatorios + menus desplegables

muchas De nadas. Saludos jaja
__________________
->Aprender es un proceso que incluye el error..
  #9 (permalink)  
Antiguo 28/03/2007, 11:20
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Formulario + campos obligatorios + menus desplegables

Hacerlo con Javascript esta bien para que el proceso se haga rápido, pero, ¿que pasa si el usuario tiene desabilitado javascript?, este código no serviría de nada además que por cuestiones de seguridad debes de validar también del lado del servidor (PHP); ahora, volviendo a lo que preguntabas:
Cita:
Iniciado por Elisa85 Ver Mensaje
Como se puede controlar con PHP que el usuario haya introducido los campos obligatorios? y que vuelva al formulario, sin borrar los otros datos que sí ha completado?
Te acabo de hacer un ejemplo sencillo, de lo que trata es que vamos a crear unos valores de los campos de texto que tendran por default y cuando el usuario pulse el boton enviar se recargara la misma página y evaluaremos si los campos contienen datos válidos y que además no sean vacios de ser así redirigiremos al usuario a otra pagina que se encargara de hacer con estas variables lo que se nos antoje, de lo contrario marcaremos los errores y se los mostraremos al usuario para que los corrija.
ejemplo.php
Código PHP:
<?php
// Valores por default de las variables
$nombre "";
$ape_pat "";
$ape_mat "";
$edad "";

if( isset( 
$_POST['submit'] ) )
{
   
// Creamos nombres de variables cortos
   
$nombre trim$_POST['nombre'] );
   
$ape_pat trim$_POST['ape_pat'] );
   
$ape_mat trim$_POST['ape_mat'] );
   
$edad trim$_POST['edad'] );

   
// validamos que se hayan enviado los campos nombre, edad y alguno de los 2 apellidos
   
if( ( !empty( $nombre ) && !is_numeric$nombre ) ) && ( !empty( $ape_pat ) || !empty( $ape_mat ) ) && ( !is_numeric$ape_pat ) && !is_numeric$ape_mat ) ) && ( !empty( $edad ) && is_numeric$edad ) ) )
   {
      
header("Location: tupagina.php"); 
      exit;
   }
   else
   {
      echo 
"Por favor corrija los campos marcados con rojo.</br>";
      if( empty( 
$nombre ) || is_numeric$nombre ) )
         
$nombre $nombre."\" style=\"background-color: #FF0000\"";
      if( empty( 
$ape_pat ) && empty( $ape_mat ) )
      {
         echo 
"Por favor, de los campos que estan marcados con verde llene alguno de ellos.</br>";
         
$ape_pat $ape_pat."\" style=\"background-color: #00FF00\"";
         
$ape_mat $ape_mat."\" style=\"background-color: #00FF00\"";
      }
      if( 
is_numeric$ape_pat ) )
         
$ape_pat $ape_pat."\" style=\"background-color: #FF0000\"";
      if( 
is_numeric$ape_mat ) )
         
$ape_mat $ape_mat."\" style=\"background-color: #FF0000\"";
      if( empty( 
$edad ) || !is_numeric$edad ) )
         
$edad $edad."\" style=\"background-color: #FF0000\"";
      echo 
"<p>";
   }
}

echo 
"Los campos marcados con asterisco (*) son obligatorios y";
echo 
" en cuanto a los apellidos, por lo menos debe escribir uno:</br>";
echo 
"<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">";
echo 
"*Nombre: <input type=\"text\" name=\"nombre\" value=\"$nombre\"></br>";
echo 
"Apellido Paterno: <input type=\"text\" name=\"ape_pat\" value=\"$ape_pat\"></br>";
echo 
"Apellido Materno: <input type=\"text\" name=\"ape_mat\" value=\"$ape_mat\"></br>";
echo 
"*Edad: <input type=\"text\" size=\"2\" maxlength=\"2\" name=\"edad\" value=\"$edad\"><p>";
echo 
"<input type=\"submit\" name=\"submit\" value=\"Enviar\">";
?>
tupagina.php
Código PHP:
<?php
echo "Se enviaron los campos correctamente";
// hacemos lo que se nos antoje con las variables
?>
Luego, en cuanto a tu otra pregunta:
Cita:
Iniciado por Elisa85 Ver Mensaje
Tengo otra duda, como puedo hacer para que en este mismo formulario, un menu desplegable se rellene segun lo que haya seleccionado en otro menu desplegable? (todo dentro del mismo formulario, y sin coger los valores de la base de datos)
Eso lo puedes resolver de dos maneras:
1.- Utilizando JavaScript echandole un vistazo a las Faq's de ese foro:
http://www.forosdelweb.com/showthrea...655#post259655
2.- Utilizando Ajax que en lo personal es lo que más me agrada por que no tienes que cargarle toda la información al usuario más que la que el necesita, aca te dejo un enlace de una pagina que considero muy buena y que te explica como hacer eso y te deja descargar el archivo para que lo puedas analizar:
http://www.formatoweb.com.ar/ajax/se...pendientes.php
Espero sea lo que necesitabas o por lo menos te de una idea. Suerte
  #10 (permalink)  
Antiguo 28/03/2007, 17:27
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Formulario + campos obligatorios + menus desplegables

Tienes razón con lo de javascript, he intentado hacerlo pero me sale el siguiente error:

You don't have permission to access /\"".$_SERVER['PHP_SELF']."\" on this server.

Apache/1.3.34 Server at localhost Port 80

la linia de codigo correspondiente:

Código PHP:
<form action="".$_SERVER['PHP_SELF']."\" method=\"POST\"> 
me marca un error en el method, pero no sé a que se debe, aun no domino nada, y de hecho no entiende todo lo que pones entre \ y "
  #11 (permalink)  
Antiguo 29/03/2007, 09:46
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Formulario + campos obligatorios + menus desplegables

¿Que raro que te salga ese error?
A jusgar por la línea que tienes te devería de salir un error más o menos así:
parse error, unexpected '"', expecting ',' or ';'
y eso se debe a que no estas escapando bien el action no se debe al method, ya que tu pones:
Código PHP:
echo "<form action="".$_SERVER['PHP_SELF']."" method=\"POST\">"
y te falta poner la barra invertida despues del signo "=" de action de esta nanera:
Código PHP:
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">"
Suerte
  #12 (permalink)  
Antiguo 29/03/2007, 10:50
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Formulario + campos obligatorios + menus desplegables

Con y sin la barra invertida me dice que no el "method" noes compatible con algunos navegadores...
  #13 (permalink)  
Antiguo 02/04/2007, 08:19
 
Fecha de Ingreso: marzo-2007
Mensajes: 53
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Formulario + campos obligatorios + menus desplegables

Esta es mi versión del ejemplo que funciona hasta cierto punto

Código:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>
<body>
<p>
  <?php 
// Valores por default de las variables 
$nombre = ""; 
$ape_pat = ""; 
$ape_mat = ""; 
$edad = ""; 
if( isset( $_POST['submit'] ) ) 
{ 
   // Creamos nombres de variables cortos 
   $nombre = trim( $_POST['nombre'] ); 
$ape_pat = trim( $_POST['ape_pat'] ); 
   $ape_mat = trim( $_POST['ape_mat'] ); 
$edad = trim( $_POST['edad'] ); 
   // validamos que se hayan enviado los campos nombre, edad y alguno de los 2 apellidos 
if( ( !empty( $nombre ) && !is_numeric( $nombre ) ) && ( !empty( $ape_pat ) || !empty( $ape_mat ) ) && ( !is_numeric( $ape_pat ) && !is_numeric( $ape_mat ) ) && ( !empty( $edad ) && is_numeric( $edad ) ) ) 
   { 
      header("Location: tupagina.php");  
      exit; 
} 
   else 
   { 
      echo "Por favor corrija los campos marcados con rojo.</br>"; 
if( empty( $nombre ) || is_numeric( $nombre ) ) 
         $nombre = $nombre."\" style=\"background-color: #FF0000\""; 
      if( empty( $ape_pat ) && empty( $ape_mat ) ) 
{ 
         echo "Por favor, de los campos que estan marcados con verde llene alguno de ellos.</br>"; 
$ape_pat = $ape_pat."\" style=\"background-color: #00FF00\""; 
         $ape_mat = $ape_mat."\" style=\"background-color: #00FF00\""; 
      } 
      if( is_numeric( $ape_pat ) ) 
         $ape_pat = $ape_pat."\" style=\"background-color: #FF0000\""; 
      if( is_numeric( $ape_mat ) ) 
         $ape_mat = $ape_mat."\" style=\"background-color: #FF0000\""; 
      if( empty( $edad ) || !is_numeric( $edad ) ) 
         $edad = $edad."\" style=\"background-color: #FF0000\""; 
      echo "<p>"; 
   } 
} 
?>
Los campos marcados con asterisco (*) son obligatorios y  en cuanto a los apellidos, por lo menos debe escribir uno:</p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="forma">
<p>Nombre: 
    <input name="nombre" type="text" value="<?php echo $nombre; ?>" />
    <br />
    Apellido Paterno: 
<input name="ape_pat" type="text" value="<?php echo $ape_pat; ?>" />
    <br />
    Apellido Materno:
    <input name="ape_mat" type="text" value="<?php echo $ape_mat; ?>" />
    <br />
 Edad:
 <input name="edad" type="text" value="<?php echo $edad; ?>" />
  </p>
  <p>
    <input name="submit" type="submit" value="Enviar" />
  </p>
</form>
</body>
</html> 
El problema con este código es que no te lleva a la página de destino indicado en header, ino que te lleva a una página en blanco.

Además tengo una duda: ¿cómo puedo hacer yo para guardar y verificar valores provenientes de radioboxes y listas desplegables por ejemplo?

Espero tener una pronta respuesta. Nos vemos

The Neurochild
  #14 (permalink)  
Antiguo 02/04/2007, 09:28
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Formulario + campos obligatorios + menus desplegables

Cita:
Iniciado por Elisa85 Ver Mensaje
Con y sin la barra invertida me dice que no el "method" noes compatible con algunos navegadores...
¿exactamente cual es el error que te muestra? ya que yo supongo que todos los servidores admiten tanto el metodo POST como el GET; si estoy mal que alguien me corrija. El problema a de ser en tu action tal vez a de ser porque la variable guardada en el php.ini register_globals esta en OFF de ser así en lugar de utilizar $SERVER['PHP_SELF']; deberías utilizar $HTTP_SERVER_VARS['PHP_SELF']; y si aún así no sirve entonces en el action deberías de poner el nombre de tu archivo para solucionar tu problema, en nuestro caso el action quedaría action="ejemplo.php".
Cita:
Iniciado por The Neurochild Ver Mensaje
El problema con este código es que no te lleva a la página de destino indicado en header, ino que te lleva a una página en blanco
Eso a de ser porque en la pagina destino no estas poniendo nada. ¿el archivo tupagina.php lo copiaste como el ejemplo que dí?
Cita:
Iniciado por The Neurochild Ver Mensaje
Además tengo una duda: ¿cómo puedo hacer yo para guardar y verificar valores provenientes de radioboxes y listas desplegables por ejemplo?
Se hace exactamente igual, se tienen que hacer las validaciones de esos campos y si no seleccionó nada pues hay que marcarlos:
ejemplo.php
Código PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>
<body>
<p>
<?php 
// Valores por default de las variables 
$nombre ""
$ape_pat ""
$ape_mat ""
$edad ""
if( isset( 
$_POST['submit'] ) ) 

   
// Creamos nombres de variables cortos 
   
$nombre trim$_POST['nombre'] ); 
   
$ape_pat trim$_POST['ape_pat'] ); 
   
$ape_mat trim$_POST['ape_mat'] ); 
   
$edad trim$_POST['edad'] );
   
$sexo trim$_POST['sexo'] );
   
$ocupacion trim$_POST['ocupacion'] );

   
// validamos que se hayan enviado los campos nombre, edad y alguno de los 2 apellidos 
   
if( ( !empty( $nombre ) && !is_numeric$nombre ) ) && ( !empty( $ape_pat ) || !empty( $ape_mat ) ) && ( !is_numeric$ape_pat ) && !is_numeric$ape_mat ) ) && ( !empty( $edad ) && is_numeric$edad ) ) && !empty( $sexo ) && !empty( $ocupacion) ) 
   { 
      
header("Location: tupagina.php");  
      exit; 
   } 
   else 
   { 
      echo 
"Por favor corrija los campos marcados con rojo.</br>"
      if( empty( 
$nombre ) || is_numeric$nombre ) ) 
         
$nombre $nombre."\" style=\"background-color: #FF0000\""
      if( empty( 
$ape_pat ) && empty( $ape_mat ) ) 
      { 
         echo 
"Por favor, de los campos que estan marcados con verde llene alguno de ellos.</br>"
         
$ape_pat $ape_pat."\" style=\"background-color: #00FF00\""
         
$ape_mat $ape_mat."\" style=\"background-color: #00FF00\""
      } 
      if( 
is_numeric$ape_pat ) ) 
         
$ape_pat $ape_pat."\" style=\"background-color: #FF0000\""
      if( 
is_numeric$ape_mat ) ) 
         
$ape_mat $ape_mat."\" style=\"background-color: #FF0000\""
      if( empty( 
$edad ) || !is_numeric$edad ) ) 
         
$edad $edad."\" style=\"background-color: #FF0000\"";
      if( empty( 
$sexo ) )
         
$sexo "nada"
      if( empty( 
$ocupacion ) )
         
$ocupacion "vacio"
      echo 
"<p>"
   } 

?>
Los campos marcados con asterisco (*) son obligatorios y  en cuanto a los apellidos, por lo menos debe escribir uno:</p>
<form action="<?php echo $SERVER['PHP_SELF']; ?>" method="post" name="forma">
<p>Nombre: 
    <input name="nombre" type="text" value="<?php echo $nombre?>" />
    <br />
Apellido Paterno: 
   <input name="ape_pat" type="text" value="<?php echo $ape_pat?>" /><br />
Apellido Materno:
   <input name="ape_mat" type="text" value="<?php echo $ape_mat?>" /><br />
Edad:
   <input name="edad" type="text" value="<?php echo $edad?>" /></br>
Sexo:
   Hombre<input type="radio" name="sexo" value="Hombre" <?php if( $sexo == "Hombre" ) echo "checked"; elseif( $sexo == "nada" ) echo "style=\"background-color: #FF0000\""?> >
   Mujer<input type="radio" name="sexo" value="Mujer" <?php if( $sexo == "Mujer" ) echo "checked"; elseif( $sexo == "nada" ) echo "style=\"background-color: #FF0000\""?> ></br>
Ocupación:
   <select name="ocupacion" <?php if( $ocupacion == "vacio" ) echo "style=\"background-color: #FF0000\""?> >
      <option value="">Seleccione una ocupación</option>
      <option value="director" <?php if( $ocupacion == "director" ) echo "selected"?> >Director</option>
      <option value="ejecutivo" <?php if( $ocupacion == "ejecutivo" ) echo "selected"?> >Ejecutivo</option>
      <option value="otro" <?php if( $ocupacion == "otro" ) echo "selected"?> >Otro</option>
   </select><p>
<input name="submit" type="submit" value="Enviar" /></p>
</form>
</body>
</html>
tupagina.php
Código PHP:
<?php 
echo "Se enviaron los campos correctamente"
// hacemos lo que se nos antoje con las variables 
?>
Espero haberme podido dado a entender y que ahora si les funcione ya que a mí si me funciona, pero no porque a mí me funcione le tiene que servir a todos ¿verdad?. Suerte
  #15 (permalink)  
Antiguo 02/04/2007, 11:44
 
Fecha de Ingreso: marzo-2007
Mensajes: 50
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Formulario + campos obligatorios + menus desplegables

genial compa-..- funciona impeque ... ;) .... 0 problema .. el que no entendio es muy (&%$%$) error de capa 8 ajajaja

saludos!
  #16 (permalink)  
Antiguo 02/04/2007, 14:12
 
Fecha de Ingreso: marzo-2007
Mensajes: 53
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Formulario + campos obligatorios + menus desplegables

Cita:
Iniciado por Erikfrancisco Ver Mensaje
Eso a de ser porque en la pagina destino no estas poniendo nada. ¿el archivo tupagina.php lo copiaste como el ejemplo que dí?
La gravedad del caso es que es el mismo archivo. Trate de dirigirlo hacia allá, pero no me muestra nada. ¿Que crees que pueda estar pasando? la mayor parte del codigo, excepto la parte HTML, está igual que en tu ejemplo. Por favor, prueba con mi código y lo comprobarás.

Saludos

The Neurochild
  #17 (permalink)  
Antiguo 02/04/2007, 14:25
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Formulario + campos obligatorios + menus desplegables

Ya lo probe, es por eso que puse el segundo código basandome en el que tenías obviamente con algunas modificaciones que querías (input type radio y select). Deberías de probar el código tal y como lo puse y luego intentar hacer las modificaciones que creas pertinentes pero sobre el código que te puse. Suerte
  #18 (permalink)  
Antiguo 10/04/2007, 14:01
 
Fecha de Ingreso: marzo-2007
Mensajes: 53
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Formulario + campos obligatorios + menus desplegables

El asunto es que todo está bien, solo que la página no me redireccióna a la otra indicada por header, tanto asi que me sale un error como este en un servidor que tengo

Warning: Cannot modify header information - headers already sent by (output started at /hsphere/local/home/dicosa/ve.equiphone.com/ejemplo.php:6) in /hsphere/local/home/dicosa/ve.equiphone.com/ejemplo.php on line 30

La linea 30 es en donde está el header de redireccionamiento para la otra página
  #19 (permalink)  
Antiguo 10/04/2007, 19:57
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 5 meses
Puntos: 11
Re: Formulario + campos obligatorios + menus desplegables

Hola!

Obviamente no te va a reenviar porque antes de usar el header hiciste salidas al navegador:

Código:
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Documento sin t&iacute;tulo</title> 
</head> 
<body> 
<p>
Cuando das salida a algun código html antes del header ya te da ese error.
Debes poner tu código php "antes" de alguna salida al navegador.

De todas maneras te voy a dar mi punto de vista.
Además cuando rediriges a otra página vas a perder TODAS las variables POST. Y todo es inutil.

Por qué redirigir a otra página, hazlo todo en la misma!


Recuerdo algna vez haber posteado algo sobre formularios:

http://www.forosdelweb.com/showthrea...31#post1810231

Pero lo completaremos con la necesidad que tenes (de todas formas a esto lo redacté rápidamente, por lo tanto puede haber algún error de tipografía y obviamente sto se puede mejorar más todavía):
Código PHP:
<?
// no se dón de vas a ejecutar el script, por la dudas llamamos las variables
global $_POST;
// Si el formulario ha sido enviado la variable send existe y vale 1
if ($_POST["send"] == 1)
{
    
// Verifiquemos los datos
    
if (!$_POST["nombre"] || is_numeric($_POST["nombre"])) {
 
$mensaje[] = "Nombre";
 
$class['nombre'] = " class=rojo"; }
    if (!
$_POST["ape_pat"] || is_numeric($_POST["ape_pat"])) {
 
$mensaje[] = "Primer apellido"
 
$class['ape_pat'] = " class=rojo"; }
    if (!
$_POST["ape_mat"] || is_numeric($_POST["ape_mat"])) {
 
$mensaje[] = "Segundo apellido"
 
$class['ape_mat'] = " class=rojo"; }
    if (!
$_POST["edad"] || !is_numeric($_POST["edad"]))  {
 
$mensaje[] = "Edad";
 
$class['edad'] = " class=rojo"; }
    if (!
$_POST["sexo"])  {
 
$mensaje[] = "Sexo";
 
$class['sexo'] = " class=rojo"; }
    if (!
$_POST["ocupacion"])  {
 
$mensaje[] = "Ocupación";
 
$class['ocupacion'] = " class=rojo"; }
 
 
    if (
$mensaje) { 
 
    print 
"Para llevar a cabo el registro correctamente debe introducir los siguientes datos:<br><br>"
 
    foreach (
$mensaje as $valor
    print 
"- $valor<br />"
 
    } 
    else { 
 
// Aquí ejecuta la sentencia SQL para guardar los datos en mysql ya que si no hay ningún mensaje de error significa que todos los datos están completos y correctos. 
 
$_sql "INSERT...";
 
 if (
mysql_query($_sql))
 
$exito 1;
 else
 die 
mysql_error();
 
 
    }
}
if (!
$exito) {
 
?>
Los campos marcados con asterisco (*) son obligatorios y  en cuanto a los apellidos, por lo menos debe escribir uno:</p> 
<form action="formulario.php" method="post" name="forma"> 
<p>Nombre:  
<input<?= $class['nombre'?> name="nombre" type="text" value="<?= $_POST["nombre"?>" /> 
<br /> 
Apellido Paterno:  
<input<?= $class['ape_pat'?> name="ape_pat" type="text" value="<?= $_POST["ape_pat"?>" /><br /> 
Apellido Materno: 
<input<?= $class['ape_mat'?> name="ape_mat" type="text" value="<?= $_POST["ape_mat"?>" /><br /> 
Edad: 
<input<?= $class['edad'?> name="edad" type="text" value="<?= $_POST["edad"?>" /></br> 
Sexo: 
Hombre<input<?= $class['sexo'?> type="radio" name="sexo" value="Hombre" <? if( $_POST["sexo"] == "Hombre" ) echo "checked"?> > 
Mujer<input<?= $class['sexo'?> type="radio" name="sexo" value="Mujer" <?php if($_POST["sexo"] == "Mujer" ) echo "checked"?> ></br> 
Ocupación: 
<select<?= $class['ocupacion'?> name="ocupacion" <? if( $_POST["ocupacion"] == "" ?> > 
<option value="">Seleccione una ocupación</option> 
<option value="director" <? if( $_POST["ocupacion"] == "director" ) echo "selected"?> >Director</option> 
<option value="ejecutivo" <? if( $_POST["ocupacion"] == "ejecutivo" ) echo "selected"?> >Ejecutivo</option> 
<option value="otro" <? if( $_POST["ocupacion"] == "otro" ) echo "selected"?> >Otro</option> 
</select><p> 
<input name="send" type="hidden" id="send" value="1" />
<input name="submit" type="submit" value="Enviar" /></p> 
</form> 
<? 
// Si el formulario fue guardado correctamente en la base entonces $exito vale 1 y se imprime esto en la pantalla en vez de mostrar el formulario
elseif ($exito == 1)
echo 
"Los datos han sido enviados con éxito.";
?>
  #20 (permalink)  
Antiguo 16/04/2007, 13:32
 
Fecha de Ingreso: marzo-2007
Mensajes: 53
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Formulario + campos obligatorios + menus desplegables

Hola de nuevo.

Ahora estoy buscando una condicion para lo referente a la "areas de texto". traté de hacer lo mismo que en los campos de texto, pero cuando las voy a probar (cuando está vacio y le doy "enviar"), no me la colorea de rojo y me aparece un texto en su lugar

¿Hay alguna solución al respecto?

The Neurochild
  #21 (permalink)  
Antiguo 17/04/2007, 07:04
 
Fecha de Ingreso: marzo-2007
Mensajes: 53
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Formulario + campos obligatorios + menus desplegables

Tengo otro problema más, cuando la solucion es válida, o sea, sin campos vacios, no me está guardando los valores que puse en el formulario. ¿Que es lo que puede estar pasando?

Saludos

The Neurochild
  #22 (permalink)  
Antiguo 17/04/2007, 07:15
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 17 años, 7 meses
Puntos: 9
Re: Formulario + campos obligatorios + menus desplegables

Hola como recoges las variables, puedes colocar el codigo para verlo. Saludos
__________________
->Aprender es un proceso que incluye el error..
  #23 (permalink)  
Antiguo 17/04/2007, 07:48
 
Fecha de Ingreso: marzo-2007
Mensajes: 53
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Formulario + campos obligatorios + menus desplegables

formulario.php
Código PHP:
<?php 
// Valores por default de las variables 
$nombre ""
$ape_pat ""
$ape_mat ""
$edad ""
if( isset( 
$_POST['submit'] ) ) 

   
// Creamos nombres de variables cortos 
   
$nombre trim$_POST['nombre'] ); 
   
$ape_pat trim$_POST['ape_pat'] ); 
   
$ape_mat trim$_POST['ape_mat'] ); 
   
$edad trim$_POST['edad'] );
   
$sexo trim$_POST['sexo'] );
   
$ocupacion trim$_POST['ocupacion'] );
 
   
// validamos que se hayan enviado los campos nombre, edad y alguno de los 2 apellidos 
   
if( ( !empty( $nombre ) && !is_numeric$nombre ) ) && ( !empty( $ape_pat ) || !empty( $ape_mat ) ) && ( !is_numeric$ape_pat ) && !is_numeric$ape_mat ) ) && ( !empty( $edad ) && is_numeric$edad ) ) && !empty( $sexo ) && !empty( $ocupacion) ) 
   { 
      
header("Location: tupagina.php");  
      exit; 
   } 
   else 
   { 
      echo 
"Por favor corrija los campos marcados con rojo.</br>"
      if( empty( 
$nombre ) || is_numeric$nombre ) ) 
         
$nombre $nombre."\" style=\"background-color: #FF0000\""
      if( empty( 
$ape_pat ) && empty( $ape_mat ) ) 
      { 
         echo 
"Por favor, de los campos que estan marcados con verde llene alguno de ellos.</br>"
         
$ape_pat $ape_pat."\" style=\"background-color: #00FF00\""
         
$ape_mat $ape_mat."\" style=\"background-color: #00FF00\""
      } 
      if( 
is_numeric$ape_pat ) ) 
         
$ape_pat $ape_pat."\" style=\"background-color: #FF0000\""
      if( 
is_numeric$ape_mat ) ) 
         
$ape_mat $ape_mat."\" style=\"background-color: #FF0000\""
      if( empty( 
$edad ) || !is_numeric$edad ) ) 
         
$edad $edad."\" style=\"background-color: #FF0000\"";
      if( empty( 
$sexo ) )
         
$sexo "nada"
      if( empty( 
$ocupacion ) )
         
$ocupacion "vacio"
      echo 
"<p>"
   } 

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>
<body>
<p>
Los campos marcados con asterisco (*) son obligatorios y  en cuanto a los apellidos, por lo menos debe escribir uno:</p>
<form action="<?php echo $SERVER['PHP_SELF']; ?>" method="post" name="forma">
<p>Nombre: 
    <input name="nombre" type="text" value="<?php echo $nombre?>" />
    <br />
Apellido Paterno: 
   <input name="ape_pat" type="text" value="<?php echo $ape_pat?>" /><br />
Apellido Materno:
   <input name="ape_mat" type="text" value="<?php echo $ape_mat?>" /><br />
Edad:
   <input name="edad" type="text" value="<?php echo $edad?>" /></br>
Sexo:
   Hombre<input type="radio" name="sexo" value="Hombre" <?php if( $sexo == "Hombre" ) echo "checked"; elseif( $sexo == "nada" ) echo "style=\"background-color: #FF0000\""?> >
   Mujer<input type="radio" name="sexo" value="Mujer" <?php if( $sexo == "Mujer" ) echo "checked"; elseif( $sexo == "nada" ) echo "style=\"background-color: #FF0000\""?> ></br>
Ocupación:
   <select name="ocupacion" <?php if( $ocupacion == "vacio" ) echo "style=\"background-color: #FF0000\""?> >
      <option value="">Seleccione una ocupación</option>
      <option value="director" <?php if( $ocupacion == "director" ) echo "selected"?> >Director</option>
      <option value="ejecutivo" <?php if( $ocupacion == "ejecutivo" ) echo "selected"?> >Ejecutivo</option>
      <option value="otro" <?php if( $ocupacion == "otro" ) echo "selected"?> >Otro</option>
   </select><p>
<input name="submit" type="submit" value="Enviar" /></p>
</form>
</body>
</html>
tupagina.php
Código PHP:
<?php 
$nombre 
$_POST['nombre']; 
$ape_pat $_POST['ape_pat']; 
$ape_mat $_POST['ape_mat']; 
$edad $_POST['edad'];
$sexo $_POST['sexo'];
$ocupacion $_POST['ocupacion'];
echo 
$nombre." ".$ape_pat." ".$ape_mat." ".$edad." ".$sexo." ".$ocupacion."<br>";
echo 
"Se enviaron los campos correctamente"
// hacemos lo que se nos antoje con las variables 
?>
Estoy tratando de enviar las variables del formulario a tupagina.php. pero no me las muestra, o sea , no funciona.

Saludos

The Neurochild

Última edición por The Neurochild; 17/04/2007 a las 07:53
  #24 (permalink)  
Antiguo 17/04/2007, 08:08
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 17 años, 7 meses
Puntos: 9
Re: Formulario + campos obligatorios + menus desplegables

El problema me parece es que cuando le das submit, vuelve a procesar la pagina y lo primero que hace es esto:
Código PHP:
$nombre ""
$ape_pat ""
$ape_mat ""
$edad ""
Quita esa parte y probalo nuevamente, para saber si es lo que te digo. Saludos
__________________
->Aprender es un proceso que incluye el error..
  #25 (permalink)  
Antiguo 17/04/2007, 08:42
 
Fecha de Ingreso: marzo-2007
Mensajes: 53
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Formulario + campos obligatorios + menus desplegables

Intenté y no funciona. Que otra sugerencia puede haber?
  #26 (permalink)  
Antiguo 17/04/2007, 09:16
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 17 años, 7 meses
Puntos: 9
Re: Formulario + campos obligatorios + menus desplegables

Hola, se me ocurre, no utilizar el mismo nombre de variable en los name de los input, es decir, ponerlo de la siguiente manera, proba modificando solamente este, si anda, modificas los otros:
Código PHP:
<input name="nombre2" type="text" value="<?php echo $nombre?>" />
Y en tupagina.php:
Código PHP:
nomb=$_POST['nombre2'
Proba a ver que pasa.
Saludos
__________________
->Aprender es un proceso que incluye el error..
  #27 (permalink)  
Antiguo 18/04/2007, 07:10
 
Fecha de Ingreso: marzo-2007
Mensajes: 53
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Formulario + campos obligatorios + menus desplegables

Voy a reformular la pregunta, ¿alguien sabe como mandar las variables de formulario.php a tupagina.php? averigüé en otro foro que al redireccionar, se pierde todo lo hecho en la primera página, puesto que el destino no está dentro de la sección "action" del formulario. Que solamente sirve usando variables session. Si conocen del tema, por favor manden un ejemplo con el uso de este tipo de variables...

saludos

The Neurochild
  #28 (permalink)  
Antiguo 18/04/2007, 09:10
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Formulario + campos obligatorios + menus desplegables

Cita:
Iniciado por usermax Ver Mensaje
De todas maneras te voy a dar mi punto de vista.
Además cuando rediriges a otra página vas a perder TODAS las variables POST. Y todo es inutil.

Por qué redirigir a otra página, hazlo todo en la misma!
No todo es inutil ya que la finalidad de redirigir al usuario es que no se vuelvan a procesar las variables si es que las variables fueron validas. Por ejemplo: Si la finalidad de este formulario fuera la de guardar los valores de los campos en una bd ¿que crees que sucedería si despues de guardar los datos en la bd, al usuario se le ocurre presionar el botón de "actualizar página"? ¿te imaginas cuantas veces se van a guardar los mismos datos en la bd; para eso es la redirección, de esta manera solucionaríamos este problema ya que aunque presionemos el boton actualizar ya no se procesaran otra vez estas secuencias de comando y lo unico que se actualizará será el mensaje de salida que tenemos en tupagina.php.
Cita:
Iniciado por cala932 Ver Mensaje
El problema me parece es que cuando le das submit, vuelve a procesar la pagina y lo primero que hace es esto:
Código PHP:
$nombre ""
$ape_pat ""
$ape_mat ""
$edad ""
Quita esa parte y probalo nuevamente, para saber si es lo que te digo. Saludos
Tienes razon en cuanto a que lo primero que se procesa son las variables vacias pero, para que no se quede por siempre ese valor estamos poniendo enseguida un condicional que nos dice: "si se presino el boton enviar...", aquí le asignamos el nuevo valor a estas variables que son los valores que enviamos mediante el metodo POST y de esta forma las variables ya no son vacias "en teoría" ya que el usuario puede enviarnos campos con espacios y esto lo resolvemos validando los campos despues.

Cita:
Iniciado por The Neurochild Ver Mensaje
Voy a reformular la pregunta, ¿alguien sabe como mandar las variables de formulario.php a tupagina.php? averigüé en otro foro que al redireccionar, se pierde todo lo hecho en la primera página, puesto que el destino no está dentro de la sección "action" del formulario. Que solamente sirve usando variables session. Si conocen del tema, por favor manden un ejemplo con el uso de este tipo de variables...
saludos
The Neurochild
Eso es totalmente cierto, para eso tienes que realizar todo lo que quieres hacer con esas variables antes de redireccionar, la finalidad de redireccionar es la que le acabo de expliacar al amigo usermax. Checa el ejemplo y ve lo que puse antes del header:
formulario.php
Código PHP:
<?php
// Valores por default de las variables
$nombre "";
$ape_pat "";
$ape_mat "";
$edad "";

if( isset( 
$_POST['submit'] ) )
{
   
// Creamos nombres de variables cortos
   
$nombre trim$_POST['nombre'] );
   
$ape_pat trim$_POST['ape_pat'] );
   
$ape_mat trim$_POST['ape_mat'] );
   
$edad trim$_POST['edad'] );
   
$sexo trim$_POST['sexo'] );
   
$ocupacion trim$_POST['ocupacion'] );
 
   
// validamos que se hayan enviado los campos nombre, edad y alguno de los 2 apellidos 
   
if( ( !empty( $nombre ) && !is_numeric$nombre ) ) && ( !empty( $ape_pat ) || !empty( $ape_mat ) ) && ( !is_numeric$ape_pat ) && !is_numeric$ape_mat ) ) && ( !empty( $edad ) && is_numeric$edad ) ) && !empty( $sexo ) && !empty( $ocupacion) )
   {
      
/*
         En esta parte haces todo lo que consideres necesario con las variables, por ejemplo
         se me ocurre que guardes estos datos en una bd. Despues de ejecutar el query y de verifi
         car que todo haya salido bien ahora si redirigimos hacia otra página para que le indiquemos
         al usuario que todo salio bien y que sus datos han sido guardos.
      */

      
header"Location: tupagina.php" );
      exit;
   }
   else
   {
      echo 
"Por favor corrija los campos marcados con rojo.</br>";
      if( empty( 
$nombre ) || is_numeric$nombre ) )
         
$nombre $nombre."\" style=\"background-color: #FF0000\"";
      if( empty( 
$ape_pat ) && empty( $ape_mat ) )
      {
         echo 
"Por favor, de los campos que estan marcados con verde llene alguno de ellos.</br>";
         
$ape_pat $ape_pat."\" style=\"background-color: #00FF00\"";
         
$ape_mat $ape_mat."\" style=\"background-color: #00FF00\"";
      }

      if( 
is_numeric$ape_pat ) )
         
$ape_pat $ape_pat."\" style=\"background-color: #FF0000\"";
      if( 
is_numeric$ape_mat ) )
         
$ape_mat $ape_mat."\" style=\"background-color: #FF0000\"";
      if( empty( 
$edad ) || !is_numeric$edad ) )
         
$edad $edad."\" style=\"background-color: #FF0000\"";
      if( empty( 
$sexo ) )
         
$sexo "nada";
      if( empty( 
$ocupacion ) )
         
$ocupacion "vacio";
      echo 
"<p>";
   }
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>
<body>
<p>
Los campos marcados con asterisco (*) son obligatorios y  en cuanto a los apellidos, por lo menos debe escribir uno:</p>
<form action="<?php echo $SERVER['PHP_SELF']; ?>" method="post" name="forma">
<p>Nombre:
    <input name="nombre" type="text" value="<?php echo $nombre?>" />
    <br />
Apellido Paterno:
   <input name="ape_pat" type="text" value="<?php echo $ape_pat?>" /><br />
Apellido Materno:
   <input name="ape_mat" type="text" value="<?php echo $ape_mat?>" /><br />
Edad:
   <input name="edad" type="text" value="<?php echo $edad?>" /></br>
Sexo:
   Hombre<input type="radio" name="sexo" value="Hombre" <?php if( $sexo == "Hombre" ) echo "checked"; elseif( $sexo == "nada" ) echo "style=\"background-color: #FF0000\""?> >
   Mujer<input type="radio" name="sexo" value="Mujer" <?php if( $sexo == "Mujer" ) echo "checked"; elseif( $sexo == "nada" ) echo "style=\"background-color: #FF0000\""?> ></br>
Ocupación:
   <select name="ocupacion" <?php if( $ocupacion == "vacio" ) echo "style=\"background-color: #FF0000\""?> >
      <option value="">Seleccione una ocupación</option>
      <option value="director" <?php if( $ocupacion == "director" ) echo "selected"?> >Director</option>
      <option value="ejecutivo" <?php if( $ocupacion == "ejecutivo" ) echo "selected"?> >Ejecutivo</option>
      <option value="otro" <?php if( $ocupacion == "otro" ) echo "selected"?> >Otro</option>
   </select><p>
<input name="submit" type="submit" value="Enviar" /></p>
</form>
</body>
</html>
tupagina.php
Código PHP:
<?php
// aunque se presione F5 o el botón de actualizar lo unico que se procesará será este
// mensaje de salida
echo "Se enviaron los campos correctamente"
?>
Creo que toda la confución la generé yo desde un principio al no explicarme bien, trate de ser lo más explicito que pude espero que ahora me hayan entendido mejor y que ahora si les trabaje bien su código. Suerte
  #29 (permalink)  
Antiguo 08/07/2011, 19:39
 
Fecha de Ingreso: julio-2011
Mensajes: 6
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Formulario + campos obligatorios + menus desplegables

Y como podria realizar un formulario que me permita convinar 3 o mas "checkbox" y 2 listas desplegables, y un cuadro de texto, y que todo se envie por correo.

Esto es para una pagina de una agencia de viajes...Gracias!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:33.