Ayuda con conexión a base de datos!

Iniciado por kodeone, 24 Febrero 2011, 14:38 PM

0 Miembros y 1 Visitante están viendo este tema.

kodeone

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:
Código (php) [Seleccionar]

<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:

Código (php) [Seleccionar]

<?php
$nom $_POST['n1'];
$con $_POST['p1'];
$cont"";
$ok=false;

$connexio mysql_connect("localhost","root");
mysql_select_db("login",$connexio);

$resultat=mysql_query("SELECT * FROM usuaris",$connexio);
if($registre=mysql_fetch_assoc($resultat)){


do{
if(($nom == $registre['nombre']) && ($con == $registre['pass'])){ //si lo q hemos introducid
$ok=true;   //esta n la bd salimos dl bucle
}else{
$registre=mysql_fetch_assoc($resultat);
}
}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;

$connexio mysql_connect("localhost","root");
mysql_select_db("login",$connexio);

$resultat=mysql_query("SELECT * FROM usuaris",$connexio);
if($registre=mysql_fetch_assoc($resultat)){


do{
if(($nom == $registre['nombre']) && ($con == $registre['pass'])){ //si lo q hemos introducid
$ok=true;   //esta n la bd salimos dl bucle
}else{
$registre=mysql_fetch_assoc($resultat);
}
}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!

bomba1990

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
"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve

kodeone

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.

kodeone

#3
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.

Código (php) [Seleccionar]

<?php
$nom $_POST['n1'];
$con $_POST['p1'];
$cont"";
$ok=false;

$connexio mysql_connect("localhost","root");
mysql_select_db("login",$connexio);
$resultat mysql_query("SELECT * FROM usuaris where nombre = '$nom'",$connexio);

if($registre=mysql_fetch_assoc($resultat)){//Nos metemos en el array

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!