Nachrichtensystem - Konversationsverlauf anzeigen lassen

VirtualHHH

Grünschnabel
Hallo,

ich habe ein Skript zu einem Privaten Nachrichtensystem geschrieben und soweit funktioniert auch alles. Das Problem das ich habe, wäre lediglich das ich gerne den ganzen Konversationsverlauf zwischen User A und User B angezeigt haben möchte und nicht nur die neuste Nachricht.

Ich habe eine DB-Tabelle mit dem Namen nachrichten. Unter nachrichten sind jeweils die Spalten id, absender, empfänger, datum, betreff, inhalt und gelesen.

Was kann ich tun damit es läuft?
 
Hi,

mit einer Datenbankabfrage, die Daten der betreffenden Konservation auslesen und ausgeben?

Sorry, ich bin sonst nicht so und helfen gern, aber bisher wurde mir noch keine Glaskugel geschenkt, mit der ich alles sehen kann, was bei dir Sache ist.

Es reicht dazu nicht zu wissen, welche Tabelle die Daten in welchen Spalten ist, sondern man müsste z.B. noch wissen, wie dein Skript sich mit der Datenbank verbindet usw..

Grundsätzlich nimmst du den Absender und den Empfänger in beiden Richtungen ins WHERE rein, lässt diese nach dem Datum sortieren und dann das betreff, inhalt und gelesen ausgeben.

Dies gibst du dann aus und fertig!!!

Mehr kann ich anhand der gelieferten Fakten nicht sagen.

Gruß Matze202.
 
Code:
SELECT *
FROM table
WHERE
absender in ('Person A','Person B') AND empfaenger in ('Person A', 'Person B')
 
Hallo,

erst einmal danke für eure Hilfe. Ich habe unglücklicherweise nicht an den SQL-Befehl in() gedacht, jedoch ist auch das nicht wirklich das was ich haben wollte, obwohl es schon näher an der Sache ist. Vermutlich aber übersehe ich gerade wieder etwas.

Ich mein, mal angenommen, ich würde es so machen wie oben im Codeabschnitt beschrieben: Es würde dann doch jede Nachricht die dem jeweils anderen zugeschickt wurde, angezeigt werden. Und das ist ja nicht wirklich das was ich will, sondern es sollte schon zu dem jeweiligen Betreff gehören. Und würde ich die Abfrage weiter mit dem Betreff eingrenzen wollen, hätte ich ja dann immer noch keine Garantie für, ob nun irgendwann wieder derselbe Betreffstitel genommen wird, nicht?

PHP:
<div class="centercontent">
  <?php
    if(!isset($_SESSION['username'])) {
      include("offline_inc.php");
    }
    else {
  
      $username = $_SESSION['username'];
    
      echo "<a href='?page=schreiben'>Nachricht schreiben</a><br><br>";
    
      if(isset($_GET['page']) AND $_GET['page'] == "schreiben") {
  
        echo "<form action='pm.php?page=schreiben' method='post'>
                Empfänger: <input type='text' name='empfänger' maxlength='50'><br>
                Betreff: <input type='text' name='betreff' maxlength='150'><br>
                <textarea name='inhalt' cols='50' rows='10'></textarea><br>
                <input type='submit' value='Absenden'>
              </form>";
          
        if(isset($_POST['empfänger'], $_POST['betreff'], $_POST['inhalt'])) {
    
    
          //Private Nachrichten eintragen
    
          $empfänger = mysql_real_escape_string(htmlspecialchars($_POST['empfänger']));
          $betreff = mysql_real_escape_string(htmlspecialchars($_POST['betreff']));
          $inhalt = mysql_real_escape_string(htmlspecialchars($_POST['inhalt']));
      
          if($empfänger != "" AND $betreff != "" AND $inhalt != "") {
      
            $datum = date("d.m.Y - H:i:s");
      
            $nachricht_eintragen = "INSERT INTO nachrichten(absender, empfänger, datum, betreff, inhalt) VALUES('$username', '$empfänger', '$datum', '$betreff', '$inhalt')";
            $nachricht_eintragen_befehl = mysql_query($nachricht_eintragen);
        
            if($nachricht_eintragen_befehl == true) {
              echo "Nachricht erfolgreich abgeschickt.";
            }
            else {
              echo "Fehler.";
            }
          }
          else {
            echo "Bitte alle Felder ausfüllen.";
          }
        }
      }        
    
     
    
      //Private Nachrichten anzeigen
    
    
      if(isset($_GET['page'], $_GET['id']) AND $_GET['page'] == "lesen") {
    
        $id = $_GET['id'];
    
        $nachrichten_abfrage2 = "SELECT absender, datum, betreff, inhalt FROM nachrichten WHERE id LIKE '$id' AND empfänger LIKE '$username'";
        $nachrichten_abfrage2_befehl = mysql_query($nachrichten_abfrage2) or die(mysql_error());
        $nachrichten_abfrage_menge = mysql_num_rows($nachrichten_abfrage2_befehl);
      
        if($nachrichten_abfrage_menge != 0) {

          $row_nachrichten2 = mysql_fetch_object($nachrichten_abfrage2_befehl);
      
          echo "<table width='910px' border='1px solid black'>
                  <tr><td><b>Von:</b> $row_nachrichten2->absender</td>
                    <td><b>Am:</b> $row_nachrichten2->datum</td>
                    <td><b>Betreff:</b> $row_nachrichten2->betreff</td>
                    </tr>
                  <tr><td colspan='3'>".nl2br($row_nachrichten2->inhalt)."</td>
                  </tr>  
                </table><br><br>";
              
          echo "<form action='pm.php?page=schreiben' method='post'>
                  <input type='hidden' name='empfänger' value='$row_nachrichten2->absender' maxlength='50'>
                  <input type='hidden' name='betreff' value='$row_nachrichten2->betreff' maxlength='150'>
                  <textarea name='inhalt' cols='50' rows='10'></textarea><br>
                  <input type='submit' value='Antworten'>
                </form>";
        }
        else {
          echo "Du hast keine Berechtigung hierfür.";
        }      
      }     
    
    
    
      //Alle Nachrichten vorlegen
    
      if(count($_GET) == 0) {
    
        $nachrichten_abfrage = "SELECT id, absender, datum, betreff, inhalt FROM nachrichten WHERE empfänger LIKE '$username'";
        $nachrichten_abfrage_befehl = mysql_query($nachrichten_abfrage);
  
        echo "<table width='910px' border='1px solid black'>
                <tr><td><b>Absender</b></td>
                    <td><b>Betreff</b></td>
                    <td><b>Datum</b></td>
                    <td><b>Aktion</b></td></tr>";
    
        while($row_nachrichten = mysql_fetch_object($nachrichten_abfrage_befehl)) {
          echo "<tr><td>$row_nachrichten->absender</td>
                    <td>$row_nachrichten->betreff</td>
                    <td>$row_nachrichten->datum</td>
                    <td><a href='pm.php?page=lesen&id=$row_nachrichten->id'>Lesen</a></td></tr>";
        }
    
        echo "</table>";
      }
    }


  ?>

   
</div>

So, ich habe mal das Skript hier eingefügt. Ich hoffe, ihr könnt damit etwas anfangen.

LG
 
Bitte die mysql_irgendwas - Funktionen schnellstens loswerden, seit 11 Jahren gibts was besseres: Mysqli
Jede Verwendung sollte von PHP außerdem schon als Fehler gemeldet werden... schalt einmal die Fehlerausgabe ein:
PHP:
error_reporting(E_ALL);
ini_set('display_errors', true);
am Anfang des Scripts.
 
Hallo,

den Befehl für die Fehlermeldung habe ich bereits eingebaut, nur ist er nicht in der Datei.

Was mysqli angeht, würde ich fürs Erste einmal beim Älteren bleiben wollen und dann je nach Gegebenheit umsteigen.


LG
 
Genau @sheel ! ;)

EDIT: @VirtualHHH Es geht um die Sicherheit, welche bei dem alten mysql nicht mehr so gegeben ist.

Also PDO anstelle deines MySQL-Codes ist auch nicht zu verachten, aber du solltest wenn du die Konversationen unterscheiden willst, eine weitere Spalte in die Datenbank einfügen, wo die Konversationen mit einer ID unterschieden werden.

Wenn du dich für MySQLi oder PDO entscheiden hast, solltest du das Script umstellen und ich bin mir sicher, wenn du dich dabei in die Handhabung der Datenbank eingearbeitet hast, wirst du bestimmt dein Problem selbst ausarbeiten können.

Solltest du dabei jedoch noch Probleme haben, kannst du dich gern in diesem Thread zur Konversation oder in anderen Sachen in einem neuen Thread dazu melden.
 
Hallo,

die Idee mit einer weiteren ID für Konversationen hatte ich soweit auch, nur konnte ich mir nicht so ganz vorstellen wie ich das denn bewerkstelligen soll, wenn die K_ID bei derselben Konversationen unter User A und User B gleichbleiben soll, sich aber bei einem Gespräch zwischen User A und User C wiederum zu ändern hat.

LG
 
Beim anlegen der Konversations-ID´s für bestehende Threads gibts verschiedene Methoden, bei denen du folgendes beachten solltest.

1. Lässt du dir alle Betreffs der Konversationen zwischen den 2 gleichen Usern auflisten und verwendest die ID des ersten Posts zu dem entsprechenden Betreffs.
2. Lässt du dir ebenfalls die Betreffs der Konversationen zwischen den 2 gleichen Usern auflisten, gibst ihnen aber die ID´s 1, 2, 3 usw. fortlaufend. (Hierbei solltest du beachten, dass du die größte ID +1 dann weiter verwendest, wenn du dann für andere User das durchläufst.)

Bei neuen zu erstellenden Konversationen solltest du dies dann fortfahren, wie du dich unter 1. oder 2. entscheiden hast.

Wichtig ist, dass die ID´s pro Konversation immer einzigartig sind und jeder Beitrag in der selben Konversation die selbe ID in der Spalte K_ID erhält.
 

Neue Beiträge

Zurück