Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: kodeone en 24 Febrero 2011, 14:38 pm



Título: Ayuda con conexión a base de datos!
Publicado por: kodeone en 24 Febrero 2011, 14:38 pm
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
  1. <html>
  2. <title>Iniciar sessión</title>
  3. <head>
  4. <link rel="STYLESHEET" type="text/css" href="estil.css">
  5. <script>
  6. function validar(){
  7. if ((document.f1.n1.value == "") || (document.f1.p1.value == "")){
  8. alert('Campos vacíos');
  9. ok=false;
  10. }else{
  11. ok=true;
  12. }
  13. return ok;
  14. }
  15. </script>
  16. </head>
  17. <body bgcolor="black">
  18. <form name="f1" method="POST" onsubmit="return validar()" action="validar.php">
  19. <div id="d1" name="d1">
  20. <label for="Usuario">Usuario: </label><br>
  21. <input type="text" name="n1" value=""><br><br>
  22. <label for="cont">Contraseña: </label><br>
  23. <input type="password" name="p1" value=""><br>
  24. </div>
  25. <input type="submit" class="sub" value="iniciar sessión" name="s1"><br>
  26. <?php
  27. echo  "<center style='color:red'>$cont</center>";
  28. ?>
  29. </form>
  30. <form name="f2" method="GET" action="registrar.php">
  31. <input type="submit" class="sub" value="Regístrate" name="s2">
  32. </form>
  33. </body>
  34. </html>
  35.  

Este es el de conectar:

Código
  1. <?php
  2. $nom = $_POST['n1'];
  3. $con = $_POST['p1'];
  4. $cont= "";
  5. $ok=false;
  6.  
  7. $connexio = mysql_connect("localhost","root");
  8. mysql_select_db("login",$connexio);
  9.  
  10. $resultat=mysql_query("SELECT * FROM usuaris",$connexio);
  11. if($registre=mysql_fetch_assoc($resultat)){
  12.  
  13.  
  14. do{
  15. if(($nom == $registre['nombre']) && ($con == $registre['pass'])){ //si lo q hemos introducid
  16. $ok=true;  //esta n la bd salimos dl bucle
  17. }else{
  18. $registre=mysql_fetch_assoc($resultat);
  19. }
  20. }while(($registre!=false)||($ok!=true));
  21.  
  22. //Salimos del bucle y miramos si el usuario existe o no.
  23.  
  24. if($ok==true){
  25. header("location:pagina_principal.php");
  26. }else{
  27. $cont = "Usuario incorrecto";
  28. include 'primerap.php';
  29. }
  30.  
  31. }else{
  32. echo "ERROR AL SELECCIONAR BASE DE DATOS";
  33. }
  34. ?><?php
  35. $nom = $_POST['n1'];
  36. $con = $_POST['p1'];
  37. $cont= "";
  38. $ok=false;
  39.  
  40. $connexio = mysql_connect("localhost","root");
  41. mysql_select_db("login",$connexio);
  42.  
  43. $resultat=mysql_query("SELECT * FROM usuaris",$connexio);
  44. if($registre=mysql_fetch_assoc($resultat)){
  45.  
  46.  
  47. do{
  48. if(($nom == $registre['nombre']) && ($con == $registre['pass'])){ //si lo q hemos introducid
  49. $ok=true;  //esta n la bd salimos dl bucle
  50. }else{
  51. $registre=mysql_fetch_assoc($resultat);
  52. }
  53. }while(($registre!=false)||($ok!=true));
  54.  
  55. //Salimos del bucle y miramos si el usuario existe o no.
  56.  
  57. if($ok==true){
  58. header("location:pagina_principal.php");
  59. }else{
  60. $cont = "Usuario incorrecto";
  61. include 'primerap.php';
  62. }
  63.  
  64. }else{
  65. echo "ERROR AL SELECCIONAR BASE DE DATOS";
  66. }
  67. ?>
  68.  

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!


Título: Re: Ayuda con conexión a base de datos!
Publicado por: bomba1990 en 24 Febrero 2011, 17:13 pm
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


Título: Re: Ayuda con conexión a base de datos!
Publicado por: kodeone en 24 Febrero 2011, 17:34 pm
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.


Título: Re: Ayuda con conexión a base de datos!
Publicado por: kodeone en 24 Febrero 2011, 17:38 pm
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
  1. <?php
  2. $nom = $_POST['n1'];
  3. $con = $_POST['p1'];
  4. $cont= "";
  5. $ok=false;
  6.  
  7. $connexio = mysql_connect("localhost","root");
  8. mysql_select_db("login",$connexio);
  9. $resultat = mysql_query("SELECT * FROM usuaris where nombre = '$nom'",$connexio);
  10.  
  11. if($registre=mysql_fetch_assoc($resultat)){//Nos metemos en el array
  12.  
  13. if(($nom == $registre["nombre"]) && ($con == $registre["pass"])){ //Miramos que el nombre coincida con l pass
  14. $ok=true;  
  15. }
  16.  
  17.  
  18. if($ok==true){
  19. header("location:pagina_principal.php");
  20. }else{
  21. $cont = "Contraseña incorrecta";
  22. include 'primerap.php';
  23. }
  24.  
  25. }else{
  26. //Si a la hora de hacer el login el nombre no existe en la base de datos que nos redireccione.
  27. $cont = "Usuario incorrecto";
  28. include 'primerap.php';
  29. }
  30. ?>
  31.  



Un saludo y gracias!