Hallo liebe PHP.de Mitglieder,
ihr kennt das sicherlich, wenn man stundenlang versucht eine Funktion zu entwickeln und ihr nicht erkennt was man falsch mach bzw. denkt. Vielleicht könnt ihr mir ja weiterhelfen.
Ich möchte für meinen kleinen Verein einen Nachrichtensystem entwickeln.
Die Tabelle ist wie folgt aufgebaut:
id from_id to_id content read
1 1 2 test false
2 2 1 text false
3 1 3 ext false
4 4 1 xet false
Wie ihr seht findet zwischen Benutzer 1 und 2 ein Dialog statt.
Benutzer 1 hat Benutzer 3 eine Nachricht geschickt und Benutzer 4 hat Benutzer 1 eine Nachricht geschickt.
Was ich gerne umsetzten möchte:
Aus der Sicht von Benutzer 1:
1. Nachrichten von Benutzer 1 an 3 soll angezeigt werden(Besondere Kennzeichnung durch z.B.>> für Postausgang. Kann via Benutzer ID variable abgefragt werden.ich weiß wie es geht.).
2. Nachricht von Benutzer 4 an 1 soll angezeigt werden.
und jetzt noch das schwierigste für mich, wo mein Problem ist...
3. Nicht alle Nachrichten zwischen Benutzer 1 und 2 bzw. 2 und 1 anzeigen, sondern nur die letzte aktuelle Nachricht des Dialogs. Egal ob Posteingang oder Postausgang.
Wenn mann dann auf die jeweilige Nachricht klick, wird dann der ganz dialog zwischen Benutzer 1 und Empfänger angezeigt.
Das ganz ist ähnlich wie das Nachrichtenssystem von Facebook aufgebaut, falls jemand mich nicht verstehen sollte
Und hier meine Klasse:
PHP-Code:
//$table = Tabellennamen
//$id = User ID
public function load_messages($table,$id)
{
echo '<hr class="hr_message"/>';
// Verbindung mit Datenbank
$sql = "SELECT `from_id`,`to_id` FROM `".$table."` WHERE `from_id` = '".$id."' OR `to_id` = '".$id."' GROUP BY `from_id`,`to_id` ORDER BY `date` DESC;";
$query = mysql_query($sql) or die(mysql_error());
list($this->m_g_f_id,$this->m_g_t_id) = mysql_fetch_row($query);
echo'from_id: '.$this->m_g_f_id.' | to_id: '.$this->m_g_t_id.'<br/>';
if($this->m_g_f_id == $id) {
echo "from=id<br/>";
// Verbindung mit Datenbank`
$sql = "SELECT `from_id`,`to_id` FROM `".$table."` WHERE `from_id` = '".$id."' OR `to_id` = '".$id."' GROUP BY `to_id` ORDER BY `date` DESC;";
$query = mysql_query($sql) or die(mysql_error());
}
if($this->m_g_t_id == $id) {
// Verbindung mit Datenbank`
$sql = "SELECT `from_id`,`to_id` FROM `".$table."` WHERE `from_id` = '".$id."' OR `to_id` = '".$id."' GROUP BY `from_id` ORDER BY `date` DESC;";
$query = mysql_query($sql) or die(mysql_error());
echo "to=id<br/>";
}
while($row = mysql_fetch_array($query))
{
$this->m_g_f_id = $row['from_id'];
$help = $this->m_g_f_id;
$this->m_g_t_id = $row['to_id'];
//Tausche
$this->m_g_f_id = $this->m_g_t_id;
$this->m_g_t_id = $help;
echo'_from_id: '.$this->m_g_f_id.' | _to_id: '.$this->m_g_t_id.'<br/>';
//Wenn Adressat(from_id) == Benutzer(user_id)
if($this->m_g_f_id == $id)
{
$this->m_g_f_id = $this->m_g_t_id;
$this->m_g_t_id = $id;
}
//Wenn Empfänger(to_id) == Benutzer(user_id)
if($this->m_g_t_id == $id)
{
$this->m_g_f_id = $row['from_id'];
$this->m_g_t_id = $row['to_id'];
}
echo'__from_id: '.$this->m_g_f_id.' | __to_id: '.$this->m_g_t_id.'<br/>';
// letzten aktuellen Eintrag vom Dialog laden(Posteingang oder Postausgang)
$sql_m = "SELECT * FROM `".$table."` WHERE `to_id` = '".$this->m_g_t_id."' AND `from_id` = '".$this->m_g_f_id."' OR `to_id` = '".$this->m_g_f_id."' AND `from_id` = '".$this->m_g_t_id."' ORDER BY `date` DESC LIMIT 1;";
$query_m = mysql_query($sql_m) or die(mysql_error());
//
if($this->m_g_t_id != $id)
{
$this->m_g_f_id = $this->m_g_t_id;
$this->m_g_f_id = $this->m_g_t_id;
}
while($row_m = mysql_fetch_array($query_m))
{
// Seitenparameter aus Tabelle laden und in Variablen speichern
$this->m_id = $row_m['tab_message_id'];
$this->m_t_id = $row_m['to_id'];
$this->m_message = utf8_encode($row_m['message']);
$this->m_date = $row_m['date'];
$this->m_read = $row_m['read'];
// Verbindung mit Datenbank
$sql_from = "SELECT * FROM `tab_user` WHERE `user_id` = '".$this->m_g_f_id."';";
$query_from = mysql_query($sql_from) or die(mysql_error());
// ID aktualisieren
$this->m_f_id = $row_m['from_id'];
while($row_from = mysql_fetch_array($query_from))
{
$this->m_f_name = utf8_encode($row_from['first_name'].' '.$row_from['last_name']);
$this->m_f_img_src = $row_from['img_src'];
}
//Zeitangabe
if (strftime ("%Y", strtotime($this->m_date)) == date("Y"))
{
$this->m_i_date = strftime ("%d. %B", strtotime($this->m_date));
}
elseif (strftime ("%Y", strtotime($this->m_date)) < date("Y"))
{
$this->m_i_date = strftime ("%d. %B %Y", strtotime($this->m_date));
}
//Target abfrage (Posteingang oder Postausgang)
if ($this->m_f_id != $this->u_id)
{
$this->m_i_target = '';
}
elseif ($this->m_f_id == $this->u_id)
{
$this->m_i_target = '<img src="uploads/layout/icons/web-icon-m-inbox.png" height="11" width="11" />';
}
//Abfrage ob die Nachricht schon gelesen wurde
if ($this->m_read == "false" && $this->m_f_id != $this->u_id)
{
$this->m_i_read = 'class="m_read"';
}
elseif ($this->m_read == "false" || $this->m_read == "true")
{
$this->m_i_read = '';
}
//Nachrichtadressanten ausgeben
echo '<div id="m_content" '.$this->m_i_read.' onclick="m_read(\''.$this->u_id.'\',\''.$this->m_id.'\',\''.$this->m_g_f_id.'\',\''.$this->m_read.'\')">';
echo '<img src="'.$this->m_f_img_src.'" width="55" height="55" alt="'.$this->m_f_name.'" title="'.$this->m_f_name.'" id="m_img" />';
echo '<strong id="m_f_name">'.$this->m_f_name.'</strong>';
echo '<div id="m_content_color">';
if (strlen($this->m_message) > $this->m_message_len)
{
echo '<div style="float:left;">'.$this->m_i_target.' '.substr($this->m_message, 0, $this->m_message_len). ' ...</div>';
}elseif (strlen($this->m_message) <= $this->m_message_len)
{
echo '<div style="float:left;">'.$this->m_i_target.' '.$this->m_message. '</div>';
}
echo '<div id="m_date" title="'.strftime ("%A, %d. %B %Y um %H:%M Uhr", strtotime($this->m_date)).'">'.$this->m_i_date.'</div>';
echo '</div>';
echo '<div style="clear:both;"></div>';
echo '</div>';
echo '<div id="m_close" onclick="m_delete(\''.$this->u_id.'\',\''.$this->m_g_f_id.'\',\''.$this->m_f_name.'\');" title="Nachrichten löschen"></div>';
echo '<hr class="hr_message"/>';
}
}
}
EDIT: Folgendes wird richtig angezeigt:
from_id to_id
1 2
1 3
from_id to_id
2 1
3 1
Aber das geht nicht bzw. es wird zweimal angezeigt, statt nur einmal
from_id to_id
1 3
3 1