Foros del Web » Programando para Internet » PHP »

Duda de cómo validar un mismo formulario para varias acciones

Estas en el tema de Duda de cómo validar un mismo formulario para varias acciones en el foro de PHP en Foros del Web. Hola, mi duda en la siguiente tengo una página en donde realizo el mantenimiento de usuarios (Nuevo, Modificación y Borrado). Utilizo solo un formulario en ...
  #1 (permalink)  
Antiguo 01/03/2009, 17:40
 
Fecha de Ingreso: septiembre-2007
Mensajes: 73
Antigüedad: 16 años, 7 meses
Puntos: 0
Duda de cómo validar un mismo formulario para varias acciones

Hola, mi duda en la siguiente tengo una página en donde realizo el mantenimiento de usuarios (Nuevo, Modificación y Borrado).

Utilizo solo un formulario en donde depende de la accion =(Modifica o Nuevo) realizo las validaciones según el caso. Utilizo javascript para asegurarme de que los campos que son requeridos sean ingresados.

Pero es ahi donde viene cómo puedo hacer para que a la hora de ingresar al método (Nuevo, Modifica) si hay algun error no me borre todos los datos del formulario que ya se ingresaron por el error, he tratado de utilizar el $_POST según el método y que lo mande a cada campo, pero no me funciona..

Aquí pongo el código:

Código HTML:
<table width="800" align="center" cellpadding="0" cellspacing="0">
      
      <tr>
        <td colspan="2">&nbsp;</td>
  </tr>
      <tr>
        <td></td>
        <td><div align="right">* Datos requeridos por el sistema</div></td>
      </tr>
      <tr>
        <td colspan="2">
        	<form id="frmusuario" name="frmusuario" method="post" action="<?php  if($_GET['accion']=="mostrar"){print "$PHP_SELF?accion=modifica";}else{print "$PHP_SELF?accion=hacernuevo";} ?>">
            <table width="561" height="190" align="center" cellpadding="0" cellspacing="4" class="box" >
              <tr>
                <td width="551" height="180"><table width="483" align="center" cellpadding="0" cellspacing="0">
                    <tr>
                      <td>Nombre</td>
                      <td><label>
                        <input name="nomcon" type="text" class="INPUT" id="nomcon" value="<? echo $nomcon?>" size="45" maxlength="30"/>
                      *</label></td>
                    </tr>
                    <tr>
                      <td>Apellido</td>
                      <td><label>
                        <input name="apecon" type="text" class="INPUT" id="apecon" value="<? echo $apecon?>" size="45" maxlength="30"/>
                      *</label></td>
                    </tr>
                    <tr>
                      <td>Correo electrónico</td>
                      <td><label>
                        <input name="dircor" type="text" class="INPUT" id="dircor" value="<? echo $dircor?>" size="45" maxlength="50"/>
                      *</label></td>
                    </tr>
                    <tr>
                      <td width="183">Usuario</td>
                      <td width="298"><label>
                        <input name="ideusu" type="text" class="INPUT" id="ideusu" value="<? echo $ideusu?>" size="30" maxlength="20"  />
                      *</label></td>
                    </tr>
                    <tr>
                      <td>Contrase&ntilde;a</td>
                      <td><label>
                      <input name="conusu" type="password" class="INPUT" id="conusu" value="<? echo $conusu?>" size="30" maxlength="20" />
                      *</label></td>
                    </tr>
                    <tr>
                      <td>Confirmar contrase&ntilde;a</td>
                      <td><label>
                        <input name="conusu2" type="password" class="INPUT" id="conusu2" value="<? echo $conusu?>" size="30" maxlength="20"/>
                      *</label></td>
                    </tr>
                    <tr>
                      <td>Nivel</td>
                      <td><label>
                        <select name="nivusu" id="nivusu" class="select">
                          <option value="1">Administrador</option>
                          <option value="2">Usuario</option>
                      </select>
                      </label></td>
                    </tr>
                    <tr>
                      <td>&nbsp;</td>
                    <td><div align="right">
                          <input name="codusu" type="hidden" id="codusu" value="<? echo $codusu ?>" />
                          <input type="button" name="enviar" id="enviar" value="Aceptar" class="button" onClick="javascript:validate();" />
                          <input name="limpiar" type="reset" class="button" id="limpiar" value="Limpiar" />
                      </div></td>
                    </tr>
                    
                </table></td>
              </tr>
            </table>
            <div align="center"><span class="mensaje">
            <?php
				echo $error_accion_ms[$error_cod];
			?>
            </span></div>
   		  </form> </td>
      </tr>
      <tr>
        <td colspan="2" class="normal"><h3>Usuarios del sistema</h3></td>
      </tr>
      <tr>
        <td colspan="2"><table width="773" height="50" align="center" cellpadding="0" cellspacing="4" class="box" >
        <tr>
              <td width="763" height="40"><table width="779" align="center" cellpadding="0" cellspacing="0">
				<tr>
                    <td width="60" class="boxtitle">Modificar</td>
                    <td width="49" class="boxtitle">Eliminar</td>
                    <td width="228" class="boxtitle">Nombre</td>
                    <td width="195" class="boxtitle">Correo electr&oacute;nico</td>
                    <td width="106" class="boxtitle">Usuario</td>
                    <td width="70" class="boxtitle">Nivel</td>
                    <td width="69" class="boxtitle">Creaci&oacute;n</td>
				</tr>
					<?php
						while($resultados = mysql_fetch_array($usuario_consulta)) {
					 ?>
                  <tr>
                    <td><div align="center"><?php print "<a href=\"$pag?accion=mostrar&id=$resultados[codusu]\">"; ?><img src="img/modificar.gif" alt="Modificar" width="20" height="20" border="0" class="img"/ ></div></td>
                    <td><div align="center"><?php print "<a href=\"$pag?accion=borrar&id=$resultados[codusu]\">"; ?><img src="img/eliminar.gif" alt="Eliminar" width="20" height="20" border="0" class="img"/></a></div> </td>
                    <td><?php echo $resultados[nomusu];?></td>
                    <td><?php echo $resultados[dircor];?></td>
                    <td><?php echo $resultados[ideusu];?></td>
                    <td><?php echo $resultados[nivusu];?></td>
                    <td><?php echo $resultados[feiusu];?>
                    <div align="right"></div></td>
                  </tr>
                  <?php 
						}//fin del while de la consulta de usuarios
						mysql_free_result($usuario_consulta);
				  ?>
              </table></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td colspan="2">&nbsp;</td>
      </tr>
      
      <tr>
        <td colspan="2"> </td>
      </tr>
    </table> 
Código PHP Nuevo y Modifica
Código PHP:
    // 3. Método que modifica registros de usuarios de la base de datos
    
if ($_GET['accion']=="modifica"){
    
        
$post_codusu=$_POST['codusu'];
        
$post_nomcon=$_POST['nomcon'];
        
$post_apecon=$_POST['apecon'];
        
$post_dircor=$_POST['dircor'];
        
$post_ideusu=$_POST['ideusu'];
        
$post_conusu=$_POST['conusu'];
        
$post_conusu2=$_POST['conusu2'];
        
$post_nivusu=$_POST['nivusu'];

        if (
$post_nomcon=="" or $post_apecon=="" or $post_dircor=="" or $post_ideusu=="" or $post_conusu=="" or $post_conusu2=="") {
            
header ("Location: $pag?error=1");
            exit;
        }
        
        
mysql_query("UPDATE $tabla_usudat SET ideusu='$post_ideusu', conusu='$post_conusu', nivusu='$post_nivusu' WHERE codusu=$post_codusu") or die(mysql_error());
        
mysql_close ();
        
header ("Location: $pag");
        exit;
    }    
    
    
// 3. Método que inserta registros de usuarios de la base de datos
    
if ($_GET['accion']=="hacernuevo"){
    
        
$post_codusu=$_POST['codusu'];
        
$post_nomcon=$_POST['nomcon'];
        echo 
$post_nomcon;
        
$post_apecon=$_POST['apecon'];
        
$post_dircor=$_POST['dircor'];
        
$post_ideusu=$_POST['ideusu'];
        
$post_conusu=$_POST['conusu'];
        
$post_conusu2=$_POST['conusu2'];
        
$post_nivusu=$_POST['nivusu'];

        if (
$post_nomcon=="" or $post_apecon=="" or $post_dircor=="" or $post_ideusu=="" or $post_conusu=="" or $post_conusu2=="") {
            
header ("Location: $pag?error=1");
            exit;
        }
        if (
$post_codusu != $post_codusu2){
            
header ("Location: $pag?error=2");
            exit;
        }

        
$usuarios_consulta mysql_query("SELECT codusu FROM $tabla_usudat WHERE ideusu='$post_ideusu'") or die(mysql_error());
        
$total_encontrados mysql_num_rows ($usuarios_consulta);
        
mysql_free_result($usuarios_consulta);
        
        if (
$total_encontrados != 0) {
            
header ("Location: $pag?error=4");
            exit;
        }
        
        
$post_ideusu=stripslashes($post_ideusu);
        
$post_conusu md5($pconusu);
        
mysql_query("INSERT INTO $tabla_usudat values('','$post_ideusu','$post_conusu','$post_nivusu')") or die(mysql_error());
        
mysql_close();
        
header ("Location: $pag");
        exit;
    } 
Gracias por la ayuda
  #2 (permalink)  
Antiguo 01/03/2009, 18:09
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Duda de cómo validar un mismo formulario para varias acciones

en vez de esto:

Código PHP:
Ver original
  1. if ($post_nomcon=="" or $post_apecon=="" or $post_dircor=="" or $post_ideusu=="" or $post_conusu=="" or $post_conusu2=="") {
  2.             header ("Location: $pag?error=1");



Hace esto:
Código PHP:
Ver original
  1. if ($post_nomcon=="" || $post_apecon=="" || $post_dircor=="" || $post_ideusu=="" || $post_conusu=="" || $post_conusu2=="") {
  2.             header ("Location: $pag?error=1");


En el IF el or es ||
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos
  #3 (permalink)  
Antiguo 01/03/2009, 18:59
 
Fecha de Ingreso: septiembre-2007
Mensajes: 73
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Duda de cómo validar un mismo formulario para varias acciones

Cita:
Iniciado por tata009 Ver Mensaje
en vez de esto:

Código PHP:
Ver original
  1. if ($post_nomcon=="" or $post_apecon=="" or $post_dircor=="" or $post_ideusu=="" or $post_conusu=="" or $post_conusu2=="") {
  2.             header ("Location: $pag?error=1");



Hace esto:
Código PHP:
Ver original
  1. if ($post_nomcon=="" || $post_apecon=="" || $post_dircor=="" || $post_ideusu=="" || $post_conusu=="" || $post_conusu2=="") {
  2.             header ("Location: $pag?error=1");


En el IF el or es ||

Gracias por la respuesta, si ese error del or se me habia pasado, pero igual si me funcionaba.

Pero realmente eso no es lo que esta malo, es como asignar el $_POST a cada input para que no se borre cuando entra en alguna de esas validaciones.

Gracias
  #4 (permalink)  
Antiguo 01/03/2009, 19:08
 
Fecha de Ingreso: diciembre-2007
Mensajes: 927
Antigüedad: 16 años, 4 meses
Puntos: 12
Respuesta: Duda de cómo validar un mismo formulario para varias acciones

creo que con JS podrias hacer eso solo se borran las passwords

Código javascript:
Ver original
  1. window.back();


y en el IF en php si puedes poner 'or' o '||' en JS no
  #5 (permalink)  
Antiguo 01/03/2009, 20:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda de cómo validar un mismo formulario para varias acciones

Lo ideal es que no hagas una redirección si no que manejes con un if y cheque si hay errores para mostrar los datos nuevamente por POST.

Saludos
  #6 (permalink)  
Antiguo 01/03/2009, 21:44
 
Fecha de Ingreso: septiembre-2007
Mensajes: 73
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Duda de cómo validar un mismo formulario para varias acciones

Cita:
Iniciado por GatorV Ver Mensaje
Lo ideal es que no hagas una redirección si no que manejes con un if y cheque si hay errores para mostrar los datos nuevamente por POST.

Saludos
Hola, gracias por la respuesta, pero me podrias dar maso menos una idea de como hacerlo es que ya he intentado y no me ha salido.

Gracias
  #7 (permalink)  
Antiguo 01/03/2009, 22:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda de cómo validar un mismo formulario para varias acciones

Pues algo simple:
Código php:
Ver original
  1. <?php
  2. if( isset( $_POST['submit'] ) ) {
  3.        $noErrors = true;
  4.        $errors = array();
  5.        if( empty( $_POST['nombre'] ) ) {
  6.               $noErrors = false;
  7.               $errors['nombre'] = "Debe de escribir un nombre";
  8.        }
  9.        if( !is_numeric( $_POST['edad'] ) ) {
  10.               $noErrors = false;
  11.               $errors['edad'] = "Debe de escribir su edad en numeros";
  12.        }
  13.  
  14.        if( $noErrors ) {
  15.              // aqui haces todo tu proceso de insercion, registro, etc.
  16.              header("Location: exito.php");
  17.        }
  18. }
  19. ?>
  20. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  21. <input type="text" name="nombre" value="<?php echo $_POST['nombre']; ?>" /> <?php if( !empty( $errors['nombre'] )) { echo $errors['nombre']; } ?>
  22. <input type="text" name="edad" value="<?php echo $_POST['edad']; ?>" /> <?php if( !empty( $errors['edad'] )) { echo $errors['edad']; } ?>
  23. <input type="submit" name="submit" value="Registrarse" />
  24. </form>

Saludos
  #8 (permalink)  
Antiguo 01/03/2009, 22:44
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Duda de cómo validar un mismo formulario para varias acciones

GatorV, seria posible ahorrar algunas lineas si en lugar de crear $noErrors solo se crea $errors y la comparacion se hace:

Código php:
Ver original
  1. if( count($errors) == 0 ) {
  2.              // aqui haces todo tu proceso de insercion, registro, etc.
  3.              header("Location: exito.php");
  4.        }
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 01/03/2009, 23:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda de cómo validar un mismo formulario para varias acciones

Claro de hecho se puede resumir mucho más la idea era dejar una idea simple y entendible de como hacerlo.

Saludos
  #10 (permalink)  
Antiguo 02/03/2009, 00:58
 
Fecha de Ingreso: septiembre-2008
Mensajes: 350
Antigüedad: 15 años, 7 meses
Puntos: 31
Respuesta: Duda de cómo validar un mismo formulario para varias acciones

y cooperando mas con la verificación si un caja de texto etc esta vacía
he descubierto un truco para evadir la función empty() y por supuesto
alguien que le gusta hacer trampa seguro que se la sabe
y es que al presionar la tecla espacio en una caja de texto la función empty()
se la cree que no esta vacía
aquí unos ejemplos:
Código HTML:
<form action="" method="post">
<input name="name" type="text">
<input name="" type="submit" value="Enviar">
</form> 
Código PHP:
<?php
if(isset($_POST['name'])){
//si presionas la Tecla Espacio en la caja de texto name el resultado siempre sera, true
if(empty($_POST['name'])){
echo 
'Error!!';
}else{
echo 
$_POST['name'].' True';
 }
}
?>
al presionar la tecla Espacio en la caja de texto name una o mas veces
el resultado sera true.
ahora al usar este código el Resultado sera Falso.
Código PHP:
<?php
if(isset($_POST['name'])){
$nameb $_POST['name'];
/*
//aqui con la funcion  trim() quita el truco de la tecla Espacio
//pero esto es lo que dice la web de php ---------
trim
(PHP 4, PHP 5)
trim — Elimina espacios en blanco (u otros caracteres) del principio y final de una cadena
*/
$nameb trim($nameb);
if(
$nameb == ""){
echo 
'Error!!';
}else{
echo 
$nameb.' True';
 }
}
?>
pero esto es lo que dice la web de php
---------http://us3.php.net/manual/es/function.trim.php
trim
(PHP 4, PHP 5)
trim — Elimina espacios en blanco (u otros caracteres) del principio y final de una cadena
---------
entonces se puede usar esto

Código PHP:
<?php
if(isset($_POST['name'])){
$namec $_POST['name'];
if(
$namec == '' || $namec == ' '){
echo 
'Error!!';
}else{
echo 
$namec.' True';
 }
}
?>
pero que pasa si se presiona la Tecla Espacio mas de 2 veces el Resultado sera true

entonces aquí hay otro truco
Código PHP:
<?php
if(isset($_POST['name'])){
$namec $_POST['name'];
$namec ereg_replace(' +'' '$namec);
if(
$namec == '' || $namec == ' '){
echo 
'Error!!';
}else{
echo 
$namec.' True';
 }
}
?>
pero al escribir una palabra así:
esto tienes un espacio-------------------------------------------- largo.
use esto --- en ves de espacio porque aquí no se permiten
el resultado sera normal: esto tienes un espacio largo.
entonces eso queda a criterio de cada quien si quiere permitir espacios largos.
espero le sea útil a alguien que "quiera al menos una letra" en una caja de texto
__________________
╬-----╬
║☺₧☻║
╬-----╬
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 03:22.