Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Variables de session

Estas en el tema de Variables de session en el foro de PHP en Foros del Web. Muy buenas a todos. Estoy haciendo el backend de una web y me ha pasado una cosa muy rara. En el apartado del login, que ...
  #1 (permalink)  
Antiguo 09/11/2017, 08:43
 
Fecha de Ingreso: enero-2011
Mensajes: 16
Antigüedad: 11 años, 5 meses
Puntos: 0
Variables de session

Muy buenas a todos.

Estoy haciendo el backend de una web y me ha pasado una cosa muy rara.

En el apartado del login, que lo tengo deiferenciado de si es admin o usuario, un a vez te registras accedes o a una pagina o a otra.
Y paso medianto una variable de session el id para varias cosas. Sinó que vuelva a la página de login.

Bien, pues el problema , es que todo funcionaba bien hasta que he actualizado la version de MAMP a la última, que me pedía actualizar las tablas ya que la útlima versión trabaj con php 7, o me imagino que es por eso, xq la anterior versión trabajaba en php 5.
Os adjunto código xq me estoy volviendo loco, y además como no soy ningún experto en php (estoy haciendo esta web para aprender) espero que vosotros que soi maestros, si sólo con ver el código, sabeis que demonios pasa.

Index.php

Código HTML:
<form name="form-login" id="form-login" action="validar.php" method="POST">
			
		<div class="reg-block-header">
				<h2>Lógin</h2>
				
				<p>No tienes una cuenta, haz clik <a class="color-green" href="../registro.php">aquí</a> para regístrate.</p>
		  </div>

			<div class="input-group margin-bottom-20">
				<span class="input-group-addon"><i class="fa fa-envelope"></i></span>
				<input type="text" class="form-control" placeholder="Email" name="username" id="username">
			</div>
			<div class="input-group margin-bottom-20">
				<span class="input-group-addon"><i class="fa fa-lock"></i></span>
				<input type="text" class="form-control" placeholder="Contraseña" name="password" id="password">
			</div>
			<hr>

			<div class="checkbox">
				<label>
					<input type="checkbox">
					<p>Recordar</p>
				</label>
			</div>

			<div class="row">
				<div class="col-md-10 col-md-offset-1">
					<button type="submit" class="btn-u btn-block">Entrar</button>
				</div>
			</div>
			<hr>
			<h4>Has olvidado tu contraseña?</h4>
						<p><a class="color-green" href="#">Pincha aquí</a> para recuperarla.</p>
		  </form> 
Validar.php

Código PHP:
session_start();
    require(
"connect_db.php");

    
$username=$_POST['mail'];
    
$pass=$_POST['pass'];


    
//la variable  $mysqli viene de connect_db que lo traigo con el require("connect_db.php");
    
$sql2=mysqli_query($mysqli,"SELECT * FROM login WHERE email='$username'");
    if(
$f2=mysqli_fetch_assoc($sql2)){
        if(
$pass==$f2['pasadmin']){
            
$_SESSION['id']=$f2['id'];
            
$_SESSION['user']=$f2['user'];
            
$_SESSION['rol']=$f2['rol'];

            echo 
'<script>alert("BIENVENIDO ADMINISTRADOR")</script> ';
            echo 
"<script>location.href='admin.php'</script>";
        
        }
    }


    
$sql=mysqli_query($mysqli,"SELECT * FROM login WHERE email='$username'");
    if(
$f=mysqli_fetch_assoc($sql)){
        if(
$pass==$f['password']){
            
$_SESSION['id']=$f['id'];
            
$_SESSION['user']=$f['user'];
            
$_SESSION['rol']=$f['rol'];

            
header("Location: index2.php");
        }else{
            echo 
'<script>alert("CONTRASEÑA INCORRECTA")</script> ';
        
            echo 
"<script>location.href='index.php'</script>";
        }
    }else{
        
        echo 
'<script>alert("ESTE USUARIO NO EXISTE, PORFAVOR REGISTRESE PARA PODER INGRESAR")</script> ';
        
        echo 
"<script>location.href='index.php'</script>";    

    } 
Admin.php (sólo pongo como recupero la variable, ya que el resto es html

Código PHP:
<?php
    session_start
();
    if (@!
$_SESSION['iduser']) {
        
header("Location:index.php");
    }
    
?>

Bueno espero me podais ayudar, xq seguramtente será una chorrada.
  #2 (permalink)  
Antiguo 09/11/2017, 09:12
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.129
Antigüedad: 11 años, 3 meses
Puntos: 167
Respuesta: Variables de session

$_SESSION['iduser'] estas recuperando iduser??? pero en ambas consultas a la DB asiganas a:
$_SESSION['id']=$f['id']; y $_SESSION['id']=$f2['id'];

no existe $_SESSION['iduser'], existe $_SESSION['id'], tienes un par de codigos que estan de mas, pero aun asi te tiene que funcionar corrigiendo ese detalle...

estas variables

Código PHP:
Ver original
  1. $username=$_POST['mail'];
  2.     $pass=$_POST['pass']
tienes que validar:
Código PHP:
Ver original
  1. if(isset($_POST['pass']) && !empty($_POST['pass'])){//Si variable esta definida(existe) y no esta vacia... entonces la asignas
  2. $pass = $_POST['pass'];
  3. }
para un mejor funcionamiento
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)
  #3 (permalink)  
Antiguo 09/11/2017, 09:32
 
Fecha de Ingreso: enero-2011
Mensajes: 16
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Variables de session

Perdón y me equivoqué.

El codigo correcto de validar es

Código PHP:
session_start();
    require(
"connect_db.php");

    
$username=$_POST['username'];
    
$pass=$_POST['password'];


    
//la variable  $mysqli viene de connect_db que lo traigo con el require("academia3/connect_db.php");
    
$sql2=mysqli_query($mysqli,"SELECT * FROM users WHERE username='$username'");
    if(
$f2=mysqli_fetch_assoc($sql2)){
        if(
$pass==$f2['pass_admin']){
            
$_SESSION['iduser']=$f2['iduser'];
            
$_SESSION['nombre']=$f2['nombre'];
            
$_SESSION['rol']=$f2['rol'];

            echo 
'<script>alert("BIENVENIDO ADMINISTRADOR")</script> ';
            echo 
"<script>location.href='admin.php'</script>";
        
        }
    } 
Aún así que me aconsejas
Y perdón por el error, con razon no coincidian las variables
  #4 (permalink)  
Antiguo 09/11/2017, 10:33
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Variables de session

Estimado valida siempre cualquier variable que el usuario vaya a insertar en una consulta sql, o te pueden hacer inyections y otros:

Código PHP:
Ver original
  1. $username=mysqli_real_escape_string($mysqli, $_POST['mail']);
  2. $pass=mysqli_real_escape_string($mysqli, $_POST['pass']);
  #5 (permalink)  
Antiguo 10/11/2017, 03:29
 
Fecha de Ingreso: enero-2011
Mensajes: 16
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Variables de session

Me auto respondo xq ya he dado con la solución por si ha alguien le pasa.

Como el error me surgio de instalar al última versión de MAMP. miré en preferecnias y cambien la versión de php de la 7.1.8 que es la última y estaba marcada, a la anterior que me daba opción. 7.0.22.

Si alguien sabe xq puede ser, soy todo oidos, pero al mnenos ya funciona lo de poder pasar la variable de session.

saludos y gracias por los comentarios de ayuda
  #6 (permalink)  
Antiguo 10/11/2017, 07:51
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Variables de session

Ni idea, veo el código y el que te dió petit, y no veo problemas de sintaxis, de ejecución, ni lógica, cuando haces una aplicación siempre es bueno configurar los reportes de error al máximo de notificaciones para saber donde pueda haber posibles errores. y así tener pistas.

Por otro lado, cuando instalas un servidor o cualquier programa de progra, siempre es bueno leer la documentación, para ver los cambios y reporte de errores y bugs.

Eso por mi parte.

Etiquetas: html, mysql, select, session, sql, tabla, variable, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:26.