Prüfen, ob die eine Nachricht gelesen wurde

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Prüfen, ob die eine Nachricht gelesen wurde

    Hallo Freunde,

    ich habe ein PM-System geschrieben, welches mir anzeigt, wie viele Nachrichten in meiner Inbox neu sind!

    Nun möchte ich sowas in der Art für die Outbox haben, nur mit dem Unterschied, dass dann gezeigt wird, ob die geschriebene Nachricht von Empfänger gelesen wurde!

    Hier die beiden entsprechenden Scripte für die Funktionen.

    Inbox:
    PHP Code:
    <?php
    session_start
    ();
    require_once 
    "../includes/connect_i.inc.php";

    if (!
    $_GET['in']){
        
    $pageid2 '1';
    } else {
        
    $pageid2 ereg_replace("[^0-9]",""$_GET['in']);
    }

    $sqlCommand "SELECT id, username FROM users WHERE username='" $_SESSION['username'] . "'";
    $query mysqli_query($myConnection$sqlCommand) OR DIE (mysqli_error($myConnection));
    WHILE (
    $row mysqli_fetch_array($query))
    {
        
    $pid $row["id"];
        
    $username $row["username"];
    }

    mysqli_free_result($query);

    $sqlCommand "SELECT id, userid, from_id, from_username, title, content, recieve_date FROM pm_inbox WHERE id='$pageid2' AND userid='$pid'";
    $query mysqli_query($myConnection$sqlCommand) OR DIE (mysqli_error($myConnection));
    WHILE (
    $row mysqli_fetch_array($query))
    {
        
    $Hid $row["id"];
        
    $Huserid $row["userid"];
        
    $Hfrom_id $row["from_id"];
        
    $Hfrom_username $row["from_username"];
        
    $Htitle $row["title"];
        
    $Hcontent $row["content"];
        
    $Hrecieveddate $row["recieve_date"];
    }

    mysqli_free_result($query);

    $query mysqli_query($myConnection"UPDATE pm_inbox SET viewed='1' WHERE id='$pageid2'") OR DIE (mysqli_error($myConnection));

    ?>
    Outbox:
    PHP Code:
    <?php
    session_start
    ();
    require_once 
    "../includes/connect_i.inc.php";

    if (!
    $_GET['out']){
        
    $pageid '1';
    } else {
        
    $pageid ereg_replace("[^0-9]",""$_GET['out']);
    }

    $sqlCommand "SELECT id, username FROM users WHERE username='" $_SESSION['username'] . "'";
    $query mysqli_query($myConnection$sqlCommand) OR DIE (mysqli_error($myConnection));
    WHILE (
    $row mysqli_fetch_array($query))
    {
        
    $pid $row["id"];
        
    $username $row["username"];
    }

    mysqli_free_result($query);

    $sqlCommand "SELECT id, userid, to_userid, from_id, to_username, title, content, senddate, recieve_date FROM pm_inbox, pm_outbox WHERE id='$pageid' AND userid='$pid' AND senddate = recieve_date";
    $query mysqli_query($myConnection$sqlCommand) OR DIE (mysqli_error($myConnection));
    WHILE (
    $row mysqli_fetch_array($query))
    {
        
    $Hid $row["id"];
        
    $Huserid $row["userid"];
        
    $Hto_id $row["to_userid"];
        
    $Hto_username $row["to_username"];
        
    $Htitle $row["title"];
        
    $Hcontent $row["content"];
        
    $Hrecieveddate $row["senddate"];
    }

    mysqli_free_result($query);

    $query mysqli_query($myConnection"UPDATE pm_outbox SET viewed='1' WHERE recieve_date = senddate AND id='$pageid'");

    ?>
    Datenbankstruktur
    Inbox:
    id
    userid
    username
    from_id
    from_username
    title
    content
    viewed
    recieve_date

    Outbox:
    id
    userid
    username
    to_userid
    to_username
    title
    content
    viewed
    senddate

    Könnte mir da vielleicht jemand sagen, wo der Fehler ist?(Das Script für die Inbox funktioniert ohne Probeme)

  • #2
    Wieso 2 Tabellen?
    Stopfe alles in eine.

    viewed
    recieve_date
    Doppelt gemoppelt.
    Lass recieve_date auf NULL, bis gelesen wurde.
    Wir werden alle sterben

    Comment


    • #3
      In das Datumsfeld trage ich das Sendedatum ein und es wird in der Nachricht angezeigt, darum kann ich es nicht auf Null lassen!

      Comment


      • #4
        Originally posted by senger1985 View Post
        In das Datumsfeld trage ich das Sendedatum ein und es wird in der Nachricht angezeigt, darum kann ich es nicht auf Null lassen!
        recieve_date ist nicht das Sendedatum.
        Oder?
        Wir werden alle sterben

        Comment


        • #5
          Doch

          Comment


          • #6
            Und, was ist dann "senddate" ?
            Wir werden alle sterben

            Comment


            • #7
              senddate in (pm_outbox) = die Zeitangabe, wann die Nachricht geschickt wurde!
              recieve_date in (pm_intbox) = die Zeitangabe, wann die Nachricht angekommen ist!

              Comment


              • #8
                recieve_date in (pm_intbox) = die Zeitangabe, wann die Nachricht angekommen ist!
                Also doch nicht das Sendedatum.
                Und auch also, kein Problem das auf NULL zu lassen, bis gelesen wurde.


                Es gibt (aus meiner Sicht) keinerlei Grund das auf 2 Tabellen aufzusplitten.

                Alle mit recieve_date gesetzt sind gelesen, also on der Inbox
                Alle mit recieve_date auf NULL sind noch in der Outbox

                Siehe dazu:
                Die 5 Normal Formen
                Wir werden alle sterben

                Comment


                • #9
                  Ich der Outbox werden doch die Nachrichten gespeichert, die ich gesendet habe, ob gelesen vom Empfänger, oder nicht!

                  Ich muss doch irgendwie Tabellen-übergreifend die Einträge ändern können!

                  Comment


                  • #10
                    Ich der Outbox werden doch die Nachrichten gespeichert, die ich gesendet habe, ob gelesen vom Empfänger, oder nicht!
                    OK, welche Logik du da hinter stellst, ist mir wurscht. Hauptsache, deine Besucher verstehen, was du damit meinst.

                    Aber eine Notwendigkeit für 2 Tabellen sehe ich trotzdem nicht. Ganz im Gegenteil. Ist dieses gesendet, empfangen, gelesen doch nur eine Zustandsänderung von ein und derselben Nachricht.
                    Wir werden alle sterben

                    Comment


                    • #11
                      Was die Verwendung einer Tabelle angeht muss ich combie zustimmen. Ausserdem lassen sich die Nachrichten dann auch einfacher verwalten.

                      Wenn ich deinen Tabellenaufbau richtig lese, dann sind die `id` in In- und Outbox nicht identisch (vermutlich jede mit auto_increment als primary key). Da die Betreffs (`title`) und Nachrichten (`content`) nicht unique sein müssen und daher auch identisch sein können, gibt es bei der Struktur keine Möglichkeit, eine eindeutige Beziehung zwischen einer Nachricht in der Outbox des Senders und der Inbox eines Empfängers herzustellen.

                      Auch der Vorschlag, eine Beziehung über Sende- und Empfangsdatum herzustellen, ist nicht eindeutig. Und auch wenn es bei sehr, sehr wenigen Teilnehmern funktionieren kann, wäre dennoch dringend davon abzuraten.

                      Kurz: Dein Vorhaben kann mit dem Tabellenlayout nicht sicher umgesetzt werden.

                      LG

                      Comment

                      Working...
                      X