Foros del Web » Programando para Internet » PHP »

Como reenvio a un formulario una variable, porque no cumple cierta condicion ?

Estas en el tema de Como reenvio a un formulario una variable, porque no cumple cierta condicion ? en el foro de PHP en Foros del Web. Soy algo novato en esto pero me las voy arreglando bastante bien, pero me surgio un problema, cree una pagina PHP en donde recibo los ...
  #1 (permalink)  
Antiguo 27/07/2004, 13:32
 
Fecha de Ingreso: julio-2003
Ubicación: Capital Federl
Mensajes: 60
Antigüedad: 20 años, 9 meses
Puntos: 0
Como reenvio a un formulario una variable, porque no cumple cierta condicion ?

Soy algo novato en esto pero me las voy arreglando bastante bien, pero me surgio un problema, cree una pagina PHP en donde recibo los datos de un formulario en la cual hago varias verificaciones ( si los campos estan completos, si ingresaron todos los digitos solicitados, si el email es correcto, etc.) esas comparaciones las hago con las sentencis IF , ahora cuando todo se cumple , todo ok, el problema lo tengo cuando alguna de las condiciones no se cumple y quiero que se vuelva al formulario de ingreso con algun mensaje informando que tal o cual cosa no esta completa. Mi pregunta es cual es la sentencia que tengo de utilizar para que esto ocurra ??, supongo que tendre que poner el nombre del formulario ?? y junto con eso puedo enviar alguna variable como para que el mensaje que me muestre sea distinto dependiendo del valor de la variable que envio ??

Desde les agradezco si me pueden dar una mano en esto !
  #2 (permalink)  
Antiguo 27/07/2004, 14:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La rutina de validación seria tipo:

procesa.php
Código PHP:
<?
// validaciones
//si hay error
header ("Location: formulario.php?codigo=1");
exit;

// Y lo mismo deberías hacer cuando termines el proceso que tengas que hacer si todo fué bien .. Redireccionar hacia otro script/página .. nunca quedarte en el script/proceso, por qué .. una recarga de página ocasionaría que nuevamente se procese tu script con lo que ello conllevaría según haga tu script (registros duplicados, e-mails re.enviados .. etc)
?>
Y en formulario.php (o script aparte destinado únicamente a mostrar errores) filtras tu variable de control que te llegará por GET .. en este ejemplo el "codigo" con un valor. Según su valor podrás hacerte tus if() o mejor todavía switch() o arrays (usando como indice ese valor) para mostrar el mensaje de error en consecuencia.

Por ejemplo

formulario.php
Código PHP:
<?
if (isset($_GET['codigo'])){
    
$mensajes[1]="Blablabla";
    
$mensajes[2]="Otro Blablabla";
    
// etc ..
    
   // pequeña validación de código ..
   
if ($_GET['codigo'] > && <= count($mensajes)){
       echo 
"Mensaje: ".$mensajes{$_GET['codigo']};
   } else {
       echo 
"Error: Id código adulterado!!!";
   }
}
Al volver al formulario ..notaras que habrás perdido las variables que el formulário pudiera tener .. para eso debes propagar las variables que recibes en "procesa.php" hacia formulario.php, esta propagación de variables puedes hacerlas por el URL, cookies o sesiones.

En principio .. por el URL sería cosa de añadir tus variables al URL que redireccionas:

Código PHP:
header ("Location: formulario.php?codigo=1&variable=<? echo urlencode($_POST['variable']) ?>");
// GET o POST según uses en tu method de tu formulario <form .. method=...
Y así con el resto (o bien propagar el array $_GET/$_POST que es el que contiene tus variables entero usando las técnicas que menciona esta FAQ: http://www.forosdelweb.com/showthrea...072#post262072)

En tu formulario .. en los campos (input) tendrás que pre-establecer su valor tipo:
Código PHP:
<input name="variable" value="<? echo stripslashes($_GET['variable']) ?>">
Pero, es más óptimo para estos casos usar una variable de sesión (en las FAQ's hay un poco de documentación al respecto).

Las funciones que he usado.. si quieres ver que són o hacen puedes usar:
www.php.net/nombre_función

Un saludo,

Última edición por Cluster; 27/07/2004 a las 14:36
  #3 (permalink)  
Antiguo 28/07/2004, 16:21
 
Fecha de Ingreso: julio-2003
Ubicación: Capital Federl
Mensajes: 60
Antigüedad: 20 años, 9 meses
Puntos: 0
Todo bien lo que me explicaste, pero estoy haciendo algo similar a lo que me decis pero me sigue dando el siguiente error "Warning: Cannot modify header information - headers already sent by (output started at c:\my documents\miswebs\chequear.php:8) in c:\my documents\miswebs\chequear.php on line 10"

Que estoy haciendo mal, quise hacer un scrip sencillo y me aparecio esto te lo mando a ver si me podes ayudar
entrar.php
<form name="form1" method="post" action="CHEQUEAR.php">
NOMBRE
<input name="NOMBRE" type="text" id="NOMBRE">
<input type="submit" name="Submit" value="Enviar">
</form>
<p><?
if (isset($_GET['codigoerror=1'])) { echo ("el campo ingresado esta vacio");}
?>

Chequear.php
<?
$nombre = $_POST["nombre"];
if (strlen($nombre)==0); header ("locaction:entrar.php?codigoerror=1") ;
echo ("$nombre")
?>

Desde ya muchas gracias
  #4 (permalink)  
Antiguo 28/07/2004, 16:35
 
Fecha de Ingreso: septiembre-2003
Mensajes: 265
Antigüedad: 20 años, 7 meses
Puntos: 1
lo que pudes hacer es
donde tienes el <form......
en al action lo dejas action=""

y en el boton aceptar le pones name="aceptar"

luego dentro del php

al principio colocas
if($aceptar)
{
que te haga la verificacion

}
else
{

aqui va el html
donde ingresa los datos

}

no se si me explico..................
  #5 (permalink)  
Antiguo 28/07/2004, 16:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El error te dice que tienes algo de HTML, espacios o saltos de línea en chequear.php linea 8

Tu chequear.php .. debería ser algo tipo:
Código PHP:
<? 
$nombre 
$_POST["nombre"];
if (
strlen($nombre)==0){
 
header ("locaction: entrar.php?codigoerror=1");
 exit;
}
echo (
"$nombre")
?>
Sin nada más de HTML ahí o por lo menos antes de header() ... Date cuenta que si hay un error .. se redirecciona automáticamente y antes de que puedas enviar nada de HTML al navegador.

Un saludo,
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:37.