Como usar variable $_SESSION en consulta

Tengo una nueva dificultad y es la siguiente: (Trabajo con PHP version 5.2.13).
Mi aplicación solicita al usuario, para ingresar a un área reservada, su login y password. Una vez validado el ingreso, se muestra una página con varias opciones a elegir. Yo quisiera que una de estas alternativas otorgue, al usuario validado, la opción de modificar/actualizar sus datos.
La mayoría de los ejemplos que se muestran en internet trabajan solicitando, mediante una caja de texto, un valor que luego se contrasta contra el valor del campo en la tabla. Ahí esta mi problema:
a) Tengo almacenado el login y el password en variables $_SESSION. En una primera instancia pensé en solicitar nuevamente el password y compararlo contra el valor almacenado en $_SESSION. Entonces hice algo así:
Código :
$mpassword=$_SESSION['pusuario]; 
$mvalor=$_POST['clave'];  // mvalor ya esta validado para evitar injeccion etc..... 
if($mvalor!=$mpassword) { 
   header("Location: http://www.xxx.com/area/x1.php?errno=1"); } 
else { 
       include("connect.php"); // aqui sigo dando la instruccion de buqueda y pido que muestre... 
      }
PERO, NUNCA me realizo la búsqueda y se quedaba en el header. :(
Al depurar e imprimir con echo, observe que si quería mostrar en pantalla los dos valores ($mpassword y $mvalor) uno de ellos nunca se mostraba, pero, si solo pedía ver uno de ellos (CUALQUIERA) se pintaba sin problemas .
b) Me dije "ya no solicito el password porque lo tengo, pero solicitare otros dos datos" y en la instrucción de consulta escribí así:
Código :
$mquery="SELECT * FROM $tabla WHERE clave =" .$mpassword. "&&  (egreso like '%".$megreso."%' && especia like '%".$mespec."%')";
Porque si pongo "clave LIKE ..." obvia esta condición y me muestra cualquier registro que cumpla los otros dos valores de los campos solicitados. Resultado: mensaje de error:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/xxx/public_html/area/x2.php on line 49
----
Snif!
Por ello, me pregunto y les consulto: ¿Se puede usar el contenido de una variable $_SESSION para realizar este trabajo? Porque si pido el password en caja de texto y lo uso para compararlo contra el valor del campo "clave" de la tabla no tengo problemas, PERO si alguien colocase otro password, si lo supiera, podrían salir los datos de OTRA persona y NO QUIERO ESO.
Tal vez el problema es que se trata de tipos de variables distintas, ¿no?.
Entonces, ¿podrían ayudarme con esta dificultad?. Agradezco muchísimo de antemano las sugerencias que puedan darme, la verdad este asunto me tiene cabezona.
Nuevamente, mil gracias
p.s. Millon de gracias al experto que me ayudo con la respuesta anterior. Aun no se bien como escribir los comentarios :(
{"lat":43.3193080962475,"lng":-4.90076065063477}

1 respuesta

Respuesta
1
Bueno en el caso a) si has pegado el código tal cuál lo tienes en el archivo yo te diría que el error está aquí:
$mpassword=$_SESSION['pusuario]; -> Falta una comilla simple a la derecha de pusuario
en el caso b) el error yo diría que está en la consulta aquí:
clave =" .$mpassword. "   tendría que ser -> clave ="'".$mpassword."' ya que es texto y debe ir entre comillas simples, por otra parte meter entre paréntesis cada claúsula WHERE siempre te ayudará para tenerlo todo más claro.
Espero que te sirva de algo, sino me dices y lo vemos. Un saludo.
Pd: bueno queno he respondido, si que se pueden usar los datos de sesión en variables para hacer consultas y eso claro :).
Muchísimas Gracias experto, por tu respuesta :) la voy a probar !
Estimado experto, no he podido resolver el problema :( El codigo es asi. El ultimo
session_name('20preocupa');
// Inicializo las variables
$my_pattern="/^(1|2)[0-9]+\-?/";
$sql_tabla2="preocupacion";
$mclean = array();
$mviaje= $_POST['mviaje'];
//valido si ingreso por forma
if(empty($mviaje))  {
 header("Location: http://www.xxx.com/index.html") ;
 exit();   }
 // ENTONCES descargo las variables
else                   {  //PRIMER else
 $mcl=array(
 'myear' => trim($_POST['myear']),
 'moculto' => trim($_POST['moculto']),
 );
 //cuido el posible injection
 foreach($mcl as $pepe=>$pepa) {
 require ("evita.php");
  };
  //asigno vars  que han pasado test al array clean
 $mclean['moculto'] = $mcl['moculto'];
 $mclean['mcarrera'] = $mcl['mcarrera'];
 // verifico que hayan llenado la forma
 if (empty($mcl['myear']) && empty($mcl['mcarrera'])) {  
   // Redirecciona a modi1.php Se envia la variable de tipo GET "errno" con valor 1.
    header("Location: http://www.xxx.com/area/modi1.php?errno=1") ; } //llena la forma!    
 else    {         //SEGUNDO else
    // valido ingreso año de egreso
   if(preg_match($my_pattern, $mcl['myear'])) { 
      $mclean['myear'] = $mcl['myear'];     }
   else {
     // redirecciona a modi1.php Se envia la variable de tipo GET "errno" con valor 3.
          header("Location: http://www.xxx.com/area/modi1.php?errno=3") ; } //errno 3 = año no valido 
    //  
        }    // CIERRO SEGUNDO ELSE
            } //cierro el PRIMER ELSE 
     $mnkey= $_SESSION['uncript'];
     // realizo la consulta con valores guardados
     include ("conexion.php");
     $megreso= trim($mclean['myear']);
     $mespec= trim($mclean['mcarrera']);
     //aqui busco los datos para pintarlos    
     //$mquery="SELECT * FROM $sql_tabla2 WHERE clave ="."'$mnkey'". &&  "(".a_egreso like "'%".$megreso."%'" && codigo_esp like "'%".$mespec. "%')";
     $mcons="SELECT * FROM $sql_tabla2 WHERE clave ='$mnkey' AND  a_egreso = '$megreso' AND codigo_esp ='$mespec'";
     $usuario_consulta = mysql_query($mcons);
     if(mysql_num_rows($usuario_consulta)!=0) {
     while($rs=mysql_fetch_object($usuario_consulta)){
     $campo1=$rs->a_egreso;   
     $campo2=$rs->codigo_esp;
     $campo3=$rs->nombres;
     $campo4=$rs->apMat;
     $campo5=$rs->apPat;
     $campo6=$rs->id_doc;
     $campo7=$rs->dni;
     $campo8=$rs->email2;
     $campo9=$rs->e_dir;
     $campo10=$rs->estado;
     $campo11=$rs->telf;
     $campo12=$rs->celu;
     $campo13=$rs->comp;
     $campo14=$rs->e_pos;
     $campo15=$rs->telfcomp;
     $campo16=$rs->email; } }
     else {
     header("Location: http://www.xxx.com/area/modi1.php?errno=2") ; } //volver a llenar
?>
---- El ultimo header es el que se activa
Uf hay mucho código ahí, si eres tan amable me puedes indicar que es lo que te falla más concretamente, ¿o si el navegador te muestra algún línea de error?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas