Avatar billede LilleUdvikler Nybegynder
08. juli 2011 - 15:46 Der er 7 kommentarer og
1 løsning

Private Message System PHP

Hejsa.
Jeg er i gang med et PM system. Jeg er dog stødt ind i et problem jeg ikke lige umiddelbart ved hvordan jeg skal løse. Jeg har lavet det hele i 3 filer: Post, se besked, send besked. I "post" får du vist dine beskeder ligesom du gør her på exp.dk. Altså - både hvad jeg har sendt og hvad jeg har modtaget.

Så kan man trykke på et link for, at komme ind og se beskeden + de yderligere beskeder der er sendt til denne besked.

Fuldstændig ligesom her på Eksperten.dk

Jeg har 2 tabeller i min MySQL: post og post_answer.

Hvoraf "post" er "hoved beskeden" der bliver sendt. Og post_answer er de yderligere beskeder sendt til den "hoved besked". Svar og hovedbesked har fælles id, så de kan "parres".

I min POST, med hovedbeskeder, har jeg en row der hedder: "opened". Her er Default "0" og, hvis beskeden så er læst, bliver den "1".

Mit problem er følgende:
.. Jeg vil godt kunne give brugerne besked om, hvornår der er ny post til dem. Det kan jeg gøre ved, at konstatere om Opened er 0 eller 1. Problemet er bare, at:

- Når der er sendt "yderligere beskeder" til en "hoved besked", så fortæller den at der er ny post. MEN hvis så den ene bruger åbner beskeden så ændre Opened status sig til 0, og den anden bruger når ikke at se at der er ny post.

- Kan man ikke skelne mellem, om det er mig der sender en besked til en anden (så skal jeg ikke have nogen notifikation). Eller om det er den anden der sender en besked til mig (så skal den give en notifikation KUN hos mig)..

Her er noget kode:

Post (vis hoved beskeder):
<?php
               
                $vis = $_GET[vis];
                $user = $_SESSION['username'];
               
                if(isset($vis)){
                    $laest = mysql_query("UPDATE post SET opened = '1' WHERE id='$vis' AND to_user = '$user'")or die(mysql_error());
                }
               
                $sql = mysql_query("SELECT * FROM post WHERE id='$vis'")or die(mysql_error());
               
                while($row = mysql_fetch_array($sql)){
                    $to_user_svar = $row['to_user'];
                    $from_user_svar = $row['from_user'];
                    $date = $row['timestamp'];
                    $date_post_added = date('d F Y \k\l\.\ H:i:s', strtotime($date));
?>

Yderligere beskeder vises:
<?php
               
                $id = $_GET[vis];
               
                $sql_vis_svar = mysql_query("SELECT * FROM post_answer WHERE answer_id='$id'")or die(mysql_error());
               
                while($rows = mysql_fetch_array($sql_vis_svar)){
                    $date2 = $row['timestamp'];
                    $date_svar_added = date('d F Y \k\l\.\ H:i:s', strtotime($date));
?>   

Send en yderligere besked:
<?php
               
                $answer_header = $_POST['answer_header'];
                $answer_content = $_POST['answer_content'];
                $answer_id = $_POST['answer_id'];
                $from_user = $_POST['from_user'];
                $to_user_answer = $_POST['to_user_answer'];
               
                if(isset($_POST['answer_content'])){
                    if($answer_content === ''){
                        $errMsg = "Du skal udfylde feltet.";
                    } else {
                       
                        mysql_query("UPDATE post SET new_answer='1' WHERE id='$id'")or die(mysql_error());
                       
                        $sql2 = mysql_query("INSERT INTO post_answer (from_user, to_user_answer, answer_header, answer_content, answer_id)
                        VALUES('$from_user', '$to_user_answer', '$answer_header', '$answer_content', '$answer_id')")
                            or die(mysql_error());   
                            $successMsg = "Dit svar er sendt!";
                    }
                   
                }   
               
?>

<form action="/post/indbakke/vis/<?=$id?>" method="post">
                    <textarea maxlength="300" cols="50" rows="10" name="answer_content"></textarea><br>
                    <input name="submit" type="submit" value="Send svar">
                    <?php if(isset($errMsg)) echo $errMsg;?>
                    <?php if(isset($successMsg)) echo $successMsg?>
                    <input type="hidden" value="<?=$id?>" name="answer_id">
                    <input name="from_user" type="hidden" value="<?=$user?>">
</form>

P.S Jeg ved godt, at jeg ikke har nogen form for validering eller noget. Men det kommer ;-)
Avatar billede majbom Novice
08. juli 2011 - 17:56 #1
du kunne evt lave et felt mere i tabellen over beskeder - så du har et sender_opened og et der hedder receiver_opened?
Avatar billede LilleUdvikler Nybegynder
10. juli 2011 - 10:34 #2
Hvordan ville du så håndtere det i din php kode?
Avatar billede dab93 Nybegynder
10. juli 2011 - 14:10 #3
Mit svar ville være lidt ala det samme som #1 skriver. Lav en række i din tabel som kan indholde begge brugeres id nummer, så kan du ud fra dét lave en if funktion som kan udgøre det ønskede resultat :)
Avatar billede majbom Novice
10. juli 2011 - 21:01 #4
-> #2 - tjekke om der er post hvor en given bruger er modtager og og "opened_receiver" er 0...
Avatar billede LilleUdvikler Nybegynder
25. juli 2011 - 14:17 #5
splazz vil du ikke ligge et svar? :)
Avatar billede majbom Novice
25. juli 2011 - 14:23 #6
jo da :)
Avatar billede majbom Novice
25. juli 2011 - 17:59 #7
tfp :)
Avatar billede Slettet bruger
25. juli 2011 - 20:18 #8
Med dab93's løsning: Ét felt med flere læserID'er (delt med mellemrum)

ville du (en gang i fremtiden?) kunne lave gruppe PM'er!
Altså mulighed for at sende en besked til flere brugere på én gang.
-> få en lille cirkel af deltagere i den private diskussion..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester