Foros del Web » Programando para Internet » PHP »

Ordenar por usuario

Estas en el tema de Ordenar por usuario en el foro de PHP en Foros del Web. tengo un chat en mi web y ahora quiero sacar todos esos mensajes y ordenarlos en una pagina web (tipo Facebook) el codigo que utilizo ...
  #1 (permalink)  
Antiguo 14/04/2014, 13:31
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Ordenar por usuario

tengo un chat en mi web y ahora quiero sacar todos esos mensajes y ordenarlos en una pagina web (tipo Facebook) el codigo que utilizo es este.

Código PHP:
session_start();

global $dbh;
$dbh = mysql_connect(DBPATH,DBUSER,DBPASS);
mysql_selectdb(DBNAME,$dbh);

if ($_GET['action'] == "chatheartbeat") { chatHeartbeat(); } 
if ($_GET['action'] == "sendchat") { sendChat(); } 
if ($_GET['action'] == "closechat") { closeChat(); } 
if ($_GET['action'] == "startchatsession") { startChatSession(); } 

if (!isset($_SESSION['chatHistory'])) {
    $_SESSION['chatHistory'] = array();    
}

if (!isset($_SESSION['openChatBoxes'])) {
    $_SESSION['openChatBoxes'] = array();    
}

function chatHeartbeat() {
    
    $sql = "select * from chat where (chat.to = '".mysql_real_escape_string($_SESSION['username'])."' AND recd = 0) order by id ASC";
    $query = mysql_query($sql);
    $items = '';

    $chatBoxes = array();

    while ($chat = mysql_fetch_array($query)) {

        if (!isset($_SESSION['openChatBoxes'][$chat['from']]) && isset($_SESSION['chatHistory'][$chat['from']])) {
            $items = $_SESSION['chatHistory'][$chat['from']];
        }

        $chat['message'] = sanitize($chat['message']);

        $items .= <<<EOD
                       {
            "s": "0",
            "f": "{$chat['from']}",
            "m": "{$chat['message']}"
       },
EOD;

    if (!isset($_SESSION['chatHistory'][$chat['from']])) {
        $_SESSION['chatHistory'][$chat['from']] = '';
    }

    $_SESSION['chatHistory'][$chat['from']] .= <<<EOD
                           {
            "s": "0",
            "f": "{$chat['from']}",
            "m": "{$chat['message']}"
       },
EOD;
        
        unset($_SESSION['tsChatBoxes'][$chat['from']]);
        $_SESSION['openChatBoxes'][$chat['from']] = $chat['sent'];
    }

    if (!empty($_SESSION['openChatBoxes'])) {
    foreach ($_SESSION['openChatBoxes'] as $chatbox => $time) {
        if (!isset($_SESSION['tsChatBoxes'][$chatbox])) {
            $now = time()-strtotime($time);
            $time = date('g:iA M dS', strtotime($time));

            $message = "Sent at $time";
            if ($now > 180) {
                $items .= <<<EOD
{
"s": "2",
"f": "$chatbox",
"m": "{$message}"
},
EOD;

    if (!isset($_SESSION['chatHistory'][$chatbox])) {
        $_SESSION['chatHistory'][$chatbox] = '';
    }

    $_SESSION['chatHistory'][$chatbox] .= <<<EOD
        {
"s": "2",
"f": "$chatbox",
"m": "{$message}"
},
EOD;
            $_SESSION['tsChatBoxes'][$chatbox] = 1;
        }
        }
    }
}

    $sql = "update chat set recd = 1 where chat.to = '".mysql_real_escape_string($_SESSION['username'])."' and recd = 0";
    $query = mysql_query($sql);

    if ($items != '') {
        $items = substr($items, 0, -1);
    }
header('Content-type: application/json');
?>
{
        "items": [
            <?php echo $items;?>
        ]
}

<?php
            
exit(0);
}

function 
chatBoxSession($chatbox) {
    
    
$items '';
    
    if (isset(
$_SESSION['chatHistory'][$chatbox])) {
        
$items $_SESSION['chatHistory'][$chatbox];
    }

    return 
$items;
}

function 
startChatSession() {
    
$items '';
    if (!empty(
$_SESSION['openChatBoxes'])) {
        foreach (
$_SESSION['openChatBoxes'] as $chatbox => $void) {
            
$items .= chatBoxSession($chatbox);
        }
    }


    if (
$items != '') {
        
$items substr($items0, -1);
    }

header('Content-type: application/json');
?>
{
        "username": "<?php echo $_SESSION['username'];?>",
        "items": [
            <?php echo $items;?>
        ]
}

<?php


    
exit(0);
}

function 
sendChat() {
    
$from $_SESSION['username'];
    
$to $_POST['to'];
    
$message $_POST['message'];

    
$_SESSION['openChatBoxes'][$_POST['to']] = date('Y-m-d H:i:s'time());
    
    
$messagesan sanitize($message);

    if (!isset(
$_SESSION['chatHistory'][$_POST['to']])) {
        
$_SESSION['chatHistory'][$_POST['to']] = '';
    }

    
$_SESSION['chatHistory'][$_POST['to']] .= <<<EOD
                       {
            "s": "1",
            "f": "
{$to}",
            "m": "
{$messagesan}"
       },
EOD;


    unset(
$_SESSION['tsChatBoxes'][$_POST['to']]);

    
$sql "insert into chat (chat.from,chat.to,message,sent) values ('".mysql_real_escape_string($from)."', '".mysql_real_escape_string($to)."','".mysql_real_escape_string($message)."',NOW())";
    
$query mysql_query($sql);
    echo 
"1";
    exit(
0);
}

function 
closeChat() {

    unset(
$_SESSION['openChatBoxes'][$_POST['chatbox']]);
    
    echo 
"1";
    exit(
0);
}

function 
sanitize($text) {
    
$text htmlspecialchars($textENT_QUOTES);

    
$text str_replace("\n\r","\n",$text);
    
$text str_replace("\r\n","\n",$text);
    
$text str_replace("\n","<br>",$text);
    return 
$text;
}
Lo que no entiendo es como hacer la consulta.
La base de datos tiene estos campos:
from, to, send,message.
La idea es que se ordenen con las conversaciones entre el usuario y los de mas usuarios.

Gracias
  #2 (permalink)  
Antiguo 14/04/2014, 14:23
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 10 años, 6 meses
Puntos: 43
Respuesta: Ordenar por usuario

Y la tabla no tiene un id? Si hacés un order by con el id ya te queda. O entendí mal lo que querés hacer?
  #3 (permalink)  
Antiguo 14/04/2014, 17:37
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Ordenar por usuario

Un usuario puede tener varios mensajes con diferentes usuarios.
  #4 (permalink)  
Antiguo 14/04/2014, 17:50
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: Ordenar por usuario

no no no...Cada tabla tiene que tener una columna identificatoria, una clave PRIMARIA

Lo normal es que se crea una columna ID y que sea autoincrementable.

A eso se referia @cuervoo
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos
  #5 (permalink)  
Antiguo 14/04/2014, 18:07
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Ordenar por usuario

Y la tiene. te doy un ejemplo:

id_chat: 1
from: pepe
to: manolo
message: hola

id_chat:2
from: pedro
to: manolo
message: otro hola a otro usuario.

id_chat:3
from:manolo
to:pepe
message: le escribo a pepe

Ahora quiero sacar todos los mensajes de manolo y pepe y todos los que haya de manolo y pedro.
  #6 (permalink)  
Antiguo 14/04/2014, 18:57
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 6 meses
Puntos: 38
Respuesta: Ordenar por usuario

A ver yo entiendo que tienes todo en la misma tabla chat... y que alli la unica relacion es el to y el from ...

Código MySQL:
Ver original
  1. SELECT message FROM chat WHERE chat.to ="manolo" AND chat.from ="pepe"
  2. SELECT message FROM chat WHERE chat.from="manolo" AND chat.to="pepe"

Etiquetas: html, mysql, select, sql, usuario, 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 09:15.