Buenas gente!
Tengo un problema al que no le encuentro solución ya que creo que el código lo tengo bien. Estoy haciendo una mini-página para probar y bueno, he hecho un form para registrarse y otro para iniciar sessión. La cosa está en que el script que mira si el usuario está en la base de datos para iniciar sessión se queda calado y me tira un error...
Este es el código de inicio de sessión:
<html>
<title>Iniciar sessión</title>
<head>
<link rel="STYLESHEET" type="text/css" href="estil.css">
<script>
function validar(){
if ((document.f1.n1.value == "") || (document.f1.p1.value == "")){
alert('Campos vacíos');
ok=false;
}else{
ok=true;
}
return ok;
}
</script>
</head>
<body bgcolor="black">
<form name="f1" method="POST" onsubmit="return validar()" action="validar.php">
<div id="d1" name="d1">
<label for="Usuario">Usuario: </label><br>
<input type="text" name="n1" value=""><br><br>
<label for="cont">Contraseña: </label><br>
<input type="password" name="p1" value=""><br>
</div>
<input type="submit" class="sub" value="iniciar sessión" name="s1"><br>
<?php
echo "<center style='color:red'>$cont</center>";
?>
</form>
<form name="f2" method="GET" action="registrar.php">
<input type="submit" class="sub" value="Regístrate" name="s2">
</form>
</body>
</html>
Este es el de conectar:
<?php
$nom = $_POST['n1'];
$con = $_POST['p1'];
$cont= "";
$ok=false;
$resultat=mysql_query("SELECT * FROM usuaris",$connexio);
do{
if(($nom == $registre['nombre']) && ($con == $registre['pass'])){ //si lo q hemos introducid
$ok=true; //esta n la bd salimos dl bucle
}else{
}
}while(($registre!=false)||($ok!=true));
//Salimos del bucle y miramos si el usuario existe o no.
if($ok==true){
header("location:pagina_principal.php"); }else{
$cont = "Usuario incorrecto";
include 'primerap.php';
}
}else{
echo "ERROR AL SELECCIONAR BASE DE DATOS";
}
?><?php
$nom = $_POST['n1'];
$con = $_POST['p1'];
$cont= "";
$ok=false;
$resultat=mysql_query("SELECT * FROM usuaris",$connexio);
do{
if(($nom == $registre['nombre']) && ($con == $registre['pass'])){ //si lo q hemos introducid
$ok=true; //esta n la bd salimos dl bucle
}else{
}
}while(($registre!=false)||($ok!=true));
//Salimos del bucle y miramos si el usuario existe o no.
if($ok==true){
header("location:pagina_principal.php"); }else{
$cont = "Usuario incorrecto";
include 'primerap.php';
}
}else{
echo "ERROR AL SELECCIONAR BASE DE DATOS";
}
?>
Ni idea de que pasa -.-. El error que me da es este:
Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\www\validar.php on line 16
La linea 16 es donde ok=true, dentro del if. Pero también hay veces que se queda calado nada más empezar el if.
¿Alguien sabe que pasa?
Un saludo y gracias por adelantado!
el error que te da se debe a que php tiene un tiempo maximo de ejecucion, y tu script en esa linea a exedido ese tiempo maximo de ejecucion. te recomiendo que en la sentencia sql pongas:
"select * from usuarios where nombre= '".$registre['nombre']."'"
para que haci te de como salida un solo usuario y no vayas comprobando uno a uno. otra cosa ese script asi es vulnerable a que escriba directamente la direccion de la pagina y entra porque no hay ninguna comprobacion
Con eso no funciona...Me sigue tirando error. Dudo que se colapse buscando porqué solo tengo 2 usuarios en la base de datos.
Un saludo.
Lo acabo de solucionar!
He quitado el bucle y con el SELECT*FROM usarios WHERE nombre=$nom luego lo compruebo con un if y ya tira xD.
<?php
$nom = $_POST['n1'];
$con = $_POST['p1'];
$cont= "";
$ok=false;
$resultat = mysql_query("SELECT * FROM usuaris where nombre = '$nom'",$connexio);
if(($nom == $registre["nombre"]) && ($con == $registre["pass"])){ //Miramos que el nombre coincida con l pass
$ok=true;
}
if($ok==true){
header("location:pagina_principal.php"); }else{
$cont = "Contraseña incorrecta";
include 'primerap.php';
}
}else{
//Si a la hora de hacer el login el nombre no existe en la base de datos que nos redireccione.
$cont = "Usuario incorrecto";
include 'primerap.php';
}
?>
Un saludo y gracias!