Foros del Web » Programando para Internet » PHP »

Mantener el contenido en un formulario

Estas en el tema de Mantener el contenido en un formulario en el foro de PHP en Foros del Web. tengo la siguiente inquietud: Tengo un formulario donde ese ingresa datos de un beneficiario cuando envio los datos atravez de un boton submit este me ...
  #1 (permalink)  
Antiguo 14/09/2005, 09:48
 
Fecha de Ingreso: agosto-2005
Mensajes: 192
Antigüedad: 12 años, 3 meses
Puntos: 0
Mantener el contenido en un formulario



tengo la siguiente inquietud:

Tengo un formulario donde ese ingresa datos de un beneficiario cuando envio los datos atravez de un boton submit este me validad los cambos y si no es valido me recarga la pagina. Como hago para que no me borre los datos digitados en los campos de texto y me permitan modificar solo aquellos donde deseo cambiar la informacion.

Este es el codigo:

if($siguiente == "") {
?>

<?php
}else do{
if($numdoc == ""){
?>
<script>
location="ingresarcegreso.php";
alert ("Error: El campo Numero documento es de tipo Obligatorio");
</script>
<?php
}else if ($planilla == ""){
?>
<script>
location="ingresarcegreso.php";
alert ("Error: El campo Planilla es de tipo Obligatorio");
</script>
<?php
}else if ($nit == "" ){
?>
<script>
location="ingresarcegreso.php";
alert ("Error: El campo Nit es de tipo Obligatorio");
</script>
<?php
}else if ($anolapso == "" ){
?>
<script>
location="ingresarcegreso.php";
alert ("Error: El campo Año Lapso es de tipo Obligatorio");
</script>
<?php
}else if ($meslapso == "" ){
?>
<script>
location="ingresarcegreso.php";
alert ("Error: El campo Mes Lapso es de tipo Obligatorio");
</script>
<?php
}else if ($indcu == ""){
?>
<script>
location="ingresarcegreso.php";
alert ("Error: El campo C.U es de tipo Obligatorio");
</script>
<?php
}else if ($anodoc == ""){
?>
<script>
location="ingresarcegreso.php";
alert ("Error: El campo Año fecha documento es de tipo Obligatorio");
</script>
<?php
}else if ($mesdoc == ""){
?>
<script>
location="ingresarcegreso.php";
alert ("Error: El campo Mes fecha documento es de tipo Obligatorio");
</script>
<?php
}else if ($diadoc == ""){
?>
<script>
location="ingresarcegreso.php";
alert ("Error: El campo Dia fecha documento es de tipo Obligatorio");
</script>
<?php
}else if ($vrdoc == "" ){
?>
<script>
location="ingresarcegreso.php";
alert ("Error: El campo Valor documento es de tipo Obligatorio");
</script>
<?php
}else if ($detadoc == ""){
?>
<script>
location="ingresarcegreso.php";
alert ("Error: El campo Detalle documento es de tipo Obligatorio");
</script>
<?php
}else if ($anolapso <> $anodoc){
?>
<script>
location="ingresarcegreso.php";
alert ("Error: El año Lapso - año Fecha Documento deben ser iguales");
</script>
<?php
}else if ($meslapso <> $mesdoc){
?>
<script>
location="ingresarcegreso.php";
alert ("Error: El mes Lapso - mes Fecha Documento deben ser iguales");
</script>
<?php
} // Fin del if

}while($numdoc == "" or $planilla == "" or $nit == "" or $anolapso == "" or $meslapso == "" or $indcu == ""
or $anodoc == "" or $mesdoc == "" or $diadoc == "" or $vrdoc == "" or $detadoc == "" or
$anolapso <> $anodoc or $meslapso <> $mesdoc); // Fin while


//-------------------------------------------------------------------------------------------------------
//Consulta que muestra los datos del formulario Ingresar Comprobante de Egreso

if($siguiente == "Siguiente"){
$conn = conectar(); // Llama a la funcion de conexion a la BD
$sql1 = ("select numdoc from documento where numdoc = $numdoc");
$respu1 = mysql_query($sql1);
$res1 = mysql_num_rows($respu1);

$sql2 = ("select b.nit from beneficiario b, documento d where b.nit = d.nit && b.nit = $nit");
$respu2 = mysql_query($sql2);
$res2 = mysql_num_rows($respu2);

if($res1 > 0) {
?>
<script>
location="ingresarcegreso.php";
alert ("ERROR: El Documento ya existe en la Base de Datos");
</script>
<?php
}else if($res2 == 0){
?>
<script>
location="ingresarcegreso.php";
alert ("ERROR: El Nit o CC ingresado no existe en la BD");
</script>
<?php
}else if($res1 == 0) {
$sql1 = "insert into documento (numdoc,tipo,planilla,anolapso,meslapso,nit,indcu, anodoc,mesdoc,diadoc,vrdoc,detadoc,descripuser)
values ('$numdoc', 'CP', '$planilla', '$anolapso', '$meslapso', '$nit', '$indcu',
'$anodoc', '$mesdoc', '$diadoc', '$vrdoc', '$detadoc', 'Oficina central')";
$respu1 = mysql_query($sql1);
}//fin del else
?>
<script>
alert ("Contabilice las cuentas para el Comprobante");
location="ingresarcontabcegreso.php";
</script>
<?php

}//fin del if
?>


Gracias por la colaboracion.
  #2 (permalink)  
Antiguo 14/09/2005, 09:57
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 12 años, 6 meses
Puntos: 2
Hola, para tu consulta se me ocurren 2 soluciones (seguro hay mas que 2) una es con una cookie cuando llega al script que valida los campos, los datos se carguen en una cookie y en el formulario te fijas si existe la cookie y rellenas si debe hacerlo, o exactamente lo mismo pero con sessiones. Pero ojo los datos guardados en la cookie's no tienen que ingresar directamente a la DB porque podria ser catastrofico , solamente se deben mostrar no ingresar.

La proxima vez que hagas una consulta trata de usar los tag's para colorear el codigo PHP para que sea mas facil revisar el codigo.

Saludos.
  #3 (permalink)  
Antiguo 14/09/2005, 10:19
Avatar de Vaalegk  
Fecha de Ingreso: abril-2005
Mensajes: 154
Antigüedad: 12 años, 7 meses
Puntos: 2
Bueno...
como sugerencias podria decirte hagas los checkeos que puedas en JS antes de mandar el submit(ademas checkea en tu script). para mantener los valores antiguos postealos a la forma nuevamente y en la forma recoge esos valores.
otra segerencia seria que no redirecciones hasta encontrar todos los errores.
dado que resultaria engorroso una nueva carga para encontrar que tenia otro error.

Código PHP:
<?php
$error
=false;
$errmsg=array();
$destination="ingresarcegreso.php";
if(
$tuchequeo1){
 
$errmsg["campo_del_error"]="mensaje de error";
 
$error=true;
}
/*... haces todos tus chequeos 
y al FINAL de manera que muestres todos los errores encotrados
*/
if($error){
 
$url=$destination.'?'.$tus_campos_y_valores;
 
header('Location:'.$url);
}

/*EN tu forma obtienes esos valores por $_GET o $_REQUEST y los pones 
en el value de tus input*/
Otra opcion seria estructurar el script por stratos en el mismo archivo de tal manera que:

1-Logica PHP
2-Forma


Bueno espero haber sido de ayuda...
  #4 (permalink)  
Antiguo 14/09/2005, 10:46
 
Fecha de Ingreso: agosto-2005
Mensajes: 192
Antigüedad: 12 años, 3 meses
Puntos: 0
Vaalegk no entendi....



Ahi envio todo el codigo completo del formualrio ... Me puedes colaborar.


Código PHP:

<HTML><HEAD><TITLE>SIGDOC - Sistema Gestor de documentos</TITLE>
<META 
content="Sistema Gestor de documentos" 
name=description>
<META content=TRUE name=MSSmartTagsPreventParsing>
<META 
content="Sistema Gestor de documentos" 
name=keywords>
<META content=All name=Robots>
<META content=7 name=revisit-after>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content=www.industriasintegradas.com name=author>
<META content="MSHTML 6.00.2900.2627" name=GENERATOR></HEAD>
<META content=global name=distribution><LINK 
href="../SCRIPST/estilos.css" 
type=text/css rel=stylesheet>
<BODY bgColor=#a2aace>

<script language="javascript"> 
/***Función que visualiza fecha y hora del sistema***/
function hoy(){ 
    fecha = new Date(); 
    dia = fecha.getDate(); 
    mes = fecha.getMonth(); 
    ano = fecha.getFullYear(); 
    dia_semana = fecha.getDay(); 
    hora = fecha.getHours();
    minutos = fecha.getMinutes(); 
    nombre_dias = new Array("Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"); 
    nombre_meses = new Array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"); 
    document.write(" Colombia, " + nombre_dias[dia_semana]+ " " + dia + " de " + nombre_meses[mes] + " de " + ano + " - " + hora + ":" + minutos); 

</script> 

<script language="JavaScript">
/***Función Para Validar el boton atras de las opciones de loguearse***/
function atras() {
    if(confirm('¿Esta seguro de regresar al Menu Principal?'))   
    location = "Menu.php";
}/*fin del if*/ 
</script>

<script language="JavaScript">
/***Función Para Validar el boton atras de las opciones de loguearse***/
function cerrar() {
     if(confirm('¿Esta seguro de cerrar esta ventana?')){   
        window.close();
    }/*fin del if*/ 
}
</script>

<script language="JavaScript">
/***Función para válidar que el valor entrado en el campo sea un número***/
function validar_numero(campo){
/*Creamos un objeto String con el valor entrado en el campo*/
    var numero = campo.value;
    datos = new String(numero);
/*recorremos todo el objeto y validamos que toda la cadena sea de numeros*/

    for(i=0;i<datos.length;i++){
    if((datos.charAt(i)<'0')||(datos.charAt(i)>'99')){
       alert("Error...El valor debe ser numerico!");
   exit; 
  }/*fin del if*/
 }/*fin del for*/ 
}/*Fin de la función validar número*/

</script>

<?php
    
function conectar() { 
      if (!(
$link=mysql_connect("localhost","root",""))) { 
       echo 
"Error conectando a la base de datos."
       exit(); 
       } 
       if (!
mysql_select_db("sigdoc",$link)) { 
         echo 
"Error seleccionando la base de datos."
         exit(); 
        } 
       return 
$link
     } 
     
$link=conectar(); 

?>

<form name="form1" method="post" action="">

  <?php 

 
//Validacion del Boton   

    
if($siguiente == "") { 
  
// Aqui van los formularios .... 

    
<?php
     
}else do{
         if(
$numdoc == ""){
         
?>
          <script>
              location="ingresarcegreso.php";
              alert ("Error: El campo Numero documento es de tipo Obligatorio");  
         </script>
          <?php
         
}else if ($planilla == ""){
         
?>
          <script>
              location="ingresarcegreso.php";
              alert ("Error: El campo Planilla es de tipo Obligatorio");  
         </script>
          <?php 
         
}else if ($nit == "" ){
         
?>
          <script>
              location="ingresarcegreso.php";
              alert ("Error: El campo Nit es de tipo Obligatorio");  
         </script>
          <?php 
         
}else if ($anolapso == "" ){
         
?>
          <script>
              location="ingresarcegreso.php";
              alert ("Error: El campo Año Lapso es de tipo Obligatorio");  
         </script>
          <?php 
         
}else if ($meslapso == "" ){
         
?>
          <script>
              location="ingresarcegreso.php";
              alert ("Error: El campo Mes Lapso es de tipo Obligatorio");  
         </script>
          <?php 
         
}else if ($indcu == ""){
         
?>
          <script>
              location="ingresarcegreso.php";
              alert ("Error: El campo C.U es de tipo Obligatorio");  
         </script>
          <?php 
         
}else if ($anodoc == ""){
         
?>
          <script>
              location="ingresarcegreso.php";
              alert ("Error: El campo Año fecha documento es de tipo Obligatorio");  
         </script>
          <?php 
         
}else if ($mesdoc == ""){
         
?>
          <script>
              location="ingresarcegreso.php";
              alert ("Error: El campo Mes fecha documento es de tipo Obligatorio");  
         </script>
          <?php 
         
}else if ($diadoc == ""){
         
?>
          <script>
              location="ingresarcegreso.php";
              alert ("Error: El campo Dia fecha documento es de tipo Obligatorio");  
         </script>
          <?php 
         
}else if ($vrdoc == "" ){
         
?>
          <script>
              location="ingresarcegreso.php";
              alert ("Error: El campo Valor documento es de tipo Obligatorio");  
         </script>
          <?php 
         
}else if ($detadoc == ""){
         
?>
          <script>
              location="ingresarcegreso.php";
              alert ("Error: El campo Detalle documento es de tipo Obligatorio");  
         </script>
          <?php 
         
}else if ($anolapso <> $anodoc){
         
?>
          <script>
              location="ingresarcegreso.php";
              alert ("Error: El año Lapso - año Fecha Documento deben ser iguales");  
         </script>
          <?php 
         
}else if ($meslapso <> $mesdoc){
         
?>
          <script>
              location="ingresarcegreso.php";
              alert ("Error: El mes Lapso - mes Fecha Documento deben ser iguales");  
         </script>
          <?php 
        
// Fin del if
           
     
}while($numdoc == "" or $planilla == "" or $nit == "" or $anolapso == "" or $meslapso == "" or $indcu == ""
            
or $anodoc == "" or $mesdoc == "" or $diadoc == "" or $vrdoc == "" or $detadoc == "" or 
            
$anolapso <> $anodoc or $meslapso <> $mesdoc); // Fin while


//-------------------------------------------------------------------------------------------------------
    //Consulta que muestra los datos del formulario Ingresar Comprobante de Egreso 

    
if($siguiente == "Siguiente"){
     
$conn conectar(); // Llama a la funcion de conexion a la BD
     
$sql1 = ("select numdoc from documento where numdoc = $numdoc");         
     
$respu1 mysql_query($sql1); 
     
$res1 mysql_num_rows($respu1);
     
     
$sql2 = ("select b.nit from beneficiario b, documento d where b.nit = d.nit && b.nit = $nit");         
     
$respu2 mysql_query($sql2); 
     
$res2 mysql_num_rows($respu2);
     
     if(
$res1 0) {
        
?>
    <script>
          location="ingresarcegreso.php";
          alert ("ERROR: El Documento ya existe en la Base de Datos");  
        </script>
    <?php
        
}else if($res2 == 0){
             
?>
              <script>
                location="ingresarcegreso.php";
                alert ("ERROR: El Nit o CC ingresado no existe en la BD");  
              </script>
            <?php
          
}else if($res1 == 0) {
             
$sql1 "insert into documento (numdoc,tipo,planilla,anolapso,meslapso,nit,indcu,anodoc,mesdoc,diadoc,vrdoc,detadoc,descripuser) 
                     values ('$numdoc', 'CP', '$planilla', '$anolapso', '$meslapso', '$nit', '$indcu',
                            '$anodoc', '$mesdoc', '$diadoc', '$vrdoc', '$detadoc', 'Oficina central')"
;
             
$respu1 mysql_query($sql1); 
             }
//fin del else 
     
?>
    <script>
                alert ("Contabilice las cuentas para el Comprobante");  
               location="ingresarcontabcegreso.php";
              </script>
    <?php
     
     
}//fin del if
?>
  </p>
  </div>
</form>
<p>&nbsp;</p>
</body>
</html>
  #5 (permalink)  
Antiguo 14/09/2005, 11:19
Avatar de Vaalegk  
Fecha de Ingreso: abril-2005
Mensajes: 154
Antigüedad: 12 años, 7 meses
Puntos: 2
Sonrisa

Bueno... te puedo dar guias dado que es la mejor manera de entender el problema y solucionarlo, con lo que si te puedo colaborar directamente es con la validacion JS...

http://xsite.identity-dev.com/testlab/jslib.js

esta es una libreria JS que hice con funcionalidad que te puede servir en tus formas

solo usa onSubmit="return jsValidateForm(this);" en tu forma
y en los campos que deseas validar pon en el html los atributos validation="la_validacion_que_quieres" y validationMsg="Mensaje de error",
ademas asegurate de ponerle un id a tu campo
las validadiones disponibles son "empy" y "numeric" y "mail" estas con bien
simples (invierto mi tiempo en otras partes de la libreria...)

puedes registrar tus propias validaciones con

jsRegisterFormValidator(nombre,tu_function);

ejemplo de campo:

<input id="campo1" name="campo1" validation="empty" validationMsg="Debes poner algo...">

por lo de PHP

solo te digo que en vez de tener una redireccion por cada error, que almacenes ese error en una variable y que despues verificas a traves de una
variable de estado si existio un error, si existio algun error redireccionar.
el punto aqui es que la redireccion debe llevar de alguna manera los valores
de tus campos ya sea como dijo DarioDario con cookies o sessiones o por la url. en todo caso en tu forma debes "recojer" estos valores ($_COKKIES,$_SESSION,$_GET) dependiendo de donde vienen y ponerlos en los values de tu forma.. ejemplo:

Código PHP:
<?php
function xRequest($key$param,$ret='')  //funcion de utileria
{
    return isset(
$param[$key])?$param[$key]:$ret;
}

$valor=xRequest('campo1',$_GET);
?>
<input id="campo1" name="campo1" value="<?=$valor?>"
validation="empty" validationMsg="Debes poner algo...">
  #6 (permalink)  
Antiguo 14/09/2005, 11:38
 
Fecha de Ingreso: agosto-2005
Mensajes: 192
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Tienes un ejemplo practico

No entiendo ese enredo



tienes un ejemplo practico. Un ejercicio concreto de lo que dices donde apliques la forma de validar?.

La verdad ya estoy extresado.

Gracias.
  #7 (permalink)  
Antiguo 14/09/2005, 13:37
Avatar de Vaalegk  
Fecha de Ingreso: abril-2005
Mensajes: 154
Antigüedad: 12 años, 7 meses
Puntos: 2
bueno aqui hay algo...
en esta direccion lo puede ver correr
http://xsite.identity-dev.com/testlab/formtest.php

el script es este(algo feo pero funciona)
Código PHP:
<?php
/*
Ejemplo bastante sencillo y con muchas posibilidades de modificacion
*/
/*******************************Utilerias::BEGIN*/
function xRequest($key$param,$ret=''
{
    return isset(
$param[$key])?$param[$key]:$ret;
}

/********************************End***/
$campo1=xRequest('campo1',$_REQUEST);
$campo2=xRequest('campo2',$_REQUEST);
$campo3=xRequest('campo3',$_REQUEST);
$mode=xRequest('mode',$_POST);
$errores=xRequest('errores',$_REQUEST,array());
$msg="Llene la forma";
$error=false;
if(
$mode=='submit'){
    
    
$errores=array();
    if(!
$campo1){
        
$errores['campo1']='Campo1 es requerido';
        
$error=true;
    }
    if(!
$campo2){
        
$errores['campo2']='Campo2 tambien es requerido';
        
$error=true;
    }else{
        if(!
is_numeric($campo2)){
            
$errores['campo2']='Campo2 debe ser numerico';
            
$error=true;
        }
    }
    if(!
$campo3){
        
$errores['campo3']='Campo3 es requerido, es mas todos son requeridos :-)';
        
$error=true;
    }
    if(!
$error){
        
$msg='<font color="#0000FF"><b>Todo salio COOL</b></font>';
    }else{
    
/*
    Aqui hay dos formas de proseguir, una es redireccionar a si mismo con los errores o simplemente dejar sequir el script.
    Dejar seguir el script causaria que si refrescan la pagina despues de un post, los datos del post serian mandados nuevamente.
    */
        //armar cadena de error
        
$url='';
        foreach(
$_POST as $campo=>$valor){
            
$url.=$campo.'='.$valor.'&';
        }
        foreach(
$errores as $campo=>$err){
            
$url.='errores['.$campo.']='.$err.'&';
        }
        
        
header('Location:'.$_SERVER['PHP_SELF'].'?'.$url);
    }
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<style>
.error{
color:#FF0000;
font-weight:bold;}
</style>
<script src="jslib.js"></script>
<script>
function sinJS(){
    frm=jsGetObject('forma');
    frm.onsubmit=function(){return true;}
    frm.submit();
}
</script>
<body>
Forma:<br>
STATUS[<?=$msg?>]
<hr>
<form method="post" id="forma" onSubmit="return jsValidateForm(this)" >
<input type="hidden" name="mode" value="submit">
<fieldset style="width:320px;">
<label>Campo1 : requerido</label><br>
<input type="text" id="campo1" name="campo1" value="<?=$campo1?>" validation="empty" validationMsg="LLena el campo1" >
<div class="error"><?=xRequest('campo1',$errores)?></div>
<label>Campo2 : requerido+numerico</label><br>
<input type="text" id="campo2" name="campo2" value="<?=$campo2?>" validation="numeric"  validationHint="required" validationMsg="Este campo debe ser numerico" ><br>
<div class="error"><?=xRequest('campo2',$errores)?></div>
<label>Campo3 : requerido</label><br>
<textarea type="text" id="campo3" name="campo3" validation="empty" validationMsg="LLena este tambien"><?=$campo3?></textarea><br>
<div class="error"><?=xRequest('campo3',$errores)?></div>
<input type="submit" value="Testear Con JS...">
<button type="button" onClick="sinJS()">Testear sin JS</button>
<button type="button" onClick="document.location.href='formtest.php'">Resetear</button>

</fieldset>
</form>
</body>
</html>
  #8 (permalink)  
Antiguo 14/09/2005, 15:00
 
Fecha de Ingreso: agosto-2005
Mensajes: 192
Antigüedad: 12 años, 3 meses
Puntos: 0
Gracias mi pana....

Gracias mil gracias ....

... ahora si funciona.

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 16:57.