PHP - Login y sesiones con SQL Server y PHP

 
Vista:
sin imagen de perfil
Val: 133
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Login y sesiones con SQL Server y PHP

Publicado por Alejandro (73 intervenciones) el 26/02/2020 09:13:21
Buenas,

Actualmente tengo el siguiente código para loguearme (funciona correctamente):

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
$serverName = "server";
$connectionInfo = array( "Database"=>"MiBase", "UID"=>"User", "PWD"=>"MiPassword");
$conn = sqlsrv_connect( $serverName, $connectionInfo );
if( $conn === false ) {
    die( print_r( sqlsrv_errors(), true));
}
 
?>
 
 
<html>
<head>
 
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
 
    <title>Login</title>
 
 
</head>
<body background="imagen.gif">
 
 
<form method="POST" action="login.php">
 
 
 
 
            <label>Usuario</label><br>
            <input  type="text" size="50" name="usuario" color=placeholder="Escriba su usuario" class="login" autocomplete="off"><br>
            <label>Contraseña</label><br>
            <input type="password" size="50" name="passwd" placeholder="Escriba su contraseña" class="login" autocomplete="off"><br>
 
            <input type="submit" value="Entrar" class="btn" name="insert"> <br>
 
 
 
 
 
 
<?php
    if(isset($_POST['insert'])){
 
        $usuario = $_POST['usuario'];
        $password =($_POST['passwd']);
 
$stmt = "SELECT Repr_codigo,Repr_contra FROM GENETREPR WHERE Repr_codigo = '$usuario' 'AND Repr_contra = '$password'";
if($stmt == false){
    echo 'Datos Erroneos';
}else{
    header("Location:Acciones.php");
}
    }
 
 
?>
 
</body>
</html>

La cuestión es que luego no se como ir manteniendo la sesión iniciada en el resto de páginas que voy accediendo. ¿Podrías decirme como hacer en el resto de páginas que mantenga la sesión y no salga hasta darle a un botón de exit?

Muchas gracias
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Login y sesiones con SQL Server y PHP

Publicado por Julio (830 intervenciones) el 26/02/2020 10:00:57
Hola.

Debes usar las variables de sesión, comenzando por session_start (ver aquí en el manual).

Por ejemplo, cuando el usuario se loguea, haces algo así:

1
2
3
4
session_start();
 
$_SESSION['logged'] = true;
$_SESSION['user'] = $usuario;

De esta forma, en cualquiera de tus otras páginas y colocando el session_start(), podrás acceder a $_SESSION['logged'] por ejemplo para ver si el usuario está logueado o no. Al final, recuerda de implementar session_destroy() y borrar las variables de sesión al desconectar al usuario.

P.D.: session_strat() debería estar siempre como la primera instrucción arriba del todo.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 133
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Login y sesiones con SQL Server y PHP

Publicado por Alejandro (73 intervenciones) el 26/02/2020 11:24:12
Hola,

¿Me podrías poner un ejemplo del login ?
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Login y sesiones con SQL Server y PHP

Publicado por Julio (830 intervenciones) el 26/02/2020 11:32:19
Hola.

Precisamente es un tema del que quiero hablar en mi blog, pero lo tengo previsto para dentro de unos meses todavía. Te puedo recomendar que mires aquí, lo explica bastante bien y sencillo, y se adapta a lo que buscas.

P.D.: Si te quieres suscribir a mi blog, hablaré de esos temas y tengo previsto crear un sistema completo de login con MVC para dentro de unos meses, por si te intersa.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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
sin imagen de perfil
Val: 133
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Login y sesiones con SQL Server y PHP

Publicado por Alejandro (73 intervenciones) el 26/02/2020 13:22:34
Pero en ese ejemplo que sale, define el los campos que tienen que coincidir con el formulario. Yo los saco de mi base de datos SQL
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Login y sesiones con SQL Server y PHP

Publicado por Julio (830 intervenciones) el 26/02/2020 13:29:35
¿Y qué problema hay?

Donde él hace esto:

1
if ($usuario === $usuario_correcto && $palabra_secreta === $palabra_secreta_correcta) {

Tú haces esto:

1
$stmt = "SELECT Repr_codigo,Repr_contra FROM GENETREPR WHERE Repr_codigo = '$usuario' 'AND Repr_contra = '$password'";

Es simplemente la forma de buscar la coincidencia de datos. Te es indiferente para lo que tú pedías, que era mantener el login una vez realizado. Él lo hace así por simplificar y tú lo gestionas vía base de datos, pero al final se trata de loguearse, por lo que una vez logueado puedes hacer lo mismo que hace:

1
2
session_start();
$_SESSION["usuario"] = $usuario;

Ya tienes en $_SESSION['usuario'] el usuario que está logueado. Y lo tendrás en todas las páginas donde tengas la sesión iniciada.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en [url=https/programacionbasica.es]Programación Básica[/url]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 133
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Login y sesiones con SQL Server y PHP

Publicado por Alejandro (73 intervenciones) el 26/02/2020 14:14:28
Gracias!!!!! Eres un grande :)
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
sin imagen de perfil
Val: 133
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Login y sesiones con SQL Server y PHP

Publicado por Alejandro (73 intervenciones) el 26/02/2020 14:56:14
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
$serverName = "srvprincipal";
$connectionInfo = array( "Database"=>"GCOMB000", "UID"=>"UserPlanificacion", "PWD"=>"Albeniz2020");
$conn = sqlsrv_connect( $serverName, $connectionInfo );
if( $conn === false ) {
    die( print_r( sqlsrv_errors(), true));
}
 
?>
 
 
<html>
<head>
 
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
 
    <title>Login</title>
 
    <!-- Google font -->
    <link href="https://fonts.googleapis.com/css?family=Montserrat:400,700%7CVarela+Round" rel="stylesheet">
 
    <!-- Bootstrap -->
    <link type="text/css" rel="stylesheet" href="css/bootstrap.min.css" />
 
    <!-- Owl Carousel -->
    <link type="text/css" rel="stylesheet" href="css/owl.carousel.css" />
    <link type="text/css" rel="stylesheet" href="css/owl.theme.default.css" />
 
    <!-- Magnific Popup -->
    <link type="text/css" rel="stylesheet" href="css/magnific-popup.css" />
 
    <!-- Font Awesome Icon -->
    <link rel="stylesheet" href="css/font-awesome.min.css">
 
    <!-- Custom stlylesheet -->
    <link type="text/css" rel="stylesheet" href="css/style.css" />
 
 
 
 
 
</head>
<body background="albeniz.gif">
 
 
<form method="POST" action="login.php">
            <label>Usuario</label><br>
            <input  type="text" size="50" name="usuario" placeholder="Escriba su usuario" class="login" autocomplete="off"><br>
            <label>Contraseña</label><br>
            <input type="password" size="50" name="passwd" placeholder="Escriba su contraseña" class="login" autocomplete="off"><br>
 
            <input type="submit" value="Entrar" class="btn" name="insert"> <br>
 
 
 
 
 
<?php
    if(isset($_POST['insert'])){
 
        $usuario = $_POST['usuario'];
        $password =($_POST['passwd']);
 
$stmt = "SELECT Repr_codigo,Repr_contra FROM GENETREPR WHERE Repr_codigo = '$usuario' 'AND Repr_contra = '$password'";
if($stmt == false){
    echo 'Usuario incorrecto';
}else{
    session_start();
    # Y guardar un valor que nos pueda decir si el usuario
    # ya ha iniciado sesión o no. En este caso es el nombre
    # de usuario
    $_SESSION["usuario"] = $usuario;
    # Luego redireccionamos a la página "Secreta"
    header("Location: Acciones.php");
    }
 
 
?>
 
</body>
</html>

No me funciona... Me aparece: Parse error: syntax error, unexpected end of file in C:\xampp\htdocs\Tabla mejoras\login.php on line 77
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Login y sesiones con SQL Server y PHP

Publicado por Julio (830 intervenciones) el 26/02/2020 15:19:32
Hola.

¿Qué conocimientos tienes de PHP? Te lo digo porque ahí veo unos cuantos errores "básicos" y no sé si es que has copiado el código de algún sitio o estás teniendo un mal día, jeje.

A ver, no va a malas, pero mira:

- el HTML no está bien construido al principio, deberías incluir DOCTYPE (ver cabeceras de HTML5 para saber más)
- abres la etiqueta <form>, metes los <input> y, ¿dónde cierras la etiqueta </form>? Esto te dará algún tipo de error, aunque "no se queje"
- el trozo de PHP que está abajo debería estar también antes del HTML, aunque no sea un error pero es conveniente
- utilizas el if(isset($_POST['insert'])) { pero nunca lo cierras, no hay llave que cierre a este if. Es posiblemente el error que te da
- defines tu sentencia en $stmt, ¿y dónde la ejecutas, en qué momento? Directamente compruebas si es false (que nunca lo será, porque es simplemente un string). Prueba a intentar loguearte con un usuario y contraseña incorrecta y verás como sales logueado igualmente

Son muchos errores de sintaxis, es normal que no te funcione como esperas.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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
sin imagen de perfil
Val: 133
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Login y sesiones con SQL Server y PHP

Publicado por Alejandro (73 intervenciones) el 27/02/2020 08:29:35
Yo he usado PHP sobre todo para hacer consultas sql y sacar en tablas resultados. Pero ahora necesito hacer un login y estoy atascado. Si me podrías corregir la sintaxis lo agradecería y aprendería para futuras ocasiones.

Tengo por un lado login.html:
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
47
48
49
50
51
52
53
<!DOCTYPE html>
<html lang="es">
<head>
 
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
 
    <title>Login</title>
 
    <!-- Google font -->
    <link href="https://fonts.googleapis.com/css?family=Montserrat:400,700%7CVarela+Round" rel="stylesheet">
 
    <!-- Bootstrap -->
    <link type="text/css" rel="stylesheet" href="css/bootstrap.min.css" />
 
    <!-- Owl Carousel -->
    <link type="text/css" rel="stylesheet" href="css/owl.carousel.css" />
    <link type="text/css" rel="stylesheet" href="css/owl.theme.default.css" />
 
    <!-- Magnific Popup -->
    <link type="text/css" rel="stylesheet" href="css/magnific-popup.css" />
 
    <!-- Font Awesome Icon -->
    <link rel="stylesheet" href="css/font-awesome.min.css">
 
    <!-- Custom stlylesheet -->
    <link type="text/css" rel="stylesheet" href="css/style.css" />
 
 
 
 
 
</head>
<body background="albeniz.gif">
 
 
 
    <form action="log.php" method="post">
 
        <input name="usuario" type="text" placeholder="Escribe tu nombre de usuario">
        <br><br>
        <input name="passw" type="password" placeholder="Contraseña">
        <br><br>
 
        <input type="submit" value="Iniciar sesión">
    </form>
</body>
</html>
 
</body>
</html>

Y luego el log.php:

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
<?php
$serverName = "srvprincipal";
$connectionInfo = array( "Database"=>"GCOMB000", "UID"=>"UserPlanificacion", "PWD"=>"Albeniz2020");
$conn = sqlsrv_connect( $serverName, $connectionInfo );
if( $conn === false ) {
    die( print_r( sqlsrv_errors(), true));
}
 
?>
 
<?php
 
$usuario = $_POST["usuario"];
$password = $_POST["passw"];
$sql = "SELECT Repr_codigo,Repr_contra FROM GENETREPR WHERE Repr_codigo = '$usuario' AND Repr_contra = '$password'";;
 
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
   }
 
 
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
 
 
 
 
$usuario_correcto = $row['Repr_codigo'];
 
 
$palabra_secreta_correcta = $row['Repr_contra'];
 
 
if ($usuario === $usuario_correcto && $palabra_secreta_correcta === $password) {
 
    session_start();
 
    $_SESSION["usuario"] = $usuario;
 
    header("Location: Acciones.php");
} else {
 
    echo "El usuario o la contraseña son incorrectos";
}
}
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Login y sesiones con SQL Server y PHP

Publicado por Julio (830 intervenciones) el 27/02/2020 08:42:36
Hola.

En el primer archivo, las líneas 52 y 53 sobran, fíjate que están repetidas.

En el segundo archivo, línea 15, acabas dos veces con punto y coma, sobra uno.

Y creo que, ahora, errores de sintaxis no veo más.

De todas formas fíjate en esto. Haces:

1
2
3
$usuario = $_POST["usuario"];
$password = $_POST["passw"];
$sql = "SELECT Repr_codigo,Repr_contra FROM GENETREPR WHERE Repr_codigo = '$usuario' AND Repr_contra = '$password'";

Luego haces:

1
2
$usuario_correcto = $row['Repr_codigo'];
$palabra_secreta_correcta = $row['Repr_contra'];

O sea, $usuario_correcto será $row['Repr_codigo'], pero $row['Repr_codigo'] solo puede ser igual a $usuario pues en la sentencia SQL has puesto que solo seleccione a ese usuario. Lo mismo con la contraseña. Con lo cual, luego haces:

1
if ($usuario === $usuario_correcto && $palabra_secreta_correcta === $password) {

Y es hacer de nuevo la comprobación. O sea, el SQL devuelve elementos cuyo Repr_codigo sea $usuario y, una vez devueltos, vuelves a comprobar de nuevo que $usuario sea $row['Repr_codigo'] (que has guardado en $usuario_correcto). Estás haciendo dos veces lo mismo, además de hacerlo también con la contraseña.

De todas formas, ¿qué error te da ahora?

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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
sin imagen de perfil
Val: 133
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Login y sesiones con SQL Server y PHP

Publicado por Alejandro (73 intervenciones) el 27/02/2020 08:59:12
Hola,

Ahora al loguear, se me pone la pantalla blanca total. Sea user correcto o no.
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Login y sesiones con SQL Server y PHP

Publicado por Julio (830 intervenciones) el 27/02/2020 09:27:14
¿Qué hay en Acciones.php?

¿Puedes comprobar si entra en el while? Ponle justo después del while un, por ejemplo, echo 'Pasa'; y miras si sigue saliendo en blanco. Y ponle justo encima del while un, por ejemplo, echo 'Encima'; y miras a ver si sale.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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
sin imagen de perfil
Val: 133
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Login y sesiones con SQL Server y PHP

Publicado por Alejandro (73 intervenciones) el 27/02/2020 09:43:58
Hola Julio.

Ya lo he logrado, entre tus consejos y darle al coco. Te dejo el código por si lo necesitas alguna vez y muchas gracias por la ayuda:

:D

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
 
#starts a new session
session_start();
 
#includes a database connection
$serverName = "srvprincipal";
$connectionInfo = array( "Database"=>"GCOMB000", "UID"=>"UserPlanificacion", "PWD"=>"Albeniz2020");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
 
#catches user/password submitted by html form
$user = $_POST['usuario'];
$password = $_POST['passw'];
 
#checks if the html form is filled
if(empty($_POST['usuario']) || empty($_POST['passw'])){
    echo "Mirar en la consulta!";
}else{
 
#searches for user and password in the database
$query = "SELECT * FROM GENETREPR WHERE Repr_codigo = '$user' AND Repr_contra = '$password' AND Repr_emp = '1'";
$result = sqlsrv_query($conn, $query);  //$conn is your connection in 'connection.php'
 
#checks if the search was made
if($result === false){
     die( print_r( sqlsrv_errors(), true));
}
 
#checks if the search brought some row and if it is one only row
if(sqlsrv_has_rows($result) != 1){
       header('Location: login.html');
}else{
 
#creates sessions
    while($row = sqlsrv_fetch_array($result)){
 
       $_SESSION['name'] = $row['Repr_nombre'];
 
 
    }
#redirects user
    header('Location: Acciones.php');
}
}
 
?>
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

Login y sesiones con SQL Server y PHP

Publicado por Oscar Manrique (1 intervención) el 31/05/2021 19:24:46
gracias funciono ese script
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