Foros del Web » Programando para Internet » PHP »

Variables de sesion.

Estas en el tema de Variables de sesion. en el foro de PHP en Foros del Web. Buenas tardes. Tengo un problema al hacer consultas, en php, y es que estoy manejando variables de sesión, pero tengo distintos filtrados. Es decir, si ...
  #1 (permalink)  
Antiguo 19/02/2014, 13:34
 
Fecha de Ingreso: enero-2014
Mensajes: 127
Antigüedad: 10 años, 2 meses
Puntos: 2
Variables de sesion.

Buenas tardes.

Tengo un problema al hacer consultas, en php, y es que estoy manejando variables de sesión, pero tengo distintos filtrados. Es decir, si ciertas personas pertenecen a X zona, se pueden mostrar, pero si, y solo si la persona que esta realizando la búsqueda, pertenece a la misma zona. Pero ambos (tanto el que busca, como los usuarios que piensa ver) se encuentran en distintas tablas.

Las tablas, son: Curp_Zona y Cat_prom_zona y a su vez, ambos pertenecen a la tabla de usuarios.

Para empezar, estoy delimitándolos por tipos de usuario, con las variables de sesión:

Código PHP:
<?php
if (!isset($_SESSION)) {
  
session_start();
}
$MM_authorizedUsers "Administrador,Admin2,Gerente,GR,Supervisor,User";
$MM_donotCheckaccess "false";

function 
isAuthorized($strUsers$strGroups$UserName$UserGroup) { 
 
  
$isValid False

  
  if (!empty(
$UserName)) { 
    
    
$arrUsers Explode(","$strUsers); 
    
$arrGroups Explode(","$strGroups); 
    if (
in_array($UserName$arrUsers)) { 
      
$isValid true
    } 
     
    if (
in_array($UserGroup$arrGroups)) { 
      
$isValid true
    } 
    if ((
$strUsers == "") && false) { 
      
$isValid true
    } 
  } 
  return 
$isValid
}

$MM_restrictGoTo "nopermiso.php";
if (!((isset(
$_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers$_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {   
  
$MM_qsChar "?";
  
$MM_referrer $_SERVER['PHP_SELF'];
  if (
strpos($MM_restrictGoTo"?")) $MM_qsChar "&";
  if (isset(
$_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0
  
$MM_referrer .= "?" $_SERVER['QUERY_STRING'];
  
$MM_restrictGoTo $MM_restrictGoTo$MM_qsChar "accesscheck=" urlencode($MM_referrer);
  
header("Location: "$MM_restrictGoTo); 
  exit;
}
?>
Pero ahora, además quiero filtrarlos por zona, respecto a la que les toca 'supervisar' lo cual quiero hacer con ayuda de la misma tabla de login (la variable de sesión), ya que esta me ayuda con las sesiones, tomando en cuenta el curp del encargado, que asu vez, está ligado a la zona que le toca.

Y pues, hice este select, pero no me sirve para nada de nada. :(

Código:
SELECT usuarios.CURP, usuarios.Nombre, usuarios.Apellido_P, usuarios.Apellido_M, usuarios.RFC, usuarios.Telefono, usuarios.Celular, usuarios.Plaza, usuarios.email, cat_prom_zona.ZONA
FROM usuarios, cat_prom_zona, curp_zona ON cat_prom_zona.ZONA = curp_zona.ZONA
WHERE " $_SESSION['curp']= " curp_zona.CURP
  #2 (permalink)  
Antiguo 19/02/2014, 14:04
 
Fecha de Ingreso: junio-2011
Ubicación: Barcelona
Mensajes: 212
Antigüedad: 12 años, 10 meses
Puntos: 17
Respuesta: Varianbles de sesion.

Una pregunta has visto el resultado de esa consulta y la has comprobado desde el phpmyadmin mismo? Introduciendo la consulta manualmente me refiero.

No tiene problemas de sintaxis? Es que veo algo raro en el WHERE de la consulta no se si lo has puesto a posta o no por que el codigo esta correcto.

Un saludo
__________________
Twitter: @ed33x
  #3 (permalink)  
Antiguo 19/02/2014, 14:06
 
Fecha de Ingreso: enero-2014
Mensajes: 127
Antigüedad: 10 años, 2 meses
Puntos: 2
Respuesta: Varianbles de sesion.

Jaja, si, ahí mi problema. Con 'no sirve' me refiero a tengo errores de sintaxis. :( Justamente después del where, donde quiero hacer la comparación, con ayuda del curp, que se encuentra en los datos de login que utilizo para hacer en logueo, el cual debe ser igual al de la tabla de curp_zona (curp_zona.CURP) y el del usuario que este activo en la sesión

Última edición por Karen_mBrK; 19/02/2014 a las 14:18
  #4 (permalink)  
Antiguo 19/02/2014, 14:34
 
Fecha de Ingreso: junio-2011
Ubicación: Barcelona
Mensajes: 212
Antigüedad: 12 años, 10 meses
Puntos: 17
Respuesta: Varianbles de sesion.

Es que creo que lo tienes al revés el WHERE seria a si;

Código MySQL:
Ver original
  1. SELECT usuarios.CURP, usuarios.Nombre, usuarios.Apellido_P, usuarios.Apellido_M, usuarios.RFC, usuarios.Telefono, usuarios.Celular, usuarios.Plaza, usuarios.email, cat_prom_zona.ZONA
  2. FROM usuarios, cat_prom_zona, curp_zona ON cat_prom_zona.ZONA = curp_zona.ZONA
  3. WHERE curp_zona.CURP = $_SESSION['curp']

Coméntame que tal. Recoge el valor de la consulta manualmente y hazlo manualmente a ver que resultados te da.

Un saludo.
__________________
Twitter: @ed33x
  #5 (permalink)  
Antiguo 19/02/2014, 14:45
 
Fecha de Ingreso: enero-2014
Mensajes: 127
Antigüedad: 10 años, 2 meses
Puntos: 2
Respuesta: Varianbles de sesion.

Ya había intentado eso, y me da este error:

Parse error: syntax error, unexpected '$_SESSION' (T_VARIABLE)

Porque creo, que la falla está, en que el curp, no es un parámetro de logueo como tal, aunque si pertenezca a la misma tabla de donde se toman los datos, así que por eso no sé como podría entrar dicha variable en todo esto.
  #6 (permalink)  
Antiguo 19/02/2014, 15:12
 
Fecha de Ingreso: junio-2011
Ubicación: Barcelona
Mensajes: 212
Antigüedad: 12 años, 10 meses
Puntos: 17
Respuesta: Varianbles de sesion.

Hay cosas que no me cuadran por ejemplo en el codigo del primer hilo no le asignas ningun valor a $_SESSION['curp'].

Luego respecto al primer if;

Código PHP:
Ver original
  1. if (!isset($_SESSION)) {
  2. }

No entiendo muy bien el por que a ese if, basta con iniciar o reanudar las sesiones y listo no hace falta ningún if en el caso de que no hayan sesiones siempre va bien tener activa las sesiones para que en ese archivo no se pierdan.

Luego me has dicho que has probado en imprimir en pantalla el valor de esa consulta y el resultado lo has puesto manualmente en el phpmyadmin y no te a dado el resultado?

Ejemplo;

Código PHP:
Ver original
  1. <?php
  2. $consulta = "SELECT * FROM tabla WHERE id = 1";
  3. echo $consulta; // El resultado copiarlo.
  4. ?>

Un saludo.
__________________
Twitter: @ed33x
  #7 (permalink)  
Antiguo 19/02/2014, 16:23
 
Fecha de Ingreso: enero-2014
Mensajes: 127
Antigüedad: 10 años, 2 meses
Puntos: 2
Respuesta: Varianbles de sesion.

No tengo problema con las sesiones. Lo único es a partir del where, les puse el código, solo para que vieran como estoy manejando mis sesiones.

Y si, eso que me pusiste, ya lo había intentado, pero me da error.
  #8 (permalink)  
Antiguo 19/02/2014, 22:04
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Variables de sesion.

Por favor muestra como estás tratando de armar la consulta en PHP, de otra forma va a ser difícil ayudarte.
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 20/02/2014, 09:21
 
Fecha de Ingreso: enero-2014
Mensajes: 127
Antigüedad: 10 años, 2 meses
Puntos: 2
Respuesta: Variables de sesion.

Primero, quiero utilizar mis variables de sesión, o bien la tabla que contiene dichos datos (Password, Nombre, Nivel, Curp) Pero solo se ocupan los primeros 3 datos, y me gustaría también usar el curp, para de tal manera, en base al curp que este usando la sesión, se mostrarán datos que pertenezcan a su misma zona.

Al principio del post, coloqué el código que estoy usando para las sesiones, y aquí el código que quiero usar para el filtrado que necesito, cabe mencionar, que dentro de este mismo, también esta un juego de registros que me trae los datos del usuario que está utilizando la sesión, hagan caso omiso de este, ya que ese si funciona correctamente.

Código PHP:
 <?php
if (!function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  if (
PHP_VERSION 6) {
    
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}

$colname_Datos "-1";
if (isset(
$_SESSION['MM_Username'])) {
  
$colname_Datos $_SESSION['MM_Username'];
}
mysql_select_db($database_Pharma$Pharma);
$query_Datos sprintf("SELECT usuarios.CURP, Nombre, Apellido_P, Apellido_M, RFC, Telefono, Celular, email, Plaza, Fecha_Inicio FROM usuarios inner join login WHERE Usuario = %s AND usuarios.CURP = login.Curp"GetSQLValueString($colname_Datos"text"));
$Datos mysql_query($query_Datos$Pharma) or die(mysql_error());
$row_Datos mysql_fetch_assoc($Datos);
$totalRows_Datos mysql_num_rows($Datos);

// Aquí comienza el filtrado que necesito, pero que no me sale

mysql_select_db($database_Pharma$Pharma);
$query_Supervisor "SELECT usuarios.CURP, usuarios.Nombre, usuarios.Apellido_P, usuarios.Apellido_M, usuarios.RFC, usuarios.Telefono, usuarios.Celular, usuarios.Plaza, usuarios.email, cat_prom_zona.ZONA FROM usuarios, cat_prom_zona, curp_zona ON cat_prom_zona.ZONA = curp_zona.ZONA ";



$Supervisor mysql_query($query_Supervisor$Pharma) or die(mysql_error());
$row_Supervisor mysql_fetch_assoc($Supervisor);
$totalRows_Supervisor mysql_num_rows($Supervisor);
?>
  #10 (permalink)  
Antiguo 20/02/2014, 18:39
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Variables de sesion.

Analizando tu consulta:

Código MySQL:
Ver original
  1. SELECT usuarios.CURP, usuarios.Nombre, usuarios.Apellido_P, usuarios.Apellido_M, usuarios.RFC, usuarios.Telefono, usuarios.Celular, usuarios.Plaza, usuarios.email, cat_prom_zona.ZONA
  2. FROM usuarios, cat_prom_zona, curp_zona
  3. ON cat_prom_zona.ZONA = curp_zona.ZONA

Tu problema no es con PHP sino con MySQL, necesitas aprender a usar JOIN, te dejo un ejemplo:

Código MySQL:
Ver original
  1. SELECT tabla1.campo1, tabla1.campo2, tabla2.campo1, tabla3.campo1
  2. FROM tabla1
  3. JOIN tabla2 ON tabla1.campox = tabla2.campox
  4. JOIN tabla3 ON tabla2.campoy = tabla3.campoy

Ya viéndolo con más detenimiento, creo que debes hacer dos consultas, una para los datos del usuario (parece que ya la tienes) y otra con información de las zonas; aunque claro, primero habría que saber lo que quieres hacer exactamente.
__________________
- León, Guanajuato
- GV-Foto
  #11 (permalink)  
Antiguo 21/02/2014, 11:44
 
Fecha de Ingreso: enero-2014
Mensajes: 127
Antigüedad: 10 años, 2 meses
Puntos: 2
Respuesta: Variables de sesion.

Ok, intentaré explicarlo mejor:

Yo, llego y me logueo, soy supervisor de la Región 3, que a su vez, tiene 5 Zonas.
Y cada zona a su vez, es trabajada por 2 o 3 personas, dependiendo. Yo al ser supervisor, debo ser capaz de realizar búsquedas respecto a mis empleados, pero solo los que pertenecen a mi área, y no al de mis compañeros supervisores.
Obviamente no son las únicas Regiones y zonas que existen en la base de datos.

Cuando me logueo, en mi tabla de login, tengo 4 datos: Curp (mi llave principal) Usuario, Password, y Nivel. Pero en mis sesiones solo ocupo los últimos 3 campos, en otra tabla tengo los curps ligados con regiones y otra con zonas, dependiendo, y tengo además también, una tabla que se llama "Region por Zona" que asigna a las zonas por región.

Mi duda es ¿Cómo tomar el curp, de la tabla de login, respecto al usuario que esté actualmente activo en la sesión, para así saber que debo y no mostrar? Y esto mismo, aplicar para más niveles de usuarios.

Espero haberme explicado bien, gracias.
  #12 (permalink)  
Antiguo 23/02/2014, 21:55
 
Fecha de Ingreso: enero-2014
Mensajes: 127
Antigüedad: 10 años, 2 meses
Puntos: 2
Respuesta: Variables de sesion.

¿Si se puede hacer eso? ¿O alguien tiene otra sugerencia?
  #13 (permalink)  
Antiguo 24/02/2014, 00:49
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Variables de sesion.

A ver, no sé si entendí bien, pero, en alguna parte tienes las zonas a las que cada usuario puede tener acceso y, a la vez, un supervisor que puede ver las zonas de los usuarios que dependen de él.

Suponiendo que las relaciones son:

Supervisor -> Uno a varios con usuario
Usuario -> Uno a uno con supervisor
Zonas -> Varios a varios con usuario

1- Obtener info del supervisor - 1 consulta, supongo que esa ya está y sería algo como:
- "SELECT * FROM usuarios WHERE filtro-supervisor-conectado"

2- Obtener usuarios del supervisor - 1 consulta
- "SELECT id, nombre, clave_foranea_para_zonas FROM usuarios WHERE supervisor = supervisor-conectado"

3- Obtener zonas de cada usuario - 1 consulta
zonas = "SELECT campos, necesarios FROM zonas WHERE filtro-zona-por-usuario"

Tal vez los pasos 2 y 3 pudieran obtenerse en una sola consulta, pero nuestra especialidad aquí es PHP y no Bases de datos; dime si lo crees conveniente y movemos el tema al foro adecuado.
__________________
- León, Guanajuato
- GV-Foto
  #14 (permalink)  
Antiguo 24/02/2014, 05:30
 
Fecha de Ingreso: enero-2014
Mensajes: 127
Antigüedad: 10 años, 2 meses
Puntos: 2
Respuesta: Variables de sesion.

Si, es prácticamente lo que necesito, sin embargo, eso que mencionas de 'supervisor-conectado' creo que si tiene que ver con php, ya que, es en base a las sesiones. Así como el paso 3, ya que si solo pusiera:

Código PHP:
Select from zonas_sup inner join zonas_user where zona_sup.zona zona_User.zona 
Me traería todos sin filtros, ya que todas las zonas de los usuarios normales, y las de los supervisores, en algún omento coinciden.

Y gracias, por estar intentando ayudarme. :)
  #15 (permalink)  
Antiguo 24/02/2014, 06:43
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Variables de sesion.

Código PHP:
Ver original
  1. $usuarios = array();
  2. $zonas = array();
  3.  
  4. // Consulta los usuarios del supervisor
  5. // SELECT user_id  FROM usuarios WHERE supervisor = supervisor_conectado
  6. while($row = mysql_fetch_assoc($usuarios_sup_consulta)) {
  7.      $usuarios[] = $row['user_id'];
  8. }
  9.  
  10. // Consulta las zonas del supervisor; sin ver la estructura de tus tablas sería algo como
  11. //  SELECT zona_id, otros_campos_necesarios FROM zonas_sup WHERE supervisor = supervisor_conectado
  12. while($row = mysql_fetch_assoc($zonas_sup_consulta)) {
  13.     // Verificas que la zona no esté en el array para agregarla
  14.     if(!isset($zonas[$row['zona_id']])) {
  15.            $zonas[$row['zona_id']] = $row;
  16.     }
  17. }
  18.  
  19. // Ahora consultas las zonas de los usuarios
  20. $zonas_usuarios_consulta = "SELECT zona_id, otros_campos_necesarios FROM zonas_user WHERE user_id IN (" . implode(',', $usuarios) . ")";
  21. // Haces el while igual al de zonas de supervisor

Con eso tendrás todas las zonas en el array $zonas y puedes usarlo como lo necesites.
__________________
- León, Guanajuato
- GV-Foto

Última edición por Triby; 24/02/2014 a las 19:47 Razón: Comentarios VB Style? :borracho:
  #16 (permalink)  
Antiguo 24/02/2014, 09:35
 
Fecha de Ingreso: enero-2014
Mensajes: 127
Antigüedad: 10 años, 2 meses
Puntos: 2
Respuesta: Variables de sesion.

Ok, gracias, lo probaré y te cuento como me va.

Etiquetas: select, tabla, usuarios, variable
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 14:40.