Page 1 sur 1

Reseau social aide

Posté : 15 avr. 2012, 17:23
par EverySocial
Bonjour à tous ! Je suis en train de développer un réseau social (EverySocial)

Le problème c'est que jai fait ces scripts
<?php

Class ClassMessages
{
	public function Send($to, $from, $message)
	{
		global $users;
		
		$to_username = $users->GetUserVar('username', $to);
		$from_username = $users->GetUserVar('username', $from);
		
		if ($users->IsNameTaken($to_username) && $users->IsNameTaken($from_username))
		{
			dbquery("INSERT INTO messages (to_user,from_user,timestamp,message) VALUES ('" . $to . "', '" . $from . "', '" . time() . "', '" . clean($message, true, true) . "')");
		}
	}
	
	public function GetMessages($from = '', $to = '')
	{
		return dbquery("SELECT * FROM messages WHERE from_user = '" . $from . "' AND to_user = '" . $to . "' ORDER by timestamp");
	}
}

?>
Pour obtenir les messages
<?php

require_once "global.php";

if (!LOGGED_IN)
{
	header('Location: ./');
	exit;
}

if (isset($_GET['to_id']))
{
	$to_id = @intval($_GET['id']);
}

	$received = $message->GetMessages("3", USER_ID);
	
	while ($r = mysql_fetch_assoc($received))
	{
		$from_user = $users->GetUserVar('username', $r['from_user']);
		$to_user = $users->GetUserVar('username', $r['to_user']);
		$date = "Il y a&nbsp;" . $core->GetTime(time() - $r['timestamp']);
		$rsg_db = $r['message'];
		
		echo $from_user . "&nbsp;&agrave;&nbsp;dit: (" . $date . ")&nbsp;" . $rsg_db . "<br />";
	}
	
	$send = $message->GetMessages(USER_ID, "3");
	
	while ($s = mysql_fetch_assoc($send))
	{
		$from_id = $users->GetUserVar('username', $s['from_user']);
		$to_user = $users->GetUserVar('username', $s['to_user']);
		$date = "Il y a&nbsp;" . $core->GetTime(time() - $s['timestamp']);
		$msg_db = $s['message'];
		
		echo "Vous avez dit: (" . $date . ")&nbsp;" . $msg_db . "<br />";
	}
?>
Je ne demande pas de dynamiser le site, c'est déjà fait, mais je voudrais juste faire qu'au lieu d'avoir

Code : Tout sélectionner

machin à dit (il y a 1 minutes) salut machin à dit (il y a 1 minutes) salut j'ai dit: blablabla
que ça soye

Code : Tout sélectionner

machin à dit (il y a 1 minutes) salut j'ai dit: blablabla machin à dit (il y a 1 minutes) salut
Et j'aimerai aussi que dés que l'on reçois un message, on soit averti sur la page.

Re: Reseau social aide

Posté : 15 avr. 2012, 17:33
par Ryle
C'est un problème d'algo... actuellement ton code affiche la liste des messages de "machin" via une boucle while, puis affiche tes messages avec une seconde boucle. Résultat, tous tes messages apparaissent après.

Au lieu de boucler sur les messages d'un individu, il faudrait que tu boucles sur l'ensemble des messages en triant ceux-ci par date ou par id pour pouvoir les afficher dans le bon ordre.

Tu peux faire ça directement dans une requête SQL ou une fois que tu récupères tes résultats, au lieu de faire un echo immédiatement pour les afficher, tu les stockes dans un tableau à plusieurs dimensions. Tu pourras alors trier ton tableau par date avant de le parcourir pour afficher tes messages.
(La première solution reste quand même la plus optimisée)

Re: Reseau social aide

Posté : 15 avr. 2012, 17:49
par EverySocial
C'est un problème d'algo... actuellement ton code affiche la liste des messages de "machin" via une boucle while, puis affiche tes messages avec une seconde boucle. Résultat, tous tes messages apparaissent après.

Au lieu de boucler sur les messages d'un individu, il faudrait que tu boucles sur l'ensemble des messages en triant ceux-ci par date ou par id pour pouvoir les afficher dans le bon ordre.

Tu peux faire ça directement dans une requête SQL ou une fois que tu récupères tes résultats, au lieu de faire un echo immédiatement pour les afficher, tu les stockes dans un tableau à plusieurs dimensions. Tu pourras alors trier ton tableau par date avant de le parcourir pour afficher tes messages.
(La première solution reste quand même la plus optimisée)
Le problème c'est que je ne vois pas comment faire, on va dire que je suis paumé :/

Re: Reseau social aide

Posté : 15 avr. 2012, 19:10
par EVERYSOCIAL
Je suis toujours bloqué sur ce sujet :/ !

Re: Reseau social aide

Posté : 15 avr. 2012, 20:20
par Ryle
Que fait ta méthode GetMessages ? ... c'est elle qui retourne les résultats et qu'il faut adapter pour qu'elle te retourne tous les messages par ordre chronologique et non par utilisateur :)

Re: Reseau social aide

Posté : 15 avr. 2012, 20:38
par EverySocial
public function GetMessages($from = '', $to = '')
	{
		return dbquery("SELECT * FROM messages WHERE from_user = '" . $from . "' AND to_user = '" . $to . "' ORDER by timestamp ASC");
	}	
if (isset($_SESSION['to_id']))
{
	$to_id = @intval($_GET['id']);
}

	$messages = $message->GetMessages(USER_ID, $to_id);
	
	while ($s = mysql_fetch_assoc($messages))
	{
		$from_user = $users->GetUserVar('username', $s['from_user']);
		$to_user = $users->GetUserVar('username', $s['to_user']);
		$date = "Il y a&nbsp;" . $core->GetTime(time() - $s['timestamp']);
		$msg_db = $s['message'];
		
		if ($s['from_user'] == $to_id)
		{
			echo $from_user . "&nbsp;&agrave;&nbsp;dit&nbsp;(" . $date . "):&nbsp;" . $msg_db . "<br />";
		}
		
		if ($s['from_user'] == USER_ID)
		{
			echo "Vous avez envoy&eacute; (" . $date . "):&nbsp;" . $msg_db . "<br />";
		}
	}

Re: Reseau social aide

Posté : 15 avr. 2012, 20:38
par EverySocial
le code ci dessus ne m'envoi que les messages que j'ai envoyé

Re: Reseau social aide

Posté : 15 avr. 2012, 21:01
par Ryle
Tu pourrais faire une nouvelle méthode, qui va te retourner la liste de tous les messages envoyés OU reçus en une seule requête :
public function GetAllMessages($from = '', $to = '')
        {
                return dbquery("SELECT * FROM messages WHERE (from_user = '" . $from . "' AND to_user = '" . $to . "') OR (from_user = '" . $to . "' AND to_user = '" . $from . "') ORDER by timestamp ASC");
        } 
Il te suffit ensuite d'appeler cette méthode et d'afficher les messages :
 $messages = $message->GetAllMessages(USER_ID, $to_id);