Foros del Web » Programando para Internet » PHP »

validacion sin perder informacion en php

Estas en el tema de validacion sin perder informacion en php en el foro de PHP en Foros del Web. Holas.. estoy haciendo unas pruebas.. en un formulario.... en el cual se valida si hay campos vacios al dar guardar .. pero la validacion esta ...
  #1 (permalink)  
Antiguo 23/02/2007, 16:38
 
Fecha de Ingreso: mayo-2006
Mensajes: 99
Antigüedad: 18 años, 6 meses
Puntos: 0
validacion sin perder informacion en php

Holas.. estoy haciendo unas pruebas.. en un formulario....
en el cual se valida si hay campos vacios al dar guardar ..
pero la validacion esta echa en php.... y ademas estoy tratando de que no se borren los datos.. que hallan sido ingresados previamente...
(la idea es no utilizar javascript)

bueno la idea la llevo mas o menos asi...
Código PHP:
<?php ob_start(); 
  
$server="localhost"/* Nuestro server mysql */
  
$database="PRUEBA"/* Nuestra base de datos */
  
$dbpass=""/*Nuestro password mysql */
  
$dbuser="root"/* Nuestro user mysql */
  
$conexion mysql_connect"$server""$dbuser""$dbpass");
  
mysql_select_db($database$conexion); 
if (!
ini_get("register_globals")) {
    
import_request_variables('GPC');
}

if (
$ingreso == "Guardar"){
  if ( empty(
$campo[0]) ){
     
header ("location: campos.php?campo[0]=$campo[0]&campo[1]=$campo[1]&campo[2]=$campo[2]");
     exit();
  }   
  else{
      
$sql="INSERT INTO prueba VALUES ('$campo[0]','$campo[1]','$campo[2]')";
      
$consl=mysql_query($sql);
      for (
$i=0$i <= 2$i++){
      
$campo[$i]="";
      echo
$i;
     }
  }
}
echo
"<htm>"
."<body>";
echo
"<form name= form1 action=campos.php method=POST>"
    
."<p>ID: <input type=text name='campo[0]' value='$campo[0]'></p>"
    
."<p>NOMBRE: <input type=text name='campo[1]' value='$campo[1]' ></p>"
    
."<p>TELEFONO: <input type=text name='campo[2]' value='$campo[2]'></p>"
    
."<input type=submit name=ingreso value=Guardar>"
    
."<input type=submit name=cancelar value=Cancelar>"    
."</form>"
."</body>"
."</htm>";
?>
claro.. como dije anteriormente todo tratado para no utilizar javascript... pero... creo que pueden haber mejor maneras de hacer esto en php... si alguien me puede dar una mano para mejorar el script.. o cambiarlo... no importa.. pero me gustaria que opinaran haber.. que pasa...... gracias de antemano...
__________________
El sabio puede sentarse en un hormiguero, pero sólo el necio se queda sentado en él
  #2 (permalink)  
Antiguo 23/02/2007, 23:42
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 8 meses
Puntos: 11
Re: validacion sin perder informacion en php

otra de las formas de hacerlo es almacenando tus valores POST en una variable de session en vez de pasar ese gran string via GET al momento de querer recuperar tus valores del formulario y al momento de redirecionar por algun error, pasar una variable get (camposvacios), y asi desplegar un mensaje amigable al usuario de que hay un error en el formulario y por eso no se ha podido procesar.

algo asi:



Código PHP:
<?php // ob_start(); 
  
session_start();
  
$server="localhost"/* Nuestro server mysql */
  
$database="PRUEBA"/* Nuestra base de datos */
  
$dbpass=""/*Nuestro password mysql */
  
$dbuser="root"/* Nuestro user mysql */
  
$conexion mysql_connect"$server""$dbuser""$dbpass") or die(mysql_error());
  
mysql_select_db($database$conexion); 


if (!
ini_get("register_globals")) {
import_request_variables('GPC');
}

if (
$ingreso == "Guardar"){
  if ( empty(
$campo[0]) ){
     
header ("location: campos.php?camposvacios=1");
     
$_SESSION['form'] = $_POST;
     exit();
  }   
  else{
      
$sql="INSERT INTO prueba VALUES ('$campo[0]','$campo[1]','$campo[2]')";
      
      if(
$consl=mysql_query($sql)){
      
header("location:insertadobien.php");
      exit;
      }else{
      
header("location:noinsertado.php");
      exit;
      }
    
    }
 }
if(isset(
$_SESSION['form']))
$valores $_SESSION['form'];
 
echo 
"<htm>"
."<body>";
echo 
"<form name= form1 action=campos.php method=POST>";

if(isset(
$_GET['camposvacios']) && (int)$_GET['camposvacios'] == 1){
echo(
'<span style="font:normal 1em Arial, \"Trebuchet MS\", Helvetica; color:red">no se permiten campos vacios</span>');
}

    echo 
"<p>ID: <input type='text' name='campo[0]' value='".$valores['campo[0]']."'></p>"
    
."<p>NOMBRE: <input type='text' name='campo[1]' value='".$valores['campo[1]']."' ></p>"
    
."<p>TELEFONO: <input type='text' name='campo[2]' value='".$valores['campo[2]']."'></p>"
    
."<input type='submit' name='ingreso' value='Guardar'>"  
."</form>"
."</body>"
."</htm>";
$_SESSION['form'] = NULL;
 
$valores NULL;
?>

PD: me parece interesante la funcion import_request_variables(), la agrego a mi lista.


un saludo.
__________________
http://dev.wsnetcorp.com
  #3 (permalink)  
Antiguo 24/02/2007, 07:25
 
Fecha de Ingreso: mayo-2006
Mensajes: 99
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: validacion sin perder informacion en php

Hola... gracias Ebe por tu respuesta.. ya estube probando tu codigo.y me parece bien.. pero vi un problema.. (claro para mi) . pues es que el scipt no me funcina si el campo texto tiene el nombre de esta forma name=campo[0]
me funciona bien cuando lo de je de asi name=campo0
y es que el problema es que necesito tener los nombres de los campos de esta forma...pues en algunos formularios hay bastantes campos... y suelo utilizar una pequeña ayuda del for para cargar datos de la base de datos o validar los datos...

algo asi... mas menos esta es la idea...
Código PHP:
//cargo los datos de la database al formulario,posiblemente para modificar
if ($boton == "Mostrar")
$sql="SELECT * FROM prueba";;
$res=mysql_query($sql);
$j=mysql_num_fields($res);
    while( 
$fila mysql_fetch_array$cursor ) ) {
    for (
$i=0$i <= $j$i++){
          
$campo[$i] = $fila[$i];    
        }  
    } 
}

//Funcion Validar Campo Vacio
function campo_vacio($inicio,$ncampos){//$incio la utilizo por si solo quiero //validar algunos campos.. claro teniendo en
// cuenta $ncampos, que es numero de campos que validare
//$campos=array();
if (empty($inicio)){
$inicio=0;
}
$ncampos=$ncampos-1;
$campos=$_POST['campo'];
    for (
$i=$inicio$i<=$ncampos$i++){
    
$campos[$i]=trim($campos[$i]);
        if ((empty(
$campos[$i])) || ($campos[$i] == '%'))
            
$k+=1;
        else
            
$k+=0;
    }
    return 
$k;

bueno... esto es...por lo que nesecito utiliozar name=campo[0] en mis formularios... agradezco como dije antes cualquier sugerencia o ayuda ....
gracias....
__________________
El sabio puede sentarse en un hormiguero, pero sólo el necio se queda sentado en él
  #4 (permalink)  
Antiguo 24/02/2007, 14:48
 
Fecha de Ingreso: mayo-2006
Mensajes: 99
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: validacion sin perder informacion en php

Bueno.... ya he solucionado algunas cosas.. y aqui esta el script casi terminado... digamne, que tal les parece.. y que se le puede mejorar.. espero opiniones... chao....


Código PHP:
<?php  ob_start(); 
  
session_start();
  
$server="localhost"/* Nuestro server mysql */
  
$database="PRUEBA"/* Nuestra base de datos */
  
$dbpass=""/*Nuestro password mysql */
  
$dbuser="root"/* Nuestro user mysql */
  
$conexion mysql_connect"$server""$dbuser""$dbpass") or die(mysql_error());
  
mysql_select_db($database$conexion); 


if (!
ini_get("register_globals")) {
import_request_variables('GPC');
}
//Funcion Validar Campo Vacio
function campo_vacio($inicio,$ncampos){
//$campos=array();
if (empty($inicio)){
$inicio=0;
}
$ncampos=$ncampos-1;
//$campos=$_POST['campo'];
    
for ($i=$inicio$i<=$ncampos$i++){
$campos=$_POST['campo'.$i];
    
//$campos[$i]=trim($campos[$i]);
    
$campos[$i]=trim($_POST['campo'.$i]);
        if ((empty(
$campos[$i])) || ($campos[$i] == '%'))
            
$k+=1;
        else
            
$k+=0;
    }
    return 
$k;
}

if (empty(
$nt)){
$nt=1;

if(isset(
$_SESSION['form']))
$valores $_SESSION['form'];
if (
$ingreso == "Guardar"){
$opc=1;
    
$campo_vc=campo_vacio('','3');
    if (
$campo_vc >= 1){
        
$_SESSION['form'] = $_POST
        
header ("location: camposSession.php?nt=2&opc=1");
        exit();
    } 
  else{
      
$_SESSION['form'] = NULL;
      
$valores NULL;
      
$sql="INSERT INTO usuario VALUES ('$campo0','$campo1','$campo2')";
      if(
$consl=mysql_query($sql)){
      
header("location: camposSession.php?nt=4");
      exit;
      }else{
      
header("location: camposSession.php?nt=3");
      exit;
      }
    
    }
 }
if (
$listar == "Listar"){
$opc=0;
$_SESSION['form'] = NULL;
$valores NULL;
            for (
$i=0$i <= 3$i++){
              
$campo='campo';
              
$campo.=$i;
              
              $
$campo "";
            } 
$sqlistar="SELECT * FROM usuario ";
$res=mysql_query($sqlistar);
    while (
$fila mysql_fetch_array($res)){
        echo
"<a href=camposSession.php?consulta=mod&usuario=$fila[0]>Usuario: $fila[1]</a>";
        echo
"<br>";
    }
}
if (
$consulta == "mod"){
    
$sqlistar="SELECT * FROM usuario WHERE id='$usuario'";
    
$res=mysql_query($sqlistar);
    
$j=mysql_num_fields($res); 
        while (
$fila mysql_fetch_array($res)){
            for (
$i=0$i <= $j$i++){
              
$campo='campo';
              
$campo.=$i;
              
              $
$campo $fila[$i];
            } 
        }
}

switch(
$nt){
    case 
'1'$titulo="REGISTRO DE CAMPOS"; break;
    case 
'2'$titulo="No se permiten campos vacios"; break;
    case 
'3'$titulo="Error: No se pudo guardar los datos"; break;
    case 
'4'$titulo="El ingreso de datos se llevo con Exito"; break;    
}


echo 
"<htm>"
."<body>";
echo
$opc;
echo
"<p style='font:normal 1em Arial color:red'>$titulo</p>";
echo 
"<form name= form1 action=camposSession.php method=POST>";
    echo 
"<p>ID: <input type='text' name='campo0'"; if ($opc == '1' ) echo"value='".$valores['campo0']."'";  else  echo"value='$campo0'"; echo" ></p>"
    
."<p>NOMBRE: <input type='text' name='campo1'"; if ($opc == '1' ) echo"value='".$valores['campo1']."'";  else  echo"value='$campo1'"; echo" ></p>"
    
."<p>TELEFONO: <input type='text' name='campo2'"; if ($opc == '1' ) echo"value='".$valores['campo2']."'";  else  echo"value='$campo2'"; echo" ></p>"
    
."<input type='submit' name='ingreso' value='Guardar'>" 
    
."<input type='submit' name='listar' value='Listar'>"  
."</form>"
."</body>"
."</htm>";
$_SESSION['form'] = NULL;
 
$valores NULL;
?>
__________________
El sabio puede sentarse en un hormiguero, pero sólo el necio se queda sentado en él
  #5 (permalink)  
Antiguo 24/02/2007, 23:03
 
Fecha de Ingreso: mayo-2006
Mensajes: 99
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: validacion sin perder informacion en php

Hola.. nuevamente... bueno he encontrado un problemilla... con los combos...

pues en algunos formularios utilizo estos para eleccion de algunos datos...
pero el poblema radica en que estos cargan el valor y seleccionan la opcion comparandola con la base de datos....
....aunque este no es problema realmente el error me lo da la utilizar los valores de session cuando hay un campo vacio...
aqui esta el codigo del combo...

Código PHP:
echo"<select name='vcampo6' class = 'Texto' style='width:137' tabindex=5 $yc >"
."<option value=% > Elija el Grado";
$sql "SELECT * FROM grado ORDER BY id";
$cursor1 mysql_query$sql$conexion );
    while( 
$row1 mysql_fetch_array$cursor1 ) ){
          
$row0b $row1[0];//dato id
      
$row1b$row1[1];//nombre
          
if( $row0b == $vcampo6 //si el dato almacenado es igual a alguno de la lista, se selecciona
            
echo " <option value=$row0b selected > $row1b";
          else
// sino se pone en la lista..
            
echo " <option value=$row0b          > $row1b";
      }
echo 
"</select>"
bueno... y qui estoy,,, algo ..perdido...ya he intentado algunas cosas... pero aun no me funciona... espero que alguien me pueda sacar de esta laguna... gracias de antemano...
__________________
El sabio puede sentarse en un hormiguero, pero sólo el necio se queda sentado en él
  #6 (permalink)  
Antiguo 26/02/2007, 12:19
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 8 meses
Puntos: 11
Re: validacion sin perder informacion en php

Bueno, al trabajar con los combobox deberias hacer algo como lo siguiente, dependiendo del medio donde estes almacenando los elementos a listar en el combobox (base de datos o quemados a mano, si es este ultimo deberias de asignar tus elementos del select en un array). ademas para seleccionar el valor guardado en la base de datos deberias de tener un query para seleccionar el listado de elementos y otro query que es el que previamente selecciono el usuario.

Si extraes tus opciones de una base de datos deberia ser algo asi:

Código PHP:
<?php
// aqui hice la solicitud de mis datos para el select a la base de datos, y el select de la opcion previamente seleccionada por el usuario.
// luego viene el while que los desplegara. y en algun medio debo tener el valor contra el que comparare mis elementos del select.

echo '<select name="procountryres"  class="form-fields" id="procountryres">';

while(
$cntries mysql_fetch_object($exec_ctry)){


// $cntries->country_id es igual al listado de elementos con los que alimento mi select.
// $all_personal['pro_country'] es igual a la opcion seleccionada previamente por el usuario y que estaba guardada en la base de datos.

if($cntries->country_id == $all_personal['pro_country']){ 

echo(
"<option value=\"$cntries->country_id\" selected=\"selected\">$cntries->country_name</option>\n");
}else{
echo(
"<option value=\"$cntries->country_id\">$cntries->country_name</option>\n");
                       }
                      }

echo 
'</select>';
                      
?>

ahora si los datos de tu option estan quemados a mano (que no los traes de la base de datos sino que los imprimes directamente en tu option seria algo asi:

Código PHP:
 <?php
$via 
= array('phone','email','both'); // array con los valores a aplicar al atributo value del option.

$via1 = array('Phone','e-mail','Both'); // array con los valores a desplegar entre las etiquetas <option>$via1</option>

echo '<select name="procomvia" class="form-fields" id="procomvia">';

// $all_personal['pro_com_via'] es igual al valor almacenado en la base de datos seleccionado previamente por el usuario.

for($x=0;$x<count($via);$x++){

if(
$via[$x] == $all_personal['pro_com_via']){

echo(
"<option value=\"$via[$x]\" selected=\"selected\">$via1[$x]</option>");

}else{

echo(
"<option value=\"$via[$x]\">$via1[$x]</option>");

        }
        }
echo 
'</select>';
     
?>
en la primera utilice mysql_fetch_object()y en la segunda mysql_fetch_array()


eso seria. espero entiendas la idea. Y si los datos necesitas compararlos con una variable de session solo cambia (en el ultimo ejemplo) $all_personal['pro_com_via'] por el nombre de la variable de session y su nombre de campo respectivo.

un saludo.
__________________
http://dev.wsnetcorp.com
  #7 (permalink)  
Antiguo 26/02/2007, 12:34
 
Fecha de Ingreso: mayo-2006
Mensajes: 99
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: validacion sin perder informacion en php

Hola,..Ebe.. gracias .. por tu respuesta.... aunque ya habia encontrado una solucion ...
en los combos que utilizo,.. la mayoria cargan sus datos de una database
y selecciona el elemento que encuentra en la consuta previa...
bueno.. ahora voy a ver tu solucion... haber.. cual me parece mejor..
.... ahh. ahora estoy tratando de solucionar otro problemilla en algunos formularios en los que tengo combos que denpende uno de otro.. osea que dependiendo el valor del primer combo cargo los valores.. del segundo...
aunque tengo ya el codigo.. y funcionaba perfectamente.. pero ahora con lo de las sessiones.. no se proque se me pierden los datos de el primer combo...

beuno pero eso es otra cosa...

aqui te dejo el codigo de como deje lo del combo... ahh y gracias de verdad....

Código PHP:
echo"<select name='vcampo6'  style='width:137' tabindex=5 $yc >"
 
."<option value=% > Elija el Grado";
$sql "SELECT * FROM tabla2 ORDER BY llave";
$cursor1 mysql_query$sql$conexion );
   while( 
$row1 mysql_fetch_array$cursor1 ) ){
         
$row0b $row1[0];
      
$row1b$row1[1];
          if( 
$row0b == $valor['vcampo6'] || $row0b == $vcampo6 
            echo 
" <option value=$row0b selected > $row1b";
          else
         echo 
" <option value=$row0b          > $row1b";
   }
echo 
"</select>"
__________________
El sabio puede sentarse en un hormiguero, pero sólo el necio se queda sentado en él
  #8 (permalink)  
Antiguo 26/02/2007, 13:02
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 8 meses
Puntos: 11
Re: validacion sin perder informacion en php

se me olvidaba sugerirte que utlices comillas dobles para encerrar los valores de los atributos de tus elementos, al igual que cierres tus elementos option asi:

<option> valor </option>

ya que asi estaras disenando tus paginas web con el enfoque a las reglas del xhtml.

te dejo este enlace.

http://www.w3.org/MarkUp/

un saludo.
__________________
http://dev.wsnetcorp.com
  #9 (permalink)  
Antiguo 26/02/2007, 13:23
 
Fecha de Ingreso: mayo-2006
Mensajes: 99
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: validacion sin perder informacion en php

..ok.. tienes.. razon... la verdad es que se me paso.... jejeje...
pero de todas formas gracias... ahh. y con respecto a tu respuesta anterior ... en base es igual a la solucion que le di a los combos...

bueno chao y un saludo....
__________________
El sabio puede sentarse en un hormiguero, pero sólo el necio se queda sentado en él
  #10 (permalink)  
Antiguo 27/02/2007, 16:55
 
Fecha de Ingreso: febrero-2007
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: validacion sin perder informacion en php

Hola a todos. Estoy intentando hacer lo que poneis en este post pero soy nueva y no entiendo mucho. Tengo un formulario con un montón de campos. Mi problema es, que como puedo asignar a $_SESSION['form'] los valores de todos los campos o cómo podría hacerlo.....

Espero que me podais ayudar...
  #11 (permalink)  
Antiguo 27/02/2007, 17:27
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 8 meses
Puntos: 11
Re: validacion sin perder informacion en php

muy bien muestranos tu formulario y el proceso para identificar datos invalidos o errores en el formulario.. ya con tu codigo sera mejor y mas facil el adaptar la idea a tu formulario en concreto.

un saludo.
__________________
http://dev.wsnetcorp.com
  #12 (permalink)  
Antiguo 27/02/2007, 17:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: validacion sin perder informacion en php

Os paso este formulario que es mucho más sencillo, en realidad lo voy a aplicar a formularios mucho más amplios por norma general, así que tengo que aprender. Supongo que sea más sencillo verlo en uno más pequeño.

Aquí hago la validación de usuarios:

Cita:
<form action="stats_index.php" method="post">
<table width="100%" border=0 align="center" style="border: 1px solid rgb(200, 200, 200);">
<tr><td height="20" colspan="3" align="center" bgcolor="#08538A"><font color="#FFFFFF" face="Verdana" size="2">
<b>Bienvenid@</b></font></td>
</tr>
<tr><td height="10" colspan="3"></td></tr>

<tr>
<td height="10" colspan="3"><table width="776" border="0">
<tr>
<td width="25">&nbsp;</td>
<td width="712" bgcolor="#DEE3E7"><div align="center"><font face="Verdana" size="2" color="#525152"><b>
<?php include "crear_bd.php" ?>
</b></font></div></td>
<td width="25">&nbsp;</td>
</tr>
</table></td>
</tr>
<tr>
<?php
if ($ColorTexto != "#FF0000") {
$ColorTexto = "#525152";}
?>
<td height="80" colspan="3" align="center"><font face="Verdana" size="2" color="<?php echo $ColorTexto ?>"><b>Introduzca un nombre de usuario y contraseña válidos:</b></font></td>
</tr>
<tr><td width="41%" align="right"><font face="Verdana" size="2" color="#525152"><b>Usuario</b></font>
<td width="2%"></td>
<td width="57%">
<input name="nombre_usuario" type="text" value="administrador"></td>
</tr>
<tr><td width="41%" align="right"><font face="Verdana" size="2" color="#525152"><b>Contraseña</b></font></td>

<td width="2%"></td>
<td width="57%">
<input type="password" name="password_usuario">
<font face="Verdana" size="1" color="#525152"><b> 'administrador'</b></font></td>
</tr>
<tr><td></td>

<td width="2%"></td>
<td width="57%">
<input type="submit" name="submit" value="Aceptar"> </td>
</tr>

<tr>
<td height="80" colspan="3" align="center" valign="middle"><img src="images/logo_urjc.jpg" width="100" height="40"> <span class="Estilo1">____</span><img src="images/logo_vido.jpg" width="50" height="28"></td>
</tr>
</table>
</form>
Y los errores los controlo aquí: (que por cierto, no me entra en el if, y debería, porque los valores son correctos)

Cita:
<?php
include 'constantes_bd.php';
include 'conectar_bd.php';

$nombrecookie = "admin";
$valcookie = $_COOKIE[$nombrecookie];

$pos = strpos ($valcookie,'@');
$administrador = substr ($valcookie,0,$pos);

$result = mysql_query ("SELECT * FROM administrador WHERE nombre_usuario='$administrador' and val_cookie='$valcookie' and estado='autenticado';") or die (mysql_error());
mysql_close ($link);

$autenticado= !(mysql_num_rows($result) < 1);

if (!$autenticado) {

$ColorTexto = "#FF0000";
include 'stats.php';
exit;
}

?>
  #13 (permalink)  
Antiguo 28/02/2007, 08:36
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 8 meses
Puntos: 11
Re: validacion sin perder informacion en php

primero te sugeriria que tengas por aparte tu proceso de de autenticacion de los usuarios, que es donde compruebas si el usuairo existe en el sistema o no, y es exactamente ahi donde debes crear una variable de session en la cual guardaras el array POST que contendra todos los valores de tu formulario para asi reinsertarlos a tu formulario. Resumamos tu formulario de la siguiente manera para que aclarar tu duda.


archivo formulario.php
Código PHP:
<?php
session_start
(); // session start debe ser llamada al principio de tu archivo.

if(isset($_SESSION['formulario'])) // compruebo si existe la variable de session que almacena los valores del form (inputs) enviados via $_POST
$posts $_SESSION['formulario']; // assigno esta variable de session a una variable local

if((int)$_GET['error'] == 1)
echo(
'usuario no existe en el sistema');
?>
<form id="login" action="procesa.php" method="post">
 <label for="usuario"> usuario: </label><input type="text" name="usuario" id="usuario" value="<?php $posts['usuario']; ?>" /><br />
  <label for="contrasena">contrase&ntilde;a:</label><input type="text" name="contrasena" id="contrasena" />
  <br />
  <input type="button" name="logearse" value="Iniciar session" />
</form>

al momento de desear procesar los datos deberias tener un script algo asi.


<?php

session_start();

include 'constantes_bd.php';
include 'conectar_bd.php';

$nombrecookie = "admin";
$valcookie = $_COOKIE[$nombrecookie];

$pos = strpos ($valcookie,'@');
$administrador = substr ($valcookie,0,$pos);

$result = mysql_query ("SELECT * FROM administrador WHERE nombre_usuario='$administrador' and val_cookie='$valcookie' and estado='autenticado';") or die (mysql_error());
mysql_close ($link);

if (mysql_num_rows($result) > 0) {

// aqui redirecionas al archivo stats.php, es mejor asi asi separas tus procesos de tus presentaciones de datos.

header('location:stats.php');
exit;

}else{ // el usuario no existe de modo que creas una variable de session donde almacenas los datos del post y redirecionas nuevamente a formulario.php

$_SESSION['formulario'] = $_POST; // asignamos todos los valores que vengan por post a la variable de session formulario
header("location:formulario.php?error=1"); // redirecciono y paso un valor via get para mostrar un mensaje al usuario de que ha habido un error.
exit;

?>

con este ejemplo basico tienes la idea base de como regresar los valores insertados en tu formulario en caso de algun error. Todo esta en asignar a una variable de sesion los valores almacenados en el array $_POST (ahora si usas get en el metodo del formulario debes cambiarlo por $_GET)

Espero haber resuelto tu duda.

un saludo.
__________________
http://dev.wsnetcorp.com

Última edición por ebe; 28/02/2007 a las 08:40 Razón: little fixes. // add error message in formulario.php
  #14 (permalink)  
Antiguo 28/02/2007, 10:37
 
Fecha de Ingreso: febrero-2007
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: validacion sin perder informacion en php

Muy bien, pero cuando hago esto:

Cita:
$nombrecookie = "admin";
$valcookie = $_COOKIE[$nombrecookie];

$pos = strpos ($valcookie,'@');
$administrador = substr ($valcookie,0,$pos);
En la 2º línea que asigna a $valcookie, luego la imprimo por pantalla y me la devuelve vacía. No entiendo porqué.
  #15 (permalink)  
Antiguo 28/02/2007, 11:30
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 8 meses
Puntos: 11
Re: validacion sin perder informacion en php

no veo en donde es que (en primer lugar) estas enviando la cookie al cliente utilizando la funcion setcookie()

http://www.php.net/manual/es/function.setcookie.php

ademas no creo que se pueda asignar el nombre a una cookie (o crear una cookie utilizando la matriz $_COOKIE) como lo haces, (corregirme si estoy equivocado), ya que esta matriz te sirve para acceder los valores de las cookies que has enviado al cliente.

Creo que por ahi puede estar tu problema.

un saludo.
__________________
http://dev.wsnetcorp.com
  #16 (permalink)  
Antiguo 14/04/2011, 21:39
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: validacion sin perder informacion en php

Holaaa!!!!... soy nuevo en esto y he tratado de entender la logica para no perder los datos del formulario (sin javascript), pero no la encuentro... he logrado hacer un formulario y validarlo y enviarlo a un correo electronico desde otro archivo php, pero yo quiero que cuando tenga algun error me regrese a la pagina anterior y los datos que se ingresaron bien no se borren. Aqui estan mis codigos:

Del formulario, en galeriap.html

Cita:
<form id="form1" name="form1" method="post" action="send.php">
<p>
<label for="txt_nombre">Nombre Completo: </label>
<input name="txt_nombre" type="text" id="txt_nombre" size="30" value="<?php echo $_POST[txt_nombre];?>"/>
</p>

<p>
<label for="txt_correo">Correo Electronico:</label>

<input name="txt_correo" type="text" id="txt_correo" size="30" />
</p>
<p>
<label for="txt_telefono">Teléfono: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;Celular: <br />
</label>
<input name="txt_telefono" type="text" id="txt_telefono" size="10" /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input name="txt_movil" type="text" id="txt_movil" size="10" />
</p>
<p>Mensaje:
<label for="txt_mensaje"></label>
<textarea name="txt_mensaje" id="txt_mensaje" cols="40" rows="5"></textarea>
</p>
<p>Especifique en su mensaje desde que dia y cuantos dias necesita reservar, pronto el administrador estará en contacto con usted.</p>
<p>
<input type="submit" name="btn_enviar" id="btn_enviar" value="Enviar" />
</p>
</form>
y aqui la de php, send.php

Cita:
<?php

# Guarda los campos del form
$nombre = $_POST['txt_nombre'];
$mail = $_POST['txt_correo'];
$telefono = $_POST['txt_telefono'];
$celular = $_POST['txt_movil'];
$mensaje = $_POST['txt_mensaje'];

# Validacion de nulos para cada campo

if ($nombre == ""){
echo 'Ingrese su nombre completo';
}else
if ($mail == ""){
echo'Ingrese su correo electronico';
}else
if ($telefono == ""){
echo 'Ingrese su teléfono';
}else
if ($celular == ""){
echo 'Ingrese su teléfono móvil';
}else
if ($mensaje == ""){
echo 'Ingrese algún mensaje';


# Caso contrario, procedo a enviar el email
}else{

$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje = "Este mensaje fue enviado por " . $nombre . ", desde www.mipagina.cl. \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Mensaje: " . $mensaje . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());
$mensaje .="Contacto Telefonico: " . $telefono . " - " . $celular;

$para = '[email protected]';
$asunto = 'Contacto para reservacion de cabaña';

if (mail($para, $asunto, utf8_decode($mensaje), $header)) {

echo 'Mensaje enviado Correctamente';
}
else {
echo 'Error inesperado. El mensaje no se envio.';

}
}

echo "<meta http-equiv=Refresh content=\"3 url= {$_SERVER['HTTP_REFERER']} \">";

?>
Cualquier ayuda seria bueno,

intente colocar
value="<?php echo $_POST [txt_nombre];?>" en cada item del formulario (habiendo transpormado galerip.html en php pero no paso nada
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 12:58.