PHP - Duda sobre login

 
Vista:

Duda sobre login

Publicado por KevinU (3 intervenciones) el 17/11/2019 22:04:16
Hola, estoy creando un login para un proyecto con unos amigos para el colegio, pero se que poner para pedir que si el id y la contraseña son correctos, puede logearse, si no, soltar un mensaje.
Se que les puede parecer algo muy simple, pero apenas estoy empezando en esto jsjs.
El siguiente es el codigo del login:

<?php
session_start();
require 'database.php';

if(!empty($_POST['id']) && !empty($_POST['pass'])){
$records = $conn->prepare('SELECT num,id, pass FROM usuarios WHERE id=:id');
$records->bindParam(':id',$_POST['id']);
$records->execute();
$results = $records->fetch(PDO::FETCH_ASSOC);

$message = '';

if(count($results) > 0){
$_SESSION['user_num'] = $results['num'];
header('Location: payc.html');
}else{
$message = 'Lo siento, tus datos no coinciden.';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Iniciar sesión | PayCheck</title>
<link rel="stylesheet" href="assets/css/mainSec.css">
</head>
<body>
<?php if(!empty($message)) : ?>
<p><?= $message ?></p>
<?php endif?>
<div class="login">
<img class="logo" src="assets/img/logo.png">
<h1>Inicia sesion en PayCheck</h1>
<form method="post" action="iniciarSesion.php">
<label for="lid">Numero de identificación</label>
<input type="text" name="id" placeholder="Introduzca su número de cedula">
<label for="lpass">Contraseña</label>
<input type="password" name="pass" placeholder="Introduzca su contraseña">
<input type="submit" value="Iniciar sesión">
</form>
<span>¿No tienes una cuenta? <a href="registrarse.php" id="">Registrate</a></span>
</div>
</body>
</html>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Lawliet
Val: 478
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda sobre login

Publicado por Lawliet (351 intervenciones) el 17/11/2019 22:12:51
Hola!

Una pregunta... Vas a trabajar sobre el mismo archivo o tienes archivos separados, lo pregunto ya que por tu código tienes un action que manda a otro archivo, pero veo que haces la consulta en el mismo archivo o son códigos separados solo que al publicarlos lo pusiste todo en uno solo

Sin más que comentar, quedo al pendiente de cualquier duda y/o comentario.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda sobre login

Publicado por KevinU (3 intervenciones) el 17/11/2019 22:20:30
Hola!

Estoy trabajando sobre varios archivos, el que mostre solo era el login, es el unico en el que tengo problemas jaja.

Database:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
$server = "localhost";
$username = "root";
$dbpass = "";
$database = "PayCheck";
 
try {
    $conn = new PDO("mysql:host=$server;dbname=$database", $username, $dbpass);
} catch(PDOException $error){
    die('Conexión fallida: '.$error->getMessage());
}
 
?>

registro:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
    require 'database.php';
 
    $message = '';
 
    if (!empty($_POST['id']) && !empty($_POST['pass'])){
 
        $sql = "INSERT INTO usuarios (id, pass) VALUES (:id, :pass)";
        $stmt = $conn->prepare($sql);
        $stmt->bindParam(':id',$_POST['id']);
        $stmt->bindParam(':pass',$_POST['pass']);
 
        if($stmt->execute()){
            $message = 'Su cuenta ha sido creado correctamente.';
        }else{
            $message = 'Lo siento, hubo un error al crear su cuenta.';
        }
    }
?>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Registro | PayCheck</title>
        <link rel="stylesheet" href="assets/css/mainReg.css">
    </head>
    <body>
        <?php if (!empty($message)): ?>
            <p><?= $message ?></p>
        <?php endif?>
        <div class="login">
            <img class="logo" src="assets/img/logo.png">
            <h1>Registrate a PayCheck</h1>
            <form method="post" action="registrarse.php">
                <label for="lid">Numero de identificación</label>
                <input type="text" name="id" placeholder="Introduzca su número de cedula">
                <label for="lpass">Contraseña</label>
                <input type="password" name="pass" placeholder="Introduzca su contraseña">
                <label for="lconfpass">Confirmación de contraseña</label>
                <input type="password" name="confpass" placeholder="Confirme su contraseña">
                <input type="submit" value="Registrarse">
            </form>
            <span>¿Ya tienes cuenta? <a href="iniciarSesion.php" id="">Inicia sesión</a></span>
        </div>
    </body>
</html>

(Estos dos ultimos funcionan)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet
Val: 478
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda sobre login

Publicado por Lawliet (351 intervenciones) el 17/11/2019 23:32:58
Hola!!!

No estoy seguro si esto es lo que necesitas, pero por lo menos el código regresa cuando el usuario existe o no existe.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
	if(!empty($_POST['id']) && !empty($_POST['pass'])) {
		$usuarioNum = 0;
		$conn = @new mysqli('localhost','root','','lawliet');
		$conn->set_charset("utf8");
		$records = $conn->prepare("SELECT num FROM usuario WHERE id = ? AND pass = ?");
		$records->bind_param('ss',$_POST['id'],$_POST['pass']);
		$records->execute();
		$records->bind_result($num);
		while($records->fetch()) {
			$usuarioNum = $num;
		}
 
		if($usuarioNum != 0) {
			echo "SI existe el usuario.";
		} else {
			echo "NO existe el usuario.";
		}
	}
?>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Iniciar sesión | PayCheck</title>
		<link rel="stylesheet" href="assets/css/mainSec.css">
	</head>
	<body>
		<div class="login">
			<img class="logo" src="assets/img/logo.png">
			<h1>Inicia sesion en PayCheck</h1>
			<form method="post" action="#">
				<label for="lid">Numero de identificación</label>
				<input type="text" name="id" placeholder="Introduzca su número de cedula">
				<label for="lpass">Contraseña</label>
				<input type="password" name="pass" placeholder="Introduzca su contraseña">
				<input type="submit" value="Iniciar sesión">
			</form>
			<span>¿No tienes una cuenta? <a href="registrarse.php" id="">Registrate</a></span>
		</div>
	</body>
</html>

Sin más que comentar, quedo al pendiente de cualquier duda y/o comentario.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda sobre login

Publicado por KevinU (3 intervenciones) el 18/11/2019 00:40:01
Ahora pasa esto:
Fatal error: Uncaught Error: Call to undefined method PDOStatement::bind_param() in /opt/lampp/htdocs/PayCheck/iniciarSesion.php:8 Stack trace: #0 {main} thrown in /opt/lampp/htdocs/PayCheck/iniciarSesion.php on line 8

):
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet
Val: 478
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda sobre login

Publicado por Lawliet (351 intervenciones) el 18/11/2019 00:49:16
Hola!

Eso se debe al tipo de conexión... Como no pensé que lo estabas haciendo con PDO por eso te marca ese error. A continuación, te mando el código con PDO.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
	if(!empty($_POST['id']) && !empty($_POST['pass'])) {
		$conn = new PDO('mysql:host=localhost;dbname=lawliet;charset=utf8','root','');
		$records = $conn->prepare("SELECT num FROM usuario WHERE id = :user AND pass = :pass");
		$records->execute(array('user' => $_POST['id'],'pass' => $_POST['pass']));
		$row = $records->fetch(PDO::FETCH_ASSOC);
 
		if(!empty($row['num'])) {
			echo "SI existe el usuario.";
		} else {
			echo "NO existe el usuario.";
		}
	}
?>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Iniciar sesión | PayCheck</title>
		<link rel="stylesheet" href="assets/css/mainSec.css">
	</head>
	<body>
		<div class="login">
			<img class="logo" src="assets/img/logo.png">
			<h1>Inicia sesion en PayCheck</h1>
			<form method="post" action="#">
				<label for="lid">Numero de identificación</label>
				<input type="text" name="id" placeholder="Introduzca su número de cedula">
				<label for="lpass">Contraseña</label>
				<input type="password" name="pass" placeholder="Introduzca su contraseña">
				<input type="submit" value="Iniciar sesión">
			</form>
			<span>¿No tienes una cuenta? <a href="registrarse.php" id="">Registrate</a></span>
		</div>
	</body>
</html>

Es importante mencionar que es buena práctica para ti que compares ambos códigos y no reemplaces uno por otro, aunque en esencia es lo mismo la forma en que se ejecutan cambia un poco.

Sin más que comentar, quedo al pendiente de cualquier duda y/o comentario.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar