Foros del Web » Programando para Internet » PHP »

Validar formularios cuando el nombre de los inputs viene dado por php

Estas en el tema de Validar formularios cuando el nombre de los inputs viene dado por php en el foro de PHP en Foros del Web. Hola, mi problema es que no puedo validar el formulario porque los nombres de los inputs los tengo como <input name="nombre<?php echo $i; ?>" y ...
  #1 (permalink)  
Antiguo 26/08/2008, 01:56
 
Fecha de Ingreso: marzo-2007
Mensajes: 33
Antigüedad: 17 años, 1 mes
Puntos: 0
Exclamación Validar formularios cuando el nombre de los inputs viene dado por php

Hola, mi problema es que no puedo validar el formulario porque los nombres de los inputs los tengo como <input name="nombre<?php echo $i; ?>" y claro fuera del bucle no tengo esa $i y menos aún en javascript, no sé cómo hacerlo, he intentado poner un bucle en la función de validación tal que así:

Código:
function validar_formulario(formulario, i){
		var cont;
		for(cont=0;cont<i;cont++){
			if(formulario.(nombre + cont).value==""){
				alert('Es necesario introducir el nombre.');
				formulario.nombre + cont.focus();
				return false;
			}
pero no me va... no sé si el javascript está bien así. ¿Alguna ayuda por favor?

Un saludo y gracias.
  #2 (permalink)  
Antiguo 26/08/2008, 02:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

mira... si usas algo del DOM con javascript puedes hacerlo.... has oído jQuery ??

deberías usar esta librería de JS, pero si no... usa una contraparte genérica

Código:
el=document.getElementByTagName('input');

for (var i in el) {
  if (el[i].className.indexOf('validar')!==-1) {
    alert('Debes introducir un valor!');
    el[i].focus();
  }
}
digo, te recomiendo algún framework como jQuery para poder hacer selecciones del DOM del documento por medio de otros selectores, como clase... o incluso, patrón en el ID/Name ... etc, suerte!

NOTA: no estoy seguro que este correcto el código, pero si investigas... seguramente resolverás mejor esto...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 26/08/2008, 02:14
 
Fecha de Ingreso: agosto-2008
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 7
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

Lo que puedes hacer es generar el código javascritp via php, es decir, crear la función que te valide dinámicamente con php:


Código PHP:
<?php
echo "function validar_formulario(){";
//Como generas la función con php puedes saber el nombre de los campos y el número de los mismos. Supongamos que estan en un array:

for($i 0$i<count($array_nombre_inputs); $i++){
echo 
'if(document.nombreFormulario.'.$array_nombre_inputs[$i].'.value == ""){';
echo 
'alert("Es necesario introducir el '.$array_nombre_inputs[$i].'");';
echo 
' return false;}';
}
echo 
'}';
?>

Última edición por ilie; 26/08/2008 a las 02:37
  #4 (permalink)  
Antiguo 26/08/2008, 02:24
 
Fecha de Ingreso: marzo-2007
Mensajes: 33
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

Gracias, he mirado lo de jQuery y no me aclaro mucho... tú código tampoco lo entiendo bien del todo, ¿tendría que llamarlo desde cada input?, ¿qué es el 'validar' que le metes en la función del if?, ¿qué significa lo de !==?

¿Alguien puede explicarme mejor?

Muchas gracias y un saludo.
  #5 (permalink)  
Antiguo 26/08/2008, 02:59
 
Fecha de Ingreso: marzo-2007
Mensajes: 33
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

Gracias Ilie, tu respuesta me mola más... jeje, simple y sencillo, así es como me gusta, pero sigue sin ir!!, creo que lo tengo todo bien... no sé. Dándole a ver código sale todo bien.

La función de validación la tengo así:
Código PHP:
<?php 
    
echo    "function validar_formulario(formulario){";
    for(
$cont=0$cont<count($_POST['borrar']); $cont++){
        echo    
"        if(formulario.nombre".$cont.".value==''){";
        echo    
"            alert('Es necesario introducir el nombre.');";
        echo    
"            formulario.nombre".$cont.".focus();";
        echo    
"            return false;";
        echo    
"        }    ";
y el form así:
Código PHP:
<form action="editar.php" method="post" name="Registrar_usuario" onSubmit="return validar_formulario(this)">
            <?php
            
for($i=0$i<count($_POST['borrar']);$i++){
<
input name="nombre<?php echo $i; ?>" type="text" size="30" value="<?php echo $fila['nombre'];?>" /></p>
            <
p>Apellidos:&nbsp;<font color="#FF0000">*</font>&nbsp;
            <
input name="apellidos<?php echo $i; ?>" type="text" size="50" value="<?php echo $fila['apellidos'];?>" /></p>
Viendo el código fuente parece estar todo bien:
Código:
<script type="text/javascript">
	
function validar_formulario(formulario){		if(formulario.nombre0.value==''){			alert('Es necesario introducir el nombre.');			formulario.nombre0.focus();			return false;		}			if(typeof formulario.apellidos0==''){			alert('Es necesario introducir los apellidos.');			formulario.apellidos0.focus();			return false;		}		if(formulario.login0.value==''){			alert('Es necesario introducir el nombre de usuario.');			formulario.login0.focus();			return false;		}		if(formulario.pass0.value.==''){			alert('Es necesario intruducir una contraseña.');			formulario.pass0.focus();			return false;		}		if(formulario.email0.value!=''){			if(!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(formulario.email0.value))){				alert("La dirección de email " + formulario.email0.value + " es incorrecta.");				formulario.email0.focus();				return false;			}		}}</script>
</head>


<body>

			<form action="editar.php" method="post" name="Registrar_usuario" onSubmit="return validar_formulario(this)">

						<h2>Usuario 1</h2>
			<p>Nombre:&nbsp;<font color="#FF0000">*</font>&nbsp;
			<input name="nombre0" type="text" size="30" value="nombre" /></p>
			<p>Apellidos:&nbsp;<font color="#FF0000">*</font>&nbsp;
			<input name="apellidos0" type="text" size="50" value="" /></p>
			<p>Dirección:&nbsp;

			<input name="direccion0" type="text" size="40" value="" />
... pero algo falla porque le doy con muchos campos vacíos y me modifica el usuario y no saca ningún alert.


¿Alguna ayuda por favor?

Muchas gracias y un saludo.
  #6 (permalink)  
Antiguo 26/08/2008, 03:53
 
Fecha de Ingreso: agosto-2008
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 7
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

cambia formulario por el nombre del <form>, es decir
Cita:
<?php
echo "function validar_formulario(formulario){";
for($cont=0; $cont<count($_POST['borrar']); $cont++){
echo " if(Registrar_usuario.nombre".$cont.".value==''){";
echo " alert('Es necesario introducir el nombre.');";
echo " Registrar_usuario.nombre".$cont.".focus();";
echo " return false;";
echo " } ";
  #7 (permalink)  
Antiguo 26/08/2008, 04:03
 
Fecha de Ingreso: marzo-2007
Mensajes: 33
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

Gracias pero no chuta así tampoco, no creo que fuera eso porque lo tengo en otro archivo así y me funciona perfectamente.

Muchas gracias de todas formas.

¿Alguna otra idea?, a mí se me acaban ya...

Un saludo
  #8 (permalink)  
Antiguo 26/08/2008, 04:11
 
Fecha de Ingreso: agosto-2008
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 7
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

Puedes indicar si aparece un error javascript al realizar la llamada??


Cita:
<?php
echo "function validar_formulario(formulario){";
for($cont=0; $cont<count($_POST['borrar']); $cont++){
echo " if(document.Registrar_usuario.nombre".$cont.".valu e.length == 0){";
echo " alert('Es necesario introducir el nombre.');";
echo " docuement.Registrar_usuario.nombre".$cont.".focus( );";
echo " return false;";
echo " } ";
  #9 (permalink)  
Antiguo 26/08/2008, 04:16
 
Fecha de Ingreso: abril-2006
Mensajes: 7
Antigüedad: 18 años
Puntos: 0
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

Lo tienes mucho más fácil... Utiliza un Foreach.

foreach ($_POST As $campo => $valor) {
// aquí compruebas lo que necesites...
}
  #10 (permalink)  
Antiguo 26/08/2008, 04:30
 
Fecha de Ingreso: marzo-2007
Mensajes: 33
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

ey sí! en la consola de firefox me dice "validar_formulario is not defined", es muy extraño... ¿podría ser además que no me coja el $_POST ['borrar'] por estar fuera del body?

Un saludo y muchas gracias

por cierto, he probado con el document. y tampoco...
  #11 (permalink)  
Antiguo 26/08/2008, 04:32
 
Fecha de Ingreso: marzo-2007
Mensajes: 33
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

emmm, siniestrillo podrías poner un ejemplo?, no sé si me servirá eso... pero de todas formas no lo pillo bien...

Gracias!
  #12 (permalink)  
Antiguo 26/08/2008, 04:38
 
Fecha de Ingreso: abril-2006
Mensajes: 7
Antigüedad: 18 años
Puntos: 0
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

Cita:
Iniciado por mgo3 Ver Mensaje
emmm, siniestrillo podrías poner un ejemplo?, no sé si me servirá eso... pero de todas formas no lo pillo bien...

Gracias!
Por una parte tienes el:

<form method="post" action"recoge.php">
<input type="text" name="campo1"/>
<input type="text" name="campo2"/>
<input type="text" name="campo3"/>
</form>

y en el php que recoge pones:

<?php
foreach ($_POST As $nombreCampo => $valorCampo) {
echo "Nombre del campo: " . $nombreCampo . " - Valor campo: " . $valorCampo;
}
?>

y eso te devolvería los nombres de los campos y su valor.... con eso ya puedes jugar y comprobar si se cumplen las condiciones que quieras que se cumpla.
  #13 (permalink)  
Antiguo 26/08/2008, 04:47
 
Fecha de Ingreso: marzo-2007
Mensajes: 33
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

Gracias siniestrillo, podría valerme, pero sigo sin saber con qué campo estoy trabajando en cada momento y he de saber si se trata del nombre, apellidos, email, etc. porque cada uno tiene una validación distinta.
  #14 (permalink)  
Antiguo 26/08/2008, 04:51
 
Fecha de Ingreso: abril-2006
Mensajes: 7
Antigüedad: 18 años
Puntos: 0
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

Pues dentro del foreach tienes el nombre del campo y el valor.... Si te fijas, se setean dos variables: $nombreCampo y $valorCampo... úsalas con un switch.

Ejemplo:

switch($nombreCampo) {
case "nombre":
//comprobaciones del campo nombre
break;
case "apellidos":
//comprobaciones del campo apellidos
break;
}

etc...
  #15 (permalink)  
Antiguo 26/08/2008, 04:55
 
Fecha de Ingreso: agosto-2008
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 7
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

cambia todo lo de antes y pon esto en el <script>...</script>
debería de dar resultado ya que yo lo he usado y funciona.

prueba esto:
te tendría que crear la función ya que el php se reaiza antes de cargarse la página

crea un array con los nombres de los inputs:
$array = new array("nombre", "apellido1", "apellido2", ... );

Úsalo en la generación del informe:
<input name="$array[$i]".../>

y en el javascript:
Código PHP:
<?php
echo "function validar_formulario(formulario){"
for(
$cont=0$cont<count($_POST['borrar']); $cont++){ 
echo 
" if(formulario.nombre".$cont.".value.length == 0){"
echo 
" alert('".$array[$cont]." está vacío, debe rellenarse.');"
echo 
" formulario.nombre".$cont.".focus();"
echo 
" return false;}"
echo 
" return true;
echo " 
";
?>
Puedes hacerlo con foreach como dice Siniestrillo, pero para ello si quieres conservar los valores introducidos en los inputs deberás cargarlos de nuevo ya que php se ejecuta en servidor, no en usuario como sucede como javascript.

Última edición por ilie; 26/08/2008 a las 05:04
  #16 (permalink)  
Antiguo 27/08/2008, 01:59
 
Fecha de Ingreso: marzo-2007
Mensajes: 33
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

Muchas gracias a los dos. Lo de Ilie ya lo he probado y no pirula, lo he probado de las mil maneras, sacando todo por php y sacando sólo la variable $cont por php y nada. Lo de siniestrillo tiene buena pinta pero me falta un pequeño detalle, los campos son nombre0, apellidos0,... nombre1, apellidos1,... nombre2, apelldidos2... entonces yo lo que no sé es el número que va detrás del campo, por eso hacía lo del bucle desde 0 hasta el número de usuarios que hay en el array $_POST['borrar'], si pudiera hacer en el switch un rollo nombre* y que el * signifique cualquier número podría funcionarme. ¿Sabéis cómo puedo hacerlo?

Saludo y mil gracias!!
  #17 (permalink)  
Antiguo 27/08/2008, 02:01
 
Fecha de Ingreso: marzo-2007
Mensajes: 33
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

Cita:
Iniciado por ilie Ver Mensaje

Puedes hacerlo con foreach como dice Siniestrillo, pero para ello si quieres conservar los valores introducidos en los inputs deberás cargarlos de nuevo ya que php se ejecuta en servidor, no en usuario como sucede como javascript.
ey claro, no había pensado en eso... el foreach tendría que estar en el javascript, javascript no tiene algo parecido a eso?, sino no me valdría porque php no dispone de los datos del form hasta que no se envíen...

qué jaleo ché...
  #18 (permalink)  
Antiguo 27/08/2008, 02:14
 
Fecha de Ingreso: agosto-2008
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 7
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

Es muy raro que te indique que la función no existe. Javascript se ejecuta en usuario por lo que es raro que la página y cargada desde el servidor n aparezca con el código Javascript.

Podrías comprobar el código resultante cargado y ver si la función se ha creado correctamente.

La verdad, me parece muy raro raro raro...
  #19 (permalink)  
Antiguo 27/08/2008, 02:41
 
Fecha de Ingreso: marzo-2007
Mensajes: 33
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

Ya me vaaaaa!! supongo que sería por fallos de la sintaxis del javascript. Sólo me falla una pequeña cosilla, cuando no pongo email me da el mensaje pero no me vuelve al form sino que modifica todo como si estuviera todo bien, el código para validar el email es:

Código PHP:
if(formulario.email<?php echo $cont;?>.value!=''){
            if(!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(formulario.email<?php echo $cont;?>.value))){
                alert("La dirección de email " + formulario.email<?php echo $cont;?>.value + " es incorrecta.");
                formulario.email<?php echo $cont;?>.focus();
                return false;
            }
        }
        else{
            alert("El email es obligatorio.");
            forumlario.email<?php echo $cont;?>.focus();
            return false;
        }
no lo pillo, debería de hacerlo igual que si el email es incorrecto, no?, si pongo un email incrrecto si que me saca el mensaje y me vuelve al form, pero si lo dejo en blanco, no?
Tenéis idea de por qué?


Por cierto, la función javascript sí me la saca perfectamente, si le doy a ver código fuente en firefox se ve perfecta y funciona bien con todos los campos menos con ese detalle del email que comento... aunque sí que es verdad que de vez en cuando me saca la consola de errores de firefox "formulario is not defined" en la línea 40...
  #20 (permalink)  
Antiguo 27/08/2008, 02:47
 
Fecha de Ingreso: agosto-2008
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 7
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

cambia la primera sentencia por:

if(formulario.email<?php echo $cont;?>.value.length != 0){
  #21 (permalink)  
Antiguo 27/08/2008, 02:48
 
Fecha de Ingreso: marzo-2007
Mensajes: 33
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

Vale, tengo retraso mental, lo confieso, había puesto forumlario...

muchas gracias a los dos!! solucionao, vaya pedazo de script que me he currao, jejejeje

Gracias!!
  #22 (permalink)  
Antiguo 27/08/2008, 02:51
 
Fecha de Ingreso: agosto-2008
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 7
Respuesta: Validar formularios cuando el nombre de los inputs viene dado por php

pon en vez de
if(formulario.email<?php echo $cont;?>.value!=''){
esto
if(formulario.email<?php echo $cont;?>.value.length!=0){
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 17:28.