Foros del Web » Programando para Internet » PHP »

Problema validando formulario en PHP con JavaScript

Estas en el tema de Problema validando formulario en PHP con JavaScript en el foro de PHP en Foros del Web. Tengo un problema. Al intentar validar un formulario con JavaScript en un archivo PHP se sigue de paso como si no existiera la opción onSubmint="return ...
  #1 (permalink)  
Antiguo 24/04/2007, 10:36
Avatar de Uri Macías  
Fecha de Ingreso: marzo-2007
Mensajes: 15
Antigüedad: 17 años, 1 mes
Puntos: 0
Pregunta Problema validando formulario en PHP con JavaScript

Tengo un problema.
Al intentar validar un formulario con JavaScript en un archivo PHP se sigue de paso como si no existiera la opción onSubmint="return valida(this);" en el formulario o como si no se ejecutara el código JS.
¿podría ser error de configuración?

el código PHP para salida JabaScript es:

Código PHP:
print '<script language="javascript" type="text/javascript">
            alert("está por enviar datos")
            function vacio(campo) {
                for ( i = 0; i < campo.length; i++ ) {
                        if ( campo.charAt(i) != " " ) {
                                return true
                        }
                }
                return false
            }
            
            function valida(Formulario){
                var retorna = false
                if(vacio(Formulario.usuario.value) == false){
                    retorna = false
                }
                else{
                    if(vacio(Formulario.contrasena.value) == false){
                        retorna = false
                    }
                    else
                        return retorna = true
                    }
                }
                if (retorna == false){
                    alert ("No debe haber campos vacios")
                }
                return retorna
            }
        </script>' 
el código PHP para la salida del formulario es:

Código PHP:
print '<form name="autentica" method="post" action="inicioPrueba.php" onSubmit="return valida(this);">
        <label>Usuario</label>
        <input name="usuario" type="text" id="usuario" size="16" maxlength="16">
        <label>Contraseña</label>
        <input name="contrasena" type="password" id="contrasena" size="16" maxlength="16">
        <input type="submit" name="Submit" value="Registrar">
        </form>' 
De antemano, gracias.
  #2 (permalink)  
Antiguo 24/04/2007, 11:03
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: Problema validando formulario en PHP con JavaScript

Una sugerencia, sal de PHP todo lo q sea necesario, te será muy útil para diseñar.

Otra sugerencia, si ves que un código javascript no te funciona una buena opción es usar la claúsula try { } catch(e) { } para poder ver cual es el error y, en tu caso, mandar un return false y q no se envíe el formulario. La consola de Firefox te puede servir de ayuda para determinar los problemas.

Y agrego q el problema es más de javascript q de PHP.

Saludos.

EDITO para explikarme mejor:

Con lo de sal de PHP me refiero a q en lugar de usar print 'lo q quiera imprimir con o sin etiquetas html'; es mejor:

Código PHP:
//Tu caso:
print '<script language="javascript" type="text/javascript"> 
            alert("está por enviar datos") 
            function vacio(campo) { 
                for ( i = 0; i < campo.length; i++ ) { 
                        if ( campo.charAt(i) != " " ) { 
                                return true 
                        } 
                } 
                return false 
            } 
             
            function valida(Formulario){ 
                var retorna = false 
                if(vacio(Formulario.usuario.value) == false){ 
                    retorna = false 
                } 
                else{ 
                    if(vacio(Formulario.contrasena.value) == false){ 
                        retorna = false 
                    } 
                    else 
                        return retorna = true 
                    } 
                } 
                if (retorna == false){ 
                    alert ("No debe haber campos vacios") 
                } 
                return retorna 
            } 
        </script>';

//A lo q me refiero:
?>
<script language="javascript" type="text/javascript"> 
            alert("está por enviar datos") 
            function vacio(campo) { 
                for ( i = 0; i < campo.length; i++ ) { 
                        if ( campo.charAt(i) != " " ) { 
                                return true 
                        } 
                } 
                return false 
            } 
             
            function valida(Formulario){ 
                var retorna = false 
                if(vacio(Formulario.usuario.value) == false){ 
                    retorna = false 
                } 
                else{ 
                    if(vacio(Formulario.contrasena.value) == false){ 
                        retorna = false 
                    } 
                    else 
                        return retorna = true 
                    } 
                } 
                if (retorna == false){ 
                    alert ("No debe haber campos vacios") 
                } 
                return retorna 
            } 
        </script>
<?php
__________________
La muerte es un camino que todos debemos recorrer...
  #3 (permalink)  
Antiguo 24/04/2007, 11:21
Avatar de Uri Macías  
Fecha de Ingreso: marzo-2007
Mensajes: 15
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Problema validando formulario en PHP con JavaScript

mmm, no entiendo cual es mi problema...

el código:
Código PHP:
<script language="javascript" type="text/javascript">
alert("esta por enviar datos")
</script> 
entre <head> </head>

en un archivo HTML si muestra la salida, pero el mismo código en un archivo PHP no muestra nada.
  #4 (permalink)  
Antiguo 24/04/2007, 11:27
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: Problema validando formulario en PHP con JavaScript

Si no hay errores en el codigo PHP debe mostrarse también pero por comodidad para el diseño e incluso para leer los códigos de otros lenguajes creo q es más cómodo entrar y salir de PHP sólo lo necesario.

¿Tienes activada la visualización de errores? ¿Te da algún error el script PHP? ¿Tienes algo q defina si se muestra una parte del código y otra no?

Con los print solos no puedo determinar la causa. Aparentemente parece estar bien a excepción de q no están los ; para finalizar la instrucción.

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
  #5 (permalink)  
Antiguo 24/04/2007, 11:53
Avatar de Uri Macías  
Fecha de Ingreso: marzo-2007
Mensajes: 15
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Problema validando formulario en PHP con JavaScript

Ya he separado el código de JS y PHP, espero que no sea un posterior problema la presentación de todo el código.

Respecto a lo demás, si display_errors = On, y todo funciona correctamente hasta donde se supone debe de hacer la validación.

si no es molestia muestro el código entero.

Código PHP:
<?php
    ini_set
('session.cookie_lifetime','120');
    
ini_set('session.gc_maxlifetime','120');
    
session_start();
?>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Prueba de autenticaci&oacute;n</title>
    <script language="javascript" type="text/javascript">
        try{alert("está por enviar datos")}catch(e){print e}
        function vacio(campo) {
            for ( i = 0; i < campo.length; i++ ) {
                    if ( campo.charAt(i) != " " ) {
                            return true
                    }
            }
            return false
        }
        
        function valida(Formulario){
            var retorna = false
            if(vacio(Formulario.usuario.value) == false){
                retorna = false
            }
            else{
                if(vacio(Formulario.contrasena.value) == false){
                    retorna = false
                }
                else
                    return retorna = true
                }
            }
            if (retorna == false){
                alert ("No debe haber campos vacios")
            }
            return retorna
        }
    </script>
</head>

<body>
    <?php
    
if(!isset($_POST['usuario'])){
        
formulario();
    }
    else{
        
autentica($_POST['usuario'], $_POST['contrasena']);
    }
    
?>
    
</body>
</html>
<?php 
    
function formulario(){
        print 
'<form name="autentica" method="post" action="inicioPrueba.php" onSubmit="return valida(this);">
        <label>Usuario</label>
        <input name="usuario" type="text" id="usuario" size="16" maxlength="16">
        <label>Contraseña</label>
        <input name="contrasena" type="password" id="contrasena" size="16" maxlength="16">
        <input type="submit" name="Submit" value="Registrar">
        </form>'
;        
        }
        
        function 
autentica($nick$pass){
            if(!isset(
$_SESSION['intentos'])){
                
$_SESSION['intentos']=1;
            }
            else{
                
$_SESSION['intentos'] += 1;
            }
            if(
$_SESSION['intentos'] < 4){
                include 
"../Connections/conexion.php";
    
                
$query sprintf("SELECT * FROM tb_usuarios WHERE nick='%s' and pass='%s'",
                    
mysql_real_escape_string($nick),
                    
mysql_real_escape_string($pass));
                
$resultado mysql_query($query);
                
                if(!
$resultado){
                    
$message  'Consulta inválida: ' mysql_error() . "\n";
                    
$message .= $query;
                    die(
$message);
                }
                else{
                    if(
$row mysql_fetch_row($resultado)){
                        print 
$row[7] . "\n";
                        print 
$row[8];
                    }
                    else{
                        print 
"El usuario o contraseña son inválidos, por favor intente de nuevo";
                        
formulario();
                    }
                }
//Fin If valida resultado
                
            
}//Fin comprobación de intentos
            
else{
                print 
"A intentado más de tres veces. Por favor intente de nuevo en dos minutos";
            }    
        }
?>
  #6 (permalink)  
Antiguo 24/04/2007, 12:02
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: Problema validando formulario en PHP con JavaScript

Cita:
Iniciado por Uri Macías Ver Mensaje
Ya he separado el código de JS y PHP, espero que no sea un posterior problema la presentación de todo el código.

Respecto a lo demás, si display_errors = On, y todo funciona correctamente hasta donde se supone debe de hacer la validación.

si no es molestia muestro el código entero.

Código PHP:
<?php
    ini_set
('session.cookie_lifetime','120');
    
ini_set('session.gc_maxlifetime','120');
    
session_start();
?>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Prueba de autenticaci&oacute;n</title>
    <script language="javascript" type="text/javascript">
        try{alert("está por enviar datos")}catch(e){print e}
        function vacio(campo) {
            for ( i = 0; i < campo.length; i++ ) {
                    if ( campo.charAt(i) != " " ) {
                            return true
                    }
            }
            return false
        }
        
        function valida(Formulario){
            var retorna = false
            if(vacio(Formulario.usuario.value) == false){
                retorna = false
            }
            else{
                if(vacio(Formulario.contrasena.value) == false){
                    retorna = false
                }
                else
                    return retorna = true
                }
            }
            if (retorna == false){
                alert ("No debe haber campos vacios")
            }
            return retorna
        }
    </script>
</head>

<body>
    <?php
    
if(!isset($_POST['usuario'])){
        
formulario();
    }
    else{
        
autentica($_POST['usuario'], $_POST['contrasena']);
    }
    
?>
    
</body>
</html>
<?php 
    
function formulario(){
        print 
'<form name="autentica" method="post" action="inicioPrueba.php" onSubmit="return valida(this);">
        <label>Usuario</label>
        <input name="usuario" type="text" id="usuario" size="16" maxlength="16">
        <label>Contraseña</label>
        <input name="contrasena" type="password" id="contrasena" size="16" maxlength="16">
        <input type="submit" name="Submit" value="Registrar">
        </form>'
;        
        }
        
        function 
autentica($nick$pass){
            if(!isset(
$_SESSION['intentos'])){
                
$_SESSION['intentos']=1;
            }
            else{
                
$_SESSION['intentos'] += 1;
            }
            if(
$_SESSION['intentos'] < 4){
                include 
"../Connections/conexion.php";
    
                
$query sprintf("SELECT * FROM tb_usuarios WHERE nick='%s' and pass='%s'",
                    
mysql_real_escape_string($nick),
                    
mysql_real_escape_string($pass));
                
$resultado mysql_query($query);
                
                if(!
$resultado){
                    
$message  'Consulta inválida: ' mysql_error() . "\n";
                    
$message .= $query;
                    die(
$message);
                }
                else{
                    if(
$row mysql_fetch_row($resultado)){
                        print 
$row[7] . "\n";
                        print 
$row[8];
                    }
                    else{
                        print 
"El usuario o contraseña son inválidos, por favor intente de nuevo";
                        
formulario();
                    }
                }
//Fin If valida resultado
                
            
}//Fin comprobación de intentos
            
else{
                print 
"A intentado más de tres veces. Por favor intente de nuevo en dos minutos";
            }    
        }
?>
Prueba con la claúsula try { } catch (e) { }. Te escribo el ejemplo:

Código HTML:
function valida(Formulario){
try {
			var retorna = false
			if(vacio(Formulario.usuario.value) == false){
				retorna = false
			}
			else{
				if(vacio(Formulario.contrasena.value) == false){
					retorna = false
				}
				else
					return retorna = true
				}
			}
			if (retorna == false){
				alert ("No debe haber campos vacios")
			}
			return retorna
} catch (e) {
    alert ("Ocurrio una excepcion no controlada: " + e.message)
    return false
}
		}
De esta manera no enviará el formulario y te mostrará el error en caso de q se ejecute la función. Una vez tengas la función completamente testeada y depurada puedes eliminar la claúsula o el alert, como veas.

Saludos
__________________
La muerte es un camino que todos debemos recorrer...
  #7 (permalink)  
Antiguo 24/04/2007, 12:20
Avatar de Uri Macías  
Fecha de Ingreso: marzo-2007
Mensajes: 15
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Problema validando formulario en PHP con JavaScript

Probado y nada, ni mensaje alert("está por enviar datos") ni un error, ¿podrá ser algún error de configuración? es como si todo el código JS no estuviera allí.
  #8 (permalink)  
Antiguo 24/04/2007, 12:30
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: Problema validando formulario en PHP con JavaScript

Bien, he mirado en profundidad y te falta una llave después de un else en la función valida. Concretamente:

function valida(Formulario){
var retorna = false
if(vacio(Formulario.usuario.value) == false){
retorna = false
}
else{
if(vacio(Formulario.contrasena.value) == false){
retorna = false
}
else {
return retorna = true
}
}
if (retorna == false){
alert ("No debe haber campos vacios")
}
return retorna
}

Por otro lado la claúsula try catch por sí sola no sirve para nada, hay q anidarla en una función como yo te expuse en mi ejemplo anterior.

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
  #9 (permalink)  
Antiguo 24/04/2007, 12:36
Avatar de Uri Macías  
Fecha de Ingreso: marzo-2007
Mensajes: 15
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Problema validando formulario en PHP con JavaScript

Bien, disculpa la molestia, ahora todo está funcionando correctamente.

Gracias.
  #10 (permalink)  
Antiguo 24/04/2007, 12:45
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: Problema validando formulario en PHP con JavaScript

De nada hombre y no te preocupes, estamos todos aquí para aprender. Y molestias ninguna, molestias sólo cuando la gente dice tonterias y gilipolleces varias.

Aquí buen rollo siempre.

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
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 19:27.