Foros del Web » Programando para Internet » PHP »

Recorrer campos de un formulario para no repetir un aviso de Incompleto continuamente

Estas en el tema de Recorrer campos de un formulario para no repetir un aviso de Incompleto continuamente en el foro de PHP en Foros del Web. Hola. Estoy haciendo pruebas con un formulario en el cual cuando envío los datos si algún campo está vacío marca "Incompleto" y a la vez ...
  #1 (permalink)  
Antiguo 22/06/2011, 18:56
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 19 años, 10 meses
Puntos: 65
Recorrer campos de un formulario para no repetir un aviso de Incompleto continuamente

Hola.

Estoy haciendo pruebas con un formulario en el cual cuando envío los datos si algún campo está vacío marca "Incompleto" y a la vez lo estoy pasando al color rojo en html.

Por ejemplo con el campo nombre:

Código PHP:
Ver original
  1. <label for="nombre">Nombre:</label>
  2. <input type="text" id="nombre" name="nombre" value="<?php if(isset($_POST['nombre']) && $_POST['nombre'] == "")
  3. {echo "Incompleto";} else {echo $_POST['nombre'];} ?>"
  4.  <?php
  5. //---------Aquí lo paso al color rojo si sigue vacio o como "Incompleto"
  6. if(isset($_POST['nombre']) && $_POST['nombre'] == "" or $_POST['nombre'] == "Incompleto" )
  7. {echo 'class="aviso-formulario"';}
  8. ?>
  9.  /><br />

El siguiente sería por ejemplo apellidos:

Código PHP:
Ver original
  1. <label for="apellidos">Apellidos:</label>
  2. <input type="text" id="apellidos" name="apellidos" value="<?php if(isset($_POST['apellidos']) && $_POST['apellidos'] == "") {echo "Incompleto";} else {echo $_POST['apellidos'];} ?>"
  3.      
  4. <?php
  5. //-----Aquí lo paso de nuevo al color rojo si sigue vacio o como "Incompleto"
  6. if(isset($_POST['apellidos']) && $_POST['apellidos'] == "" or $_POST['apellidos'] == "Incompleto" )
  7. {echo 'class="aviso-formulario"';}
  8.  ?>    
  9.  /><br />

Es decir por cada nuevo campo añado el siguiente codigo para que haga el aviso en rojo:

Código PHP:
Ver original
  1. <?php
  2. //-----Aquí lo paso de nuevo al color rojo si sigue vacio o como "Incompleto"
  3. if(isset($_POST['apellidos']) && $_POST['apellidos'] == "" or $_POST['apellidos'] == "Incompleto" )
  4. {echo 'class="aviso-formulario"';}
  5.  ?>


Si tengo 4 o 5 campos no le veo problema pero si quisiera hacer lo mismo con 10 o 15 campos más como dirección, teléfono, cp etc etc... ¿tengo que ir uno a uno cambiando siempre el nombre de cada campo input o hay otra opción con un bucle, array o creando una función?

Saludos.
  #2 (permalink)  
Antiguo 22/06/2011, 21:28
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.339
Antigüedad: 12 años, 11 meses
Puntos: 177
Respuesta: Recorrer campos de un formulario para no repetir un aviso de Incompleto co

Hola se me ocurre algo asi:

Código PHP:
Ver original
  1. <?php
  2. function campoVacio($valor_del_imput)
  3. {
  4.     if($valor_del_imput=="")
  5.     {
  6.     echo 'class="aviso-formulario"';
  7.     }
  8.    
  9. }
  10.  
  11. ?>
  12.  
  13.  
  14.  
  15.  
  16. <label for="nombre">Nombre:</label>
  17. <input type="text" id="nombre" name="nombre" value="<?php if(isset($_POST['nombre']) && $_POST['nombre'] == "")
  18. {echo "Incompleto";} else {echo $_POST['nombre'];} ?>"
  19.  <?php campoVacio($_POST['nombre']);?>
  20.  /><br />



Pero igualmente lo tenés que hacer uno por uno






.
__________________
la la la
  #3 (permalink)  
Antiguo 22/06/2011, 21:34
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 13 años, 8 meses
Puntos: 1517
Respuesta: Recorrer campos de un formulario para no repetir un aviso de Incompleto co

Primero para verificar si un campo está vacio con tan solo empty() es suficiente. Lo otro, esa es una de las partes más tediosas para trabajar. Debes hacer validaciones de cada campo que consideres requisito y que no puede estar vacio y también mostrar el aviso correspondiente. Si tienes 10 campos que son requisitos y no pueden estar vacios, debes hacer 10 validaciones y 10 avisos. Podrías preparar un funcion que todo aquello que se repita lo use, pero sabes que debes colocar esa función en los 10 lugares.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 23/06/2011, 01:36
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 14 años, 5 meses
Puntos: 2236
Respuesta: Recorrer campos de un formulario para no repetir un aviso de Incompleto co

Por lo general, cuando creo formularios, incluyo un texto en cada campo que indica al usuario como llenarlo y, al hacer las validaciones, puedes usar una matriz asociativa para marcar los que no se llenaron correctamente, de forma que puedas utilizar una sola funcion para mostrar la ayuda y errores:

Código PHP:
Ver original
  1. $errores = array();
  2. // Validar nombre:
  3. $nombre = trim($_POST['nombre']);
  4. if(strlen($nombre) < 3 || strlen($nombre) > 20) {
  5.       $errores['nombre'] = 'El nombre debe contener entre 3 y 20 caracteres, ahora tiene: ' . strlen($nombre);
  6. }
  7.  
  8. // Despues, en el formulario:
  9. echo "<label for=\"nombre\">Nombre:</label>\n";
  10. echo "<input type=\"text\" name=\"nombre\" id=\"nombre\" value=\"$nombre\" size=\"20\" maxlength=\"20\" />\n";
  11. ayuda_error('nombre', 'Por favor teclea tu nombre.');
  12.  
  13. // Y la funcion para mostrar ayuda o errores:
  14. function ayuda_error($campo, $ayuda) {
  15.     global $errores;
  16.     if(isset($errores[$campo])) {
  17.         // Aqui muestras el mensaje de error, con estilo CSS si es necesario
  18.     } else {
  19.         // Aqui muestras la ayuda
  20.     }
  21. }

Realmente no es tan complicado, incluso tengo funciones para crear campos de formulario (input text, select, checkbox, radio, textarea y botones) y estoy trabajando en una clase, aunque no se si realmente llegue a usarla, depende de como me adapte en el proyecto que estoy trabajando.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 23/06/2011, 06:08
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 12 años
Puntos: 209
Respuesta: Recorrer campos de un formulario para no repetir un aviso de Incompleto co

pero para eso no es usa js ???
de todas formas es bueno revisar de nuevo las variables en el php, pero sin mensajes ni nada, solo x un tema de seguridad
  #6 (permalink)  
Antiguo 23/06/2011, 06:19
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 13 años, 8 meses
Puntos: 1517
Respuesta: Recorrer campos de un formulario para no repetir un aviso de Incompleto co

El js es una "añadidura". La real verificación se tiene que hacer del lado del servidor.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 23/06/2011, 06:22
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 12 años
Puntos: 209
Respuesta: Recorrer campos de un formulario para no repetir un aviso de Incompleto co

claro siempre hay que volver a verificar en el servidor, solo que pensaba que los mensajes básicos, como obligatorio, y solo número, mail invalido, etc se hacía desde el js
  #8 (permalink)  
Antiguo 24/06/2011, 08:56
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 19 años, 10 meses
Puntos: 65
Respuesta: Recorrer campos de un formulario para no repetir un aviso de Incompleto co

Cita:
Iniciado por truman_truman Ver Mensaje
Hola se me ocurre algo asi:

Código PHP:
Ver original
  1. <?php
  2. function campoVacio($valor_del_imput)
  3. {
  4.     if($valor_del_imput=="")
  5.     {
  6.     echo 'class="aviso-formulario"';
  7.     }
  8.    
  9. }
  10.  
  11. ?>
  12.  
  13.  
  14.  
  15.  
  16. <label for="nombre">Nombre:</label>
  17. <input type="text" id="nombre" name="nombre" value="<?php if(isset($_POST['nombre']) && $_POST['nombre'] == "")
  18. {echo "Incompleto";} else {echo $_POST['nombre'];} ?>"
  19.  <?php campoVacio($_POST['nombre']);?>
  20.  /><br />



Pero igualmente lo tenés que hacer uno por uno






.
Hola truman_truman, me ha servido de mucho tu explicación, es más incluso he metido la opción value dentro de la misma función y así me ahorro todavía más código

Código PHP:
Ver original
  1. <?php
  2. function incompleto($valor_input)
  3. {
  4. if(isset($valor_input) && $valor_input == "" || $valor_input == "Incompleto")
  5. {echo "value=\"Incompleto\"";
  6. echo ' class="aviso-formulario"';}
  7. else {echo "value=\"$valor_input\"";}
  8. }
  9. ?>
  10. <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
  11. <legend>Tomador</legend>
  12.     <fieldset>
  13.         <legend>Datos personales</legend>
  14.         <!-- TEXT -->
  15.         <label for="nombre">Nombre:</label>
  16.         <input type="text" id="nombre" name="nombre" <?php incompleto($_POST['nombre']);?> /><br />
  17.         <label for="apellidos">Apellidos:</label>
  18.         <input type="text" id="apellidos" name="apellidos" <?php incompleto($_POST['apellidos']);?> /><br />
  19. <label for="direccion">Dirección:</label>
  20.         <input type="text" id="direccion" name="direccion" <?php incompleto($_POST['direccion']);?> /><br />
  21. <label for="dni">D.N.I.</label>
  22.         <input type="text" id="dni" name="dni" <?php incompleto($_POST['dni']);?> /><br />

Cita:
Iniciado por abimaelrc Ver Mensaje
Primero para verificar si un campo está vacio con tan solo empty() es suficiente. Lo otro, esa es una de las partes más tediosas para trabajar. Debes hacer validaciones de cada campo que consideres requisito y que no puede estar vacio y también mostrar el aviso correspondiente. Si tienes 10 campos que son requisitos y no pueden estar vacios, debes hacer 10 validaciones y 10 avisos. Podrías preparar un funcion que todo aquello que se repita lo use, pero sabes que debes colocar esa función en los 10 lugares.
Gracias de nuevo por la explicación abimaelrc, más o menos es lo que imaginaba, solo que en vez de empty() he seguido usando isset.

Cita:
Iniciado por Triby Ver Mensaje
Por lo general, cuando creo formularios, incluyo un texto en cada campo que indica al usuario como llenarlo y, al hacer las validaciones, puedes usar una matriz asociativa para marcar los que no se llenaron correctamente, de forma que puedas utilizar una sola funcion para mostrar la ayuda y errores:

Código PHP:
Ver original
  1. $errores = array();
  2. // Validar nombre:
  3. $nombre = trim($_POST['nombre']);
  4. if(strlen($nombre) < 3 || strlen($nombre) > 20) {
  5.       $errores['nombre'] = 'El nombre debe contener entre 3 y 20 caracteres, ahora tiene: ' . strlen($nombre);
  6. }
  7.  
  8. // Despues, en el formulario:
  9. echo "<label for=\"nombre\">Nombre:</label>\n";
  10. echo "<input type=\"text\" name=\"nombre\" id=\"nombre\" value=\"$nombre\" size=\"20\" maxlength=\"20\" />\n";
  11. ayuda_error('nombre', 'Por favor teclea tu nombre.');
  12.  
  13. // Y la funcion para mostrar ayuda o errores:
  14. function ayuda_error($campo, $ayuda) {
  15.     global $errores;
  16.     if(isset($errores[$campo])) {
  17.         // Aqui muestras el mensaje de error, con estilo CSS si es necesario
  18.     } else {
  19.         // Aqui muestras la ayuda
  20.     }
  21. }

Realmente no es tan complicado, incluso tengo funciones para crear campos de formulario (input text, select, checkbox, radio, textarea y botones) y estoy trabajando en una clase, aunque no se si realmente llegue a usarla, depende de como me adapte en el proyecto que estoy trabajando.
Gracias Triby, por ahora he intentado algo parecido, quizás más adelante cuando tenga más conocimientos lo intente también con una clase

Cita:
Iniciado por iviamontes Ver Mensaje
pero para eso no es usa js ???
de todas formas es bueno revisar de nuevo las variables en el php, pero sin mensajes ni nada, solo x un tema de seguridad
Hola iviamontes, te paso un enlace de caricatos que habla de algo parecido de un tema reciente del foro web general:

http://www.pepemolina.com/index.php?...1%2C+%A1Web%21...
http://www.forosdelweb.com/f91/que-m...de-php-922550/

Gracias a todos por la ayuda
  #9 (permalink)  
Antiguo 24/06/2011, 09:21
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 12 años
Puntos: 209
Respuesta: Recorrer campos de un formulario para no repetir un aviso de Incompleto co

kahlito gracias por los enlaces... ya me los leo
  #10 (permalink)  
Antiguo 24/06/2011, 10:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 16 años, 8 meses
Puntos: 2135
Respuesta: Recorrer campos de un formulario para no repetir un aviso de Incompleto co

Igual podrías evaluar utilizar Zend_Form (directamente) eso te podría ayudar en lo que quieres hacer:
Código PHP:
Ver original
  1. <?php
  2. require_once('Zend/Loader/Autoloader.php');
  3. $instance = Zend_Loader_Autoloader::getInstance();
  4.  
  5. $myForm = new Zend_Form();
  6. $myForm->setMethod(Zend_Form::METHOD_POST);
  7.        ->setAttrib('id', 'myform');
  8.  
  9. $myForm->addElement('text', 'nombre', array(
  10.     'required' => true,
  11.     'filters' => array('StringTrim'),
  12.     'label' => 'Nombre'
  13. ));
  14. $myForm->addElement('text', 'apellido', array(
  15.     'required' => true,
  16.     'filters' => array('StringTrim'),
  17.     'label' => 'Apellido'
  18. ));
  19. $myForm->addElement('submit', 'enviar', array(
  20.     'ignore' => true,
  21.     'label' => 'Enviar'
  22. ));
  23.  
  24. if (isset($_POST)) {
  25.     if ($myForm->isValid($_POST)) {
  26.         $data = $myForm->getValues();
  27.         Zend_Debug::dump($data);
  28.     }
  29. }
  30. ?>
  31.  
  32. <?php echo $myForm; ?>

Así puedes ver como puedes mantener un código compacto y manejar las validaciones, filtros, etc.

Saludos.
  #11 (permalink)  
Antiguo 25/06/2011, 01:43
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 20 años, 9 meses
Puntos: 1284
Respuesta: Recorrer campos de un formulario para no repetir un aviso de Incompleto co

Hola:

Revisando referencias a mi página, encontré que el enlace de kahlito no era correco, ya que los puntos suspensivos sen parte de la url.

Cita:
Iniciado por kahlito Ver Mensaje
...
Hola iviamontes, te paso un enlace de caricatos que habla de algo parecido de un tema reciente del foro web general:

http://www.pepemolina.com/index.php?...C+%A1Web%21...
http://www.forosdelweb.com/f91/que-m...de-php-922550/

...
El mismo enlace: ¡Mitología!, ¡Fútbol!, ¡Web!...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #12 (permalink)  
Antiguo 28/06/2011, 12:49
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 19 años, 10 meses
Puntos: 65
Respuesta: Recorrer campos de un formulario para no repetir un aviso de Incompleto co

Cita:
Iniciado por GatorV Ver Mensaje
Igual podrías evaluar utilizar Zend_Form (directamente) eso te podría ayudar en lo que quieres hacer:
Código PHP:
Ver original
  1. <?php
  2. require_once('Zend/Loader/Autoloader.php');
  3. $instance = Zend_Loader_Autoloader::getInstance();
  4.  
  5. $myForm = new Zend_Form();
  6. $myForm->setMethod(Zend_Form::METHOD_POST);
  7.        ->setAttrib('id', 'myform');
  8.  
  9. $myForm->addElement('text', 'nombre', array(
  10.     'required' => true,
  11.     'filters' => array('StringTrim'),
  12.     'label' => 'Nombre'
  13. ));
  14. $myForm->addElement('text', 'apellido', array(
  15.     'required' => true,
  16.     'filters' => array('StringTrim'),
  17.     'label' => 'Apellido'
  18. ));
  19. $myForm->addElement('submit', 'enviar', array(
  20.     'ignore' => true,
  21.     'label' => 'Enviar'
  22. ));
  23.  
  24. if (isset($_POST)) {
  25.     if ($myForm->isValid($_POST)) {
  26.         $data = $myForm->getValues();
  27.         Zend_Debug::dump($data);
  28.     }
  29. }
  30. ?>
  31.  
  32. <?php echo $myForm; ?>

Así puedes ver como puedes mantener un código compacto y manejar las validaciones, filtros, etc.

Saludos.
Gracias GatorV, todo esto es nuevo para mi y a ese tipo de clases aun no he llegado así que lo guardo en mis notas para hacer algo con Zend_Form

Cita:
Iniciado por caricatos Ver Mensaje
Hola:

Revisando referencias a mi página, encontré que el enlace de kahlito no era correco, ya que los puntos suspensivos sen parte de la url.



El mismo enlace: ¡Mitología!, ¡Fútbol!, ¡Web!...

Saludos

Gracias por la corrección

De nuevo gracias a todos por la ayuda

Etiquetas: campos, recorrer, repetir, formulario, avisos
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 19:27.