Comunidad de diseño web y desarrollo en internet online

Como usar contenido de variable $_SESSION en consulta

Citar            
MensajeEscrito el 13 Oct 2010 05:31 pm
Estimados amigos del foro, tengo una nueva dificultad y es la siguiente: (Trabajo con PHP version 5.2.13)

Mi aplicacion solicita al usuario, para ingresar a un area reservada, su login y password. Una vez validado el ingreso, se muestra una pagina con varias opciones a elegir. Yo quisiera que una de estas alternativas otorgue, al usuario validado, la opcion de modificar/actualizar sus datos.

La mayoria 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. Ahi esta mi problema:

a) Tengo almacenado el login y el password en variables $_SESSION. En una primera instancia pense en solicitar nuevamente el password y compararlo contra el valor almacenado en $_SESSION. Entonces hice algo asi:

Código PHP :

$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 busqueda y se quedaba en el header. :(
Al depurar e imprimir con echo, observe que si queria mostrar en pantalla los dos valores ($mpassword y $mvalor) uno de ellos nunca se mostraba, pero, si solo pedia 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 instruccion de consulta escribi asi:

Código PHP :

$mquery="SELECT * FROM $tabla WHERE clave =" .$mpassword. "&&  (egreso like '%".$megreso."%' && especia like '%".$mespec."%')";

porque si pongo "clave LIKE ..." obvia esta condicion 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
:cry:
----
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, podrian 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, ¿podrian ayudarme con esta dificultad?. Agradezco muchisimo de antemano las sugerencias que puedan darme, la verdad este asunto me tiene cabezona. :(
Nuevamente, mil gracias

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 13 Oct 2010 06:55 pm
Bueno, veo un problema con el primer código que has posteado.

Código PHP :

$mvalor=$POST['clave'];

$POST no debería ser $_POST?, porque supongo que quieres tomar el parámetro pasado por POST de un formulario.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 13 Oct 2010 10:43 pm
Oh, si claro amigo DriverOp, pero eso es un error de tipeo en el mail pero no, lamentablemente, esa NO ES la dificultad en el codigo. :(

Gracias por hacermelo notar.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 14 Oct 2010 02:00 am
En ese caso el problema debe estar en otra parte del código que no has posteado. Por qué no pones el código completo en un .txt, lo subes a alguna parte y nos pasas el link.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 15 Oct 2010 02:15 am
Hola aver si me pueden ayudar con flash y php, quiero darle a un boton dentro de un swf la accion o funcion que cumple un boton comun de un php. Osea... el boton php dice enviar, pero ese php depende de otro php. En si, quiero reemplazar la accion del boton enviar del php por la de un boton dentro de un swf. Espero que se entienda saludos.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 16 Oct 2010 03:11 pm
Amigos del foro, he estado tratando de hallar una solucion a mi dificultad y no la he encontrado aún. :cry:
Por ello aqui les envio un enlace a mi codigo en txt tal como sugirio Driverop. El enlace es:

http://rapidshare.com/files/425431102/codigo.txt

cualquier ayuda o sugerencia sera bienvenida.
Gracias de antemano
20preocupa

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 22 Oct 2010 04:06 am
Hola amigos del foro! Ya resolvi mi problema :wink: Ahora tratare de contribuir al grupo con un pequeño resumen:

La situacion: Requeria hacer una consulta a una tabla teniendo ya almacenado como variable $_SESSION el password del usuario.
Como deseo que solo el verdadero usuario ingrese a actualizar sus datos, mi condicion de validacion debe comparar el password ya almacenado con el campo correspondiente de la tabla y ademas, mediante un formulario adicional, solicitar otros dos campos y compararlos.

La instruccion que llama la consulta era esta:
$mquery="SELECT * FROM $tabla WHERE clave =" .$mpassword. "&& (egreso like '%".$megreso."%' && especia like '%".$mespec."%')";

El problema: El punto es que esta instruccion no producia los resultados esperados porque la parte que compara la clave (WHERE clave =" .$mpassword. ...) no era leida nunca.

** Sugerencias tomadas en cuenta **

1) Revisar la forma como se construye la instruccion del $mquery. Ahi es importante utilizar bien las comillas simples y
dobles.

    Las comillas simples muestran el contenido tal y como lo hemos escrito.
    Las comillas dobles parsean nuestra cadena en busca de posibles variables a interpretar por PHP
    Si el contenido de la variable es una cadena debe ir entre comillas y debe ir libre en caso el valor sea numerico

Se puede revisar adicionalmente: http://www.php-hispano.net/archivos/FAQs/140/1/FAQ-del-echo1.html

Asi que al final la instruccion quedo asi:
$mquery="SELECT * FROM $tabla WHERE clave ='". $_SESSION['mspass']."' && egreso ='". $megreso."' && codigo ='" . $mespec."'";
PERO IGUAL NO OBTENIA RESULTADOS!!! :cry:

La solucion:
Colocando echos en sucesivos lugares descubri que el campo clave no era traido a mi pagina. Entonces, revise la instruccion inicial:

session_name('preocupa'); y la reemplace por require("seguridad.php"); que es el archivo que valida que cada pagina pertenezca a la sesion abierta y al volver a utilizar echo, se leyo el valor de la variable $_SESSION!!! :cool:

Comentarios Adicionales: Finalmente, mientras descubria que no es lo mismo asignar a la pagina el nombre de la sesion comun que VALIDAR la sesion, y encontrando en los mensajes de error que me salian la mencion a la palabra resource, encontre esta explicacion en un foro:

Php trabaja internamente con estructuras de datos, una de las cuales es la estructura resource. Cuando conectamos a una base de datos, cuando utilizamos un archivo, y en otras situaciones mas, Php handlea dicho recurso con la estructura resource, independientemente de (en este caso de la query que comentaste) que devuelva 0,1 o varias rows. Luego vas a tener que utilizar alguna función para extraer los datos, recorrerlos, etc.
Por ultimo, una característica de los resource, es que son NO serializables.


¿Que les parece? Bueno creo que eso es todo :)
Saludos

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.