Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Session no me funciona

Estas en el tema de Session no me funciona en el foro de PHP en Foros del Web. Quisas el tema sea un poco repetido pero he buscado y no he encontrado la respuesta adecuada a lo que estoy haciendo. 1- index login ...
  #1 (permalink)  
Antiguo 06/12/2013, 08:29
 
Fecha de Ingreso: mayo-2013
Ubicación: CHILE
Mensajes: 17
Antigüedad: 11 años, 6 meses
Puntos: 0
Pregunta Session no me funciona

Quisas el tema sea un poco repetido pero he buscado y no he encontrado la respuesta adecuada a lo que estoy haciendo.

1- index login htm --USER - PASS - y un select el cual indico cual es el pricilegio para acceder- SUPER ADMIN - ADMIN -USUARIO COMUN.

SUPER ADMIN: puede editar, ingresar etc
Admin- Puede hacer ciertas consultas
Usuario - solo puede ver , listar.

Código:
<form action="login.php" method="get">
          </br><input name="nick" type="text" value="nick" maxlength="20">
        </br>
        </br><input name="pass" type="text" value="****" maxlength="20">
        </br>
       </br>
       <select name="ROL">
       <option value="1">Super admin</option> 
       <option value="2">Administrador2/option>
       <option value="3">Usuario</option>
       </select>
       
       </br> 
       <input name="" type="submit" value="INGRESAR">
        
      </form>

el codigo php login.php

Código PHP:
include('conexion.php');
//---------------------------------
$usuario =$_GET["nick"];
$pass $_GET["pass"];
$rol$_GET["ROL"];


$sql "SELECT COUNT (nick) AS EXISTE FROM usuario WHERE nick = '".$usuario ."' AND pass = '".$pass ."' AND id_rol = '".$rol."'";
//echo $sql;

$sentencia=OCIParse($conexion,$sql);
ocidefinebyname($sentencia,"EXISTE",$exis);
$ejecOCIExecute($sentencia);

if (
$exis 1){
    
    echo  
"OK";
    echo (
"<script> Location ='sesion_ok.php?id=$usuario'</script>");
    
    }else{
       
       echo 
"MAL";
        
        }

?> 

la consulta todo ok cuando ingreso los datos adecuado me devuelve 1 . pero nose que consulta realizar una vez consultado que si existe 1 , verificar que si es SUPER ADMIN - ADMIN o usuario?.
  #2 (permalink)  
Antiguo 06/12/2013, 21:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Session no me funciona

El rol del usuario debería estar guardado en la base de datos y no en un campo de formulario; muestra la estructura de tu tabla de usuarios y tal vez podamos ayudar.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 07/12/2013, 09:46
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: Session no me funciona

tienes que poner un campo en la tabla de usuarios de tu BD que diga si es usuario o super usuario puede ser entero y que por defecto sea 0 para usuarios y 1 para superusuarios
__________________
clasificados nunca se sabe todo
  #4 (permalink)  
Antiguo 07/12/2013, 10:56
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 14 años, 2 meses
Puntos: 56
Respuesta: Session no me funciona

eso de los permisos no se deberia de poder tocar desde la web y solo desde un back-end o asignarlo a mano a tu DB.
Si lo pones en un formulario cualquiera podra modificarlo, aunque no este ni siquiera logueado
  #5 (permalink)  
Antiguo 09/12/2013, 13:51
 
Fecha de Ingreso: mayo-2013
Ubicación: CHILE
Mensajes: 17
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Session no me funciona

Lo hice de est manera y me funciona bien: por ej Usuario: Messi Pass:1234 rol: 1. me envia a la pagina adecuada. Pero ahora lo que no se hacer es verificar cuando no existe en la base de datos, y que me devuelva al index nuevamente.

Gracias por la ayuda.......
Código PHP:
<?php session_start(); ?>

<?php  




include('conexion.php');
//---------------------------------
$usuario =$_GET["nick"];
$pass $_GET["pass"];
$rol$_GET["privilegio"];


$sql "SELECT * FROM usuario WHERE nick = '".$usuario ."' AND pass = '".$pass ."' AND id_rol = '".$rol."'";
//echo $sql;


$sentencia=OCIParse($conexion,$sql);

//if(!$sentencia){
    //header("Location:index_login.php");
    
    //}

//ocidefinebyname($sentencia,"NICK",$nick);
$ejec=OCIExecute($sentencia);



while (
$row=oci_fetch_array($sentenciaOCI_BOTH))
{
    
$id_rol=$row['ID_ROL'];
    
//echo $id_rol;
}

switch (
$id_rol)
{
    case 
1:
    
        
        
$_SESSION["id"]=$id_rol;
        
$_SESSION["usuario"]=$usuario;
        
header("Location:pagina_session1.php");
        
        break;
    
    case 
2:
    
        
        
$_SESSION["id"]=$id_rol;
        
$_SESSION["usuario"]=$usuario;
        
header("Location:pagina_session2.php");
        break;
    
    case 
3:
    
        
$_SESSION["id"]=$id_rol;
        
$_SESSION["usuario"]=$usuario;
        
header("Location:operario_index.php");
        break;
         
    
    
    
    
}
    


oci_free_statement($sentencia);

?>
  #6 (permalink)  
Antiguo 09/12/2013, 14:09
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 14 años, 2 meses
Puntos: 56
Respuesta: Session no me funciona

usa una consulta a la base de datos para que te devuelva el numero de resultados que se obtiene

Cita:
$sql = "SELECT * FROM usuario WHERE nick = '".$usuario ."' AND pass = '".$pass ."' AND id_rol = '".$rol."'";
$sql_query = 'SELECT COUNT(*) AS NUMBER_OF_ROWS FROM (' . $sql . ')';
$stmt= oci_parse($conexion, $sql_query);
oci_define_by_name($stmt, 'NUMBER_OF_ROWS', $number_of_rows);
oci_execute($stmt);
oci_fetch($stmt);
if($number_of_rows < 1) header("Location:index_login.php");

Última edición por Dalam; 09/12/2013 a las 14:24
  #7 (permalink)  
Antiguo 09/12/2013, 14:57
 
Fecha de Ingreso: mayo-2013
Ubicación: CHILE
Mensajes: 17
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Session no me funciona

Excelente respuesta era lo que pensaba pero no sabia como canalizarlo por falta de experiencia. Pero en que parte de la pagina me conviene situar este codigo?

es necesario volver a escribir:
$sql = "SELECT * FROM usuario WHERE nick = '".$usuario ."' AND pass = '".$pass ."' AND id_rol = '".$rol."'";

ya que ya la tengo y quisas me sirva cmo variable

Gracias.
  #8 (permalink)  
Antiguo 09/12/2013, 15:30
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 14 años, 2 meses
Puntos: 56
Respuesta: Session no me funciona

Te lo puse como referencia para que sepas en donde introducir el codigo, seria a continuacion de donde tu lo tienes, sin repetir esa linea, para que asi sea redirigido a la pagina de login si no se a obtenido ninguna linea.
Ten cuidado con las lineas del principio
Cita:
<?php session_start(); ?>

<?php
y sustituyelo por
Cita:
<?php session_start();
Por si lo dejas asi, la linea en blanco que escribe entre el session start y el siguiente codigo php te dara error y no hara la redireccion.
Para poder usar header('Location:pagina_a_la_que_redirigir') no se debe haber enviado nada antes, si se envia un espacio, salto de linea o cualquier cosa, te dara error de que las cabeceras han sido ya enviadas.

Última edición por Dalam; 09/12/2013 a las 17:24
  #9 (permalink)  
Antiguo 09/12/2013, 20:48
 
Fecha de Ingreso: mayo-2013
Ubicación: CHILE
Mensajes: 17
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Session no me funciona

Todo ha funcionado a la perfeccion...MUUUCHAS gRacias Dalam por la ayuda. Tengo otras dudas pero seran puesto en un nuevo tema para no mezclar.

Gracias (Tema Resuelto)
  #10 (permalink)  
Antiguo 10/12/2013, 07:02
 
Fecha de Ingreso: mayo-2013
Ubicación: CHILE
Mensajes: 17
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Session no me funciona

Si bien todo a funcionado bien, he logrado verificar si existe el usuario, pero cuando ingreso el nick y pass word correcto no logro redirecionar, al sitio correspondiente de cada usuario:
Código PHP:
<?php session_start(); ?>

<?php  




include('conexion_oracle.php');
//---------------------------------
$usuario =$_GET["nick"];
$pass $_GET["pass"];
$rol$_GET["privilegio"];


$sql "SELECT * FROM usuario WHERE nick = '".$usuario ."' AND pass = '".$pass ."' AND id_rol = '".$rol."'";
$contar ="SELECT COUNT(*) AS EXISTE FROM ('.$sql.')";

echo 
$contar;


$sentencia=OCIParse($conexion,$sql);
OciDefineByName($sentencia,"EXITE",$exis);

//OciDefineByName($sentencia,"NICK",$nick);
OCIExecute($sentencia);
oci_fetch($sentencia);

$error="USUARIO O PASSWORD NO EXISTE EN LA BD";
//consulto si la variable exis es menos a uno segun la sentencia count
if($exis 1)
{
header("Location:index_login.php?x='".$error."'");
}


while (
$row=oci_fetch_array($sentenciaOCI_BOTH))
{
    
$id_rol=$row['ID_ROL'];
    
//echo $id_rol;
}

switch (
$id_rol)
{
    case 
1:
    
        
        
$_SESSION["id"]=$id_rol;
        
$_SESSION["usuario"]=$usuario;
        
header("Location:pagina_session1.php");
        
        break;
    
    case 
2:
    
        
        
$_SESSION["id"]=$id_rol;
        
$_SESSION["usuario"]=$usuario;
        
header("Location:pagina_session1.php");
        break;
    
    case 
3:
    
        
$_SESSION["id"]=$id_rol;
        
$_SESSION["usuario"]=$usuario;
        
header("Location:operario_index.php");
        break;
         
    
    
    
    
}




oci_free_statement($sentencia);

?>


ERRORES: Notice: Undefined variable: id_rol in C:\wamp\www\PROYECTO_EXAMEN_COLECTIVOS\login_b.php on line 41
-Notice: Undefined variable: id_rol in C:\wamp\www\PROYECTO_EXAMEN_COLECTIVOS\login_b.php on line 47
-Notice: Undefined variable: id_rol in C:\wamp\www\PROYECTO_EXAMEN_COLECTIVOS\login_b.php on line 53
  #11 (permalink)  
Antiguo 10/12/2013, 07:42
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 14 años, 2 meses
Puntos: 56
Respuesta: Session no me funciona

el error esta en
Cita:
$id_rol=$row['ID_ROL'];
La base de datos es sensitive, con lo que distinge entre mayusculas y minusculas, comprueba los nombres de la tabla, por que segun has `puesto en el codigo lo buscas con minusculas, con lo que tendria que quedarte asi
Cita:
$id_rol=$row['id_rol'];
  #12 (permalink)  
Antiguo 10/12/2013, 10:09
 
Fecha de Ingreso: mayo-2013
Ubicación: CHILE
Mensajes: 17
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Session no me funciona

Lo hice como me lo indicas pero ahora me lanza solo un error:

Código PHP:
 while ($row=oci_fetch_array($sentenciaOCI_BOTH))
{
    
$id_rol $row['id_rol'];
   

ERROR:
Código:
Notice: Undefined index: id_rol in C:\wamp\www\PROYECTO_x\login_b.php on line 35
  #13 (permalink)  
Antiguo 10/12/2013, 11:26
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 14 años, 2 meses
Puntos: 56
Respuesta: Session no me funciona

y cual es tu linea 35?
  #14 (permalink)  
Antiguo 10/12/2013, 11:32
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 14 años, 2 meses
Puntos: 56
Respuesta: Session no me funciona

Vale, tu linea debe de ser la del while por que es la que tiene el error.
Cita:
while (($row=oci_fetch_array($sentencia, OCI_BOTH)))
Te falta encerrar el resultado entre parentesis de esa forma.

El modo OCI_BOTH es la opcion por defecto, con lo que podrias dejarlo asi

Cita:
while (($row=oci_fetch_array($sentencia)))
Pero si lo que vas es a usar solo el array asociativo ponlo asi

Cita:
while (($row=oci_fetch_array($sentencia, OCI_ASSOC)))
P.D.:Si quieres evitarte ese par de parentesis tendrias que definir $row fuera del while

Última edición por Dalam; 10/12/2013 a las 11:41
  #15 (permalink)  
Antiguo 10/12/2013, 12:05
 
Fecha de Ingreso: mayo-2013
Ubicación: CHILE
Mensajes: 17
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Session no me funciona

he vuelto en mayuscula y funciona $id_rol = $row['ID_ROL']; esto es raro funciona cuando quiere, pero todo a salido bien solo que no he puesto el codigo para verificar si hay datos en la base de datos.... TEMA Terminado Muchas gracias. el otro lo pondre en un nuevo tema.... MIL puntos te has ganado.

Etiquetas: select, session, sql
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 22:39.