entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Login contra bbdd

Estoy haciendo una pagina http://www.seocemadrid.com/ donde el acceso a una serie de secciones sea privada mediante colegiado/pass contra un base de datos que tengo en el servidor
El usuario previamente se ha tenido que registrase . Este paso está correcto y los datos se guardan en la bbdd.

El codigo que he puesto para validar al usuario es el siguiente

http://www.seocemadrid.com/acceso.html

<?php
session_start();
?>

<?php

$host_db = "localhost";
$user_db = "dujo";
$pass_db = "xxx";
$db_name = "seocemad_";
$tbl_name = "socios";

$conexion = new mysqli($host_db, $user_db, $pass_db, $db_name);

echo ' $conexion' ;

if ($conexion->connect_error) {

 die("La conexion falló: " . $conexion->connect_error);

}

$colegiado = $_POST['colegiado'];
$password = $_POST['password'];

echo "$colegiado"; 

$sql = "SELECT * FROM socios WHERE colegiado = '$colegiado'";

$result = $conexion->query($sql);

echo "$result" ;

if ($result->num_rows > 0) {     

 }

 $row = $result->fetch_array(MYSQLI_ASSOC);

 if (password_verify($password, $row['password'])) { 

    $_SESSION['loggedin'] = true;

    $_SESSION['colegiado'] = $colegiado;

    $_SESSION['start'] = time();

    $_SESSION['expire'] = $_SESSION['start'] + (5 * 60);

    echo "Bienvenido! " . $_SESSION['colegiado'];

    echo "<br><br><a href=panel-control.php>Panel de Control</a>"; 

 } else { 

   echo "Colegiado o Password estan incorrectos.";

   echo "<br><a href='login.html'>Volver a Intentarlo</a>";

 }

 mysqli_close($conexion);

 ?>

Siempre se queda en el else de Colegiado y password incorrecto

Muchas gracias

lfmd comentado Mar 5

podrías mostrar el código de los campos del login como estas enviando la información para loguearte

gonzalss comentado Mar 5

<form action="acceso.php" method="POST"  >
    <label>Número Colegiado<span>*</span></label>
    <input type="text" class="phone" placeholder="" name="colegiado">
    <div class="clearfix"></div>
    <label>Contraseña<span>*</span></label>
    <input type="password" class="phone" placeholder="" name="password">
    <div class="clearfix"></div>                                
    <div class="clearfix"></div>
    <div class="c-lang">
        <div class="book-submit">
            <input type="submit" value="Acceso">
        </div>
</form>

gonzalss comentado Mar 7

He cambiado el php del login ya que el que tenía antes no me funcionaba , he puesto este código pero sigue sin funcionarme. Se me va siempre al else de usuario no existe

<? 
/* A continuación, realizamos la conexión con nuestra base de datos en MySQL */ 
$link = mysql_connect("localhost","dujo","xxx"); 
mysql_select_db("seocemad_", $link); 

/* El query valida si el usuario ingresado existe en la base de datos. Se utiliza la función htmlentities para evitar inyecciones SQL. */ 

$myusuario = mysql_query("select colegiado from socios where colegiado = '".htmlentities($_POST["colegiado"])."'",$link); 
$nmyusuario = mysql_num_rows($myusuario); 

//Si existe el usuario, validamos también la contraseña ingresada y el estado del usuario... 
if($nmyusuario != 0)
{ 

  $sql = "select colegiado from socios where colegiado = '".htmlentities($_POST["colegiado"])."' and password = '".md5(htmlentities($_POST["password"]))."'"; 

echo "$sql"; 

  $myclave = mysql_query($sql,$link); 
  $nmyclave = mysql_num_rows($myclave); 

  //Si el usuario y clave ingresado son correctos (y el usuario está activo en la BD), creamos la sesión del mismo. 
  if($nmyclave != 0)
  { 
      session_start(); 
      //Guardamos dos variables de sesión que nos auxiliará para saber si se está o no "logueado" un usuario 
      $_SESSION["autentica"] = "SIP"; 
      $_SESSION["usuarioactual"] = mysql_result($myclave,0,0); 
      //nombre del usuario logueado. 
      //Direccionamos a nuestra página principal del sistema. 
      header ("Location: app.php"); 
   }
   else{ 
      echo"<script>alert('La contraseña no es correcta '); window.location.href=\"index.html\"</script>"; 
   } 
}
else
{ 
    echo"<script>alert('El usuario no existe en la bbdd.'); window.location.href=\"index.html\"</script>"; 
} 
mysql_close($link); ?>

Siempre se va al else del "el usuario no existe"

Este es el código del formulario html

<form action="acceso2.php" method="POST"  >

<label>Número Colegiado<span>*</span></label>
<input type="text" class="phone" placeholder="" name="colegiado">
                                    <div class="clearfix"></div>
                                <label>Contraseña<span>*</span></label>
                                    <input type="password" class="phone" placeholder="" name="password">
                                    <div class="clearfix"></div>                                
                                                                    <div class="clearfix"></div>
                                    <div class="c-lang">

                                    <div class="book-submit">
                                        <input type="submit" value="Acceso">
                                    </div>
</form>

Leonardo-Tadei comentado Mar 8

Y cómo está guardada la contraseña en la tabla???

Es texto plano? Es un MD5 de la contraseña? Está trasnformada con alguna función por el proceso que crea los usuarios?

gonzalss comentado Mar 8

La contraseña en la bbdd está definida como un varchar .

En el html ,el input text lo tengo tipo password.

FelipeMedel comentado Mar 8

lo que @Leonardo-Tadei te esta comentando es que si en la base de datos tienes guardada la contraseña ejemplo:
pass: 123
o si lo tienes encriptada, ejemplo:
pass: 123sdffsfasfda/*fsdfsd/

gonzalss comentado Mar 8

Está guardada como texto plano del tipo 123

1 Respuesta

2votos

FelipeMedel Puntos3580

Bueno, mirando tu código supuse que era de una página ejemplo asi que aqui tienes el ejemplo funcionando..

primero creamos el formulario para ingresar los datos (claro, algo básico):

  • login.html
<!DOCTYPE html>
<html>
<head>
    <title>formulario</title>
    <meta charset="utf-8">
</head>
<body>
    <center>
        <form action="validar.php" method="POST">
            <table>
                <tr>
                    <td>Usuario:</td>
                    <td><input type="text" name="user" placeholder="username"></td>
                </tr>
                <tr>
                    <td>Contraseña:</td>
                    <td><input type="password" name="pass" placeholder="password"></td>
                </tr>
                <tr>
                    <td colspan="2">
                        <input type="submit" value="Iniciar Sesión" style="width: 100%; height: 50px;">
                    </td>
                </tr>
            </table>
        </form>
    </center>
</body>
</html>

para este ejemplo utilice una base de datos con 4 campos:
user_id, username, password, nombres

ahora bien, el código del archivo validar.php

<?php
//obtenemos los valores que se envian desde el formulario
$user = $_POST['user'];
$pass = $_POST['pass'];

// Conectarse a y seleccionar una base de datos de MySQL llamada sakila
// Nombre de host: 127.0.0.1, nombre de usuario: tu_usuario, contraseña: tu_contraseña, bd: prueba
$mysqli = new mysqli('localhost', 'root', '', 'prueba');

// ¡Oh, no! Existe un error 'connect_errno', fallando así el intento de conexión
if ($mysqli->connect_errno) {
    // La conexión falló. ¿Que vamos a hacer? 
    // Se podría contactar con uno mismo (¿email?), registrar el error, mostrar una bonita página, etc.

    // Algo que no se debería de hacer en un sitio público, aunque este ejemplo lo mostrará
    // de todas formas, es imprimir información relacionada con errores de MySQL -- se podría registrar
    echo "\nError: Fallo al conectarse a MySQL debido a: ";
    echo "\nErrno: " . $mysqli->connect_errno . "\n";
    echo "\nError: " . $mysqli->connect_error . "\n";

    // Podría ser conveniente mostrar algo interesante, aunque nosotros simplemente saldremos
    exit;
}

// Realizar una consulta SQL
$sql = "SELECT * FROM usuarios WHERE username = '$user'";
if (!$resultado = $mysqli->query($sql)) {
    // De nuevo, no hacer esto en un sitio público, aunque nosotros mostraremos
    // cómo obtener información del error
    echo "\nError: La ejecución de la consulta falló debido a: \n";
    echo "\nQuery: " . $sql . "\n";
    echo "\nError: " . $mysqli->errno . "\n";
    echo "\nError: " . $mysqli->error . "\n";
    exit;
}

// ¡Uf, lo conseguimos!. Sabemos que nuestra conexión a MySQL y nuestra consulta
// tuvieron éxito, pero ¿tenemos un resultado?
if ($resultado->num_rows === 0) {
    echo "\nLo sentimos. No se pudo encontrar ningún usuario registrado como $user. Inténtelo de nuevo.\n";
    echo "\n<a href='login.html'>Volver al Login</a>";
    exit;
}

// Ahora, sabemos que existe solamente un único resultado en este ejemplo, por lo
// que vamos a colocarlo en un array asociativo donde las claves del mismo son los
// nombres de las columnas de la tabla
$usuario = $resultado->fetch_assoc();
echo "Bienvenido Usuario " . $usuario['nombres'];

// El script automáticamente liberará el resultado y cerrará la conexión
// a MySQL cuando finalice, aunque aquí lo vamos a hacer nostros mismos
$resultado->free();
$mysqli->close();
?>

espero te sirva...
Nota: estoy solo consultando por usuario, ya en tu caso puedes consultar por usuario y contraseña, o hacer una validación con los datos que envias y recibes, esto solo es un ejemplo!

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta