Foros del Web » Programando para Internet » PHP »

Problema para leer mensajes en php

Estas en el tema de Problema para leer mensajes en php en el foro de PHP en Foros del Web. Lo que pasa es de que hice un sistema de usuarios con mensajes privados, y los usuarios pueden ver una lista de mensajes recibidos en ...
  #1 (permalink)  
Antiguo 12/08/2012, 15:07
 
Fecha de Ingreso: agosto-2012
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Problema para leer mensajes en php

Lo que pasa es de que hice un sistema de usuarios con mensajes privados, y los usuarios pueden ver una lista de mensajes recibidos en una bandeja de entrada, pero el problema es que cuando un usuario quiere ver y seleccionar algun mensaje que le enviaron, resulta que ocurre un error que dice que "No puedes leer los mensajes privados de otras personas". Aquí está un FRAGMENTO del código php porque AQUÍ ocurre el problema. Ojalá se resuelva pronto...:

Código PHP:
Ver original
  1. if($_GET[msg]) {
  2. if(!$_GET[tipo]) { $ver=" destinatario='$_COOKIE[nick]'"; } else { $ver=" remitente='$_COOKIE[nick]'";
  3. $com=mysql_query("SELECT * FROM mensajes WHERE id='$msg' and $ver");}
  4. if(mysql_num_rows($com) == 0) {
  5. echo "No puedes leer los mensajes privados de otras personas";
  6. }

Quien quiera ver el código completo, aquí les pongo un link de descarga directo para que lo descarguen y lo revisen, EL ERROR ESTÁ A PARTIR DE LA LÍNEA 64:
https://dl.dropbox.com/u/69007781/mensajes.php

Última edición por luisochonews; 12/08/2012 a las 15:12
  #2 (permalink)  
Antiguo 12/08/2012, 15:58
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: Problema para leer mensajes en php

Cita:
Iniciado por luisochonews
Les pondré un +karma si me ayudan :)
Y yo me abstrendré de darte un -karma si en lugar de agregar un mensaje editas el anterior para evitar ser sancionado por suma de mensajes y reflotar tema sin un aporte real.

Primero, siempre que uses un array asociativo, los índices deben estar entre comillas:

Mal: $_GET[msg]
Bien: $_GET['msg']

Segundo, siempre que uses un elemento de array dentro de una cadena, debe estar entre llaves:

Mal: " destinatario='$_COOKIE[nick]'" // Faltan llaves y comillas en el índice
Mal: " destinatario='{$_COOKIE[nick]}'" // Faltan comillas en el índice
Bien: " destinatario='{$_COOKIE['nick']}'"

Tercero, cuando ejecutes una consulta, asegúrate de que no hay errores:

$com = mysql_query(/* aquí tu consulta */) or die(mysql_error());

Cuarto, si usas datos manupulables por el usuario ($_GET, $_POST, $_COOKIE, etc.) verifícalos y escápalos para evitar problemas con tu base de datos, por ejemplo:

- Si esperas un dato numérico, asegúrate que sea así, lo más fácil es multiplicarlo por 1: $id_msg = $_GET['msg'] * 1;
- Si esperas un dato alfanumérico (cadena, texto, etc.) debes escaparlo antes de incluirlo en la consulta: $nick = mysql_real_escape_string($_COOKIE['nick']);

Quinto, tú eres el interesado en recibir ayuda, entonces deberías proporcionar toda la información necesaria directamente aquí en lugar de poner un enlace para descarga.

Finalmente, corrige tu código y si sigues teniendo problema, entonces regresas y nos cuentas qué es lo que pasa.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 12/08/2012, 16:21
 
Fecha de Ingreso: agosto-2012
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Problema para leer mensajes en php

Cita:
Iniciado por Triby Ver Mensaje
Y yo me abstrendré de darte un -karma si en lugar de agregar un mensaje editas el anterior para evitar ser sancionado por suma de mensajes y reflotar tema sin un aporte real.

Primero, siempre que uses un array asociativo, los índices deben estar entre comillas:

Mal: $_GET[msg]
Bien: $_GET['msg']

Segundo, siempre que uses un elemento de array dentro de una cadena, debe estar entre llaves:

Mal: " destinatario='$_COOKIE[nick]'" // Faltan llaves y comillas en el índice
Mal: " destinatario='{$_COOKIE[nick]}'" // Faltan comillas en el índice
Bien: " destinatario='{$_COOKIE['nick']}'"

Tercero, cuando ejecutes una consulta, asegúrate de que no hay errores:

$com = mysql_query(/* aquí tu consulta */) or die(mysql_error());

Cuarto, si usas datos manupulables por el usuario ($_GET, $_POST, $_COOKIE, etc.) verifícalos y escápalos para evitar problemas con tu base de datos, por ejemplo:

- Si esperas un dato numérico, asegúrate que sea así, lo más fácil es multiplicarlo por 1: $id_msg = $_GET['msg'] * 1;
- Si esperas un dato alfanumérico (cadena, texto, etc.) debes escaparlo antes de incluirlo en la consulta: $nick = mysql_real_escape_string($_COOKIE['nick']);

Quinto, tú eres el interesado en recibir ayuda, entonces deberías proporcionar toda la información necesaria directamente aquí en lugar de poner un enlace para descarga.

Finalmente, corrige tu código y si sigues teniendo problema, entonces regresas y nos cuentas qué es lo que pasa.
Podrás creer que con todas estas correcciones que me mencionastes sigue exactamente igual, con el mismo error, creo que estaba bien como estaba, pero tal vez tiene que HABER OTRA CORRECCIÓN, eso es lo que estoy buscando.

Gracias por el aporte, me sirvio de aprendizaje, pero para esto NO FUNCIONO :(
  #4 (permalink)  
Antiguo 12/08/2012, 16:35
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: Problema para leer mensajes en php

Cita:
Iniciado por luisochonews
Podrás creer que con todas estas correcciones que me mencionastes sigue exactamente igual, con el mismo error (1), creo que estaba bien como estaba (2), pero tal vez tiene que HABER OTRA CORRECCIÓN (3), eso es lo que estoy buscando (4).
1- Por supuesto que te creo, porque el codificar correctamente no soluciona problemas de lógica, esos son aparte.

2- Como estaba no funcionaba, pero si no descartas errores por mala codificación, es más difícil encontrar la solución.

3- Sí, eso es definitivo, pero como te decía, si no codificas bien, más te vas a complicar.

4- Me parece bien, sigue buscando, te deseo suerte.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 12/08/2012, 16:40
 
Fecha de Ingreso: agosto-2012
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Respuesta: Problema para leer mensajes en php

Por eso creé este tema PARA QUE ME AYUDEN Y TENGAN EL ESPÍRITU DE SERVICIO DE ENCONTRAR UN ERROR QUE AÚN NO PUEDO ENCONTRARLO, para mí es muy difícil, por eso necesito ayuda de otros que sepan sobre este tipo de errores
  #6 (permalink)  
Antiguo 12/08/2012, 16:45
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: Problema para leer mensajes en php

Mira, en resumen: Si tú no estás dispuesto a hacer las cosas bien, veo muy complicado que alguien quiera invertir tiempo tratando de ayudarte, porque al final vas a decir "eso es solución, tiene que haber otra forma".

Me retiro del tema deseándote suerte nuevamente.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 12/08/2012, 18:46
 
Fecha de Ingreso: agosto-2012
Ubicación: Santiago
Mensajes: 124
Antigüedad: 12 años, 3 meses
Puntos: 60
Respuesta: Problema para leer mensajes en php

Por qué cierras el ELSE después de la consulta?.
__________________
~~Aprendiendo.
Become a Programmer, Moth*rf*cker
  #8 (permalink)  
Antiguo 12/08/2012, 23:53
Avatar de KsrZ  
Fecha de Ingreso: abril-2011
Ubicación: /home/KsrZ/Desktop
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 26
Respuesta: Problema para leer mensajes en php

luis.. lo ideal es que fueras mas ordenado con el codigo(usa tabulaciones), y evitar las cosas repetidas Ejemplo:
Código PHP:
$datos[mensaje] = str_replace("[b]","<b>",$datos[mensaje]);
$datos[mensaje] = str_replace("[/b]","</b>",$datos[mensaje]);
$datos[mensaje] = str_replace("[hr]","<hr>",$datos[mensaje]);
$datos[mensaje] = str_replace("[i]","<i>",$datos[mensaje]);
$datos[mensaje] = str_replace("[/i]","</i>",$datos[mensaje]);
$datos[mensaje] = str_replace("[sub]","<u>",$datos[mensaje]);
$datos[mensaje] = str_replace("[/sub]","</u>",$datos[mensaje]);
$datos[mensaje] = str_replace("[marquee]","<marquee>",$datos[mensaje]);
$datos[mensaje] = str_replace("[/marquee]","</marquee>",$datos[mensaje]);
$datos[mensaje] = str_replace("[left]","<div align=left>",$datos[mensaje]);
$datos[mensaje] = str_replace("[/left]","</div>",$datos[mensaje]);
$datos[mensaje] = str_replace("[center]","<div align=center>",$datos[mensaje]);
$datos[mensaje] = str_replace("[/center]","</div>",$datos[mensaje]);
$datos[mensaje] = str_replace("[right]","<div align=right>",$datos[mensaje]);
$datos[mensaje] = str_replace("[/right]","</div>",$datos[mensaje]);
$datos[mensaje] = str_replace("[justify]","<div align=justify>",$datos[mensaje]);
$datos[mensaje] = str_replace("[/justify]","</div>",$datos[mensaje]);
$datos[mensaje] = str_replace("[img]","<img src=\"",$datos[mensaje]) ;

//1 esta mal, va entre comillas ['mensaje'] para que todas esas repeticiones??? 
//si puedes hacer esto..
$busca = array('[b]','[/b]','[hr]','[i]','[/i]'); //etc
$remplaza = array('<b>','</b>','<hr>','<hr>','<i>','</i>'); //etc
$datos['mensaje'] = str_replace($busca $remplaza $datos[mensaje]); 
un texto como key en un array recuerda siempre que utiliza comillas, debes tratarlo como texto, no como una constante...
un numero si no necesita comillas.
Código PHP:
$a[1]; //bien
$a[b]; //si b no es una constante previamente definida, esta mal
$a['b']; //si b es una key esta bien, si es una constante, esta mal 
otra recomendación.. para evitarte tanto if else solo para imprimir algo, aprende a usar expresiones ternarias
http://php.net/manual/es/language.op...hp#example-120

ten cuidado si las usas, aplica bien (), ejemplo en un echo
Código PHP:
echo ($bar === true)? 'bar es true!' : (($bar2 === true)? 'bar2 es true!' 'ambas son falsas..');

//esto equivale a

if($bar === true) echo 'bar es true!';
else if (
$bar2 === true) echo 'bar2 es true!';
else echo 
'ambas son falsas..'
a medida que cambias tu código, ve actualizándolo para poder ver el "editado nuevo" y no el viejo, sino es imposible ayudarte en base a el mismo código.
__________________
for (var i = 0; i < 2; i++){
i = !confirm("Trata a tu código como a ti mismo.. este te esta representando.. no te dejes mal parado")? 0 : i;
}

Última edición por KsrZ; 13/08/2012 a las 00:21

Etiquetas: mensajes, sql, usuarios
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:35.