Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Problem z zapytaniem PW
Forum PHP.pl > Forum > Przedszkole
lukaszk
Witam robię system prywatnych wiadomość na stronę i nie mogę sobie poradzić z jednym małym mankamentem.
Użytkownik 1 wysyła wiadomość do Użytkownika 2 dodatkowo może wejść w tą wiadomość i coś dopisać jeszcze w tej wiadomości jako nowa ale widoczna w wiadomości matce.

Czyli tak jak na forum post i komentarze w moim przypadku postem może być pojedyncza wiadomość bez odpowiedzi a także użytkownik 1 i 2 może prowadzić rozmowę nie zaczynając nowych wiadomości tylko pisząc w tej samej.
Przy pisaniu nowego PW w polu id_konwersacji wpisane zostaje to samo co wiad_id
Następnie użytkownik chcę coś dopisać i pisze w tej samej wiadomości coś jeszcze wówczas wiad_id ma swoje id a do id_konwersacji zapisywane jest id wiadomości w ramach której ta wiadomość została wysłana.
Problem mam taki że użytkownik wysyłający wchodzący w tą PW widzi kolejne wiadomości tak jak chcę wewnątrz pierwotnej wiadomości ale użytkownik do którego wysyłam widzi każdą odpowiedź jako nowe PW


Mam dwa zapytania jedno do wysłania nowego PW
  1. if($_POST["tresc"] && $_POST["do"] && $_POST["temat"]){
  2. mysql_query("insert into wiadomosci values(NULL, NULL, '".htmlspecialchars($_POST["tresc"])."', ".$_SESSION["zalogowany"].", 1, ".intval($_POST["do"]).", 1, 0, NOW(), '".htmlspecialchars($_POST["temat"])."', 0)");
  3. $id_insert = mysql_insert_id();
  4. mysql_query("update wiadomosci set id_konwersacji=$id_insert WHERE wiad_id=$id_insert");
  5.  
  6.  
  7. //mysql_query("insert into wiadomosci values(NULL, '".htmlspecialchars($_POST["tresc"])."', ".$_SESSION["zalogowany"].", ".intval($_POST["do"]).", 0, NOW(), '".htmlspecialchars($_POST["temat"])."', 1)");
  8. echo "<br><br>Wysłano wiadomość!<br>";
  9. }

a te służy do odpowiedzi na PW bądź dopisania czy prowadzenia wymiany informacji wewnątrz.
  1. if($_POST["konwersacja"]){
  2. echo "Konwersacja";
  3.  
  4. mysql_query("insert into wiadomosci values(NULL,".intval($_POST["konwersacja_id"]).", '".htmlspecialchars($_POST["tresc"])."', ".$_SESSION["zalogowany"].", 1, ".intval($_POST["do"]).", 1, 0, NOW(), '".htmlspecialchars($_POST["temat"])."', 0)");
  5. mysql_query("update wiadomosci set wiad_przeczytane=0 where wiad_id=".intval($_POST["konwersacja_id"])."");
  6. //mysql_query("insert into wiadomosci values(NULL, '".htmlspecialchars($_POST["tresc"])."', ".$_SESSION["zalogowany"].", ".intval($_POST["do"]).", 0, NOW(), '".htmlspecialchars($_POST["temat"])."', 1)");
  7. echo "<br><br>Wysłano wiadomość!<br>";
  8. }


Takie zapytanie wyświetla listę wiadomości
  1. SELECT * FROM wiadomosci WHERE wiad_do=".$_SESSION["zalogowany"]." AND status_do!=0


a takie odpowiedzi do pierwszego PW

  1. SELECT * FROM wiadomosci WHERE wiad_id=".$_GET['wiadomosc']." OR id_konwersacji=".$_GET['wiadomosc'].""


tabela
  1. CREATE TABLE IF NOT EXISTS `wiadomosci` (
  2. `wiad_id` int(11) NOT NULL auto_increment,
  3. `id_konwersacji` int(11) default NULL,
  4. `wiad_tresc` text,
  5. `wiad_od` int(11) default NULL,
  6. `status_od` int(11) default NULL,
  7. `wiad_do` int(11) default NULL,
  8. `status_do` int(11) default NULL,
  9. `wiad_przeczytane` tinyint(1) default NULL,
  10. `wiad_data` datetime default NULL,
  11. `wiad_temat` varchar(30) default NULL,
  12. `wiad_czyj` tinyint(1) default NULL,
  13. PRIMARY KEY (`wiad_id`)
  14. )


kpt_lucek
Witaj!

Ja widzę dwa rozwiązania.

I. Jak użytkownik wyśle ową wiadomość to skrypt musi sprawdzić czy w danej konwersacji OSTATNIA wiadomość została wysłana przez niego.
Jezeli tak to owy tekst opasać jakimś znacznikiem na przykład [*][/*], dopisujesz sobie do funkcji która wyświetla owe dane że [*] ma zamienić na np diva z klasą jaką ma div samej wiadomości głównej, wtedy wiadomość wyląduje w wiadomości głównej i będzie opasana tymże stylem co wiadomość rodzic (ja to przynajmniej tak widzę smile.gif ).

II Stworzyć dodatkową kolumnę w tabeli (metoda na okrętkę) która będzie zawierać informacje czy dana wiadomość to jest "edycja" wiadomości głównej czy też nowa wiadomość i zależnie od tej kolumny tak ją potraktować.

Sposób a) wydaje mi się logiczniejszy i łatwiejszy w zastosowaniu, bo wystarczy tylko UPDATE wraz z dodaniem znacznika, oraz funkcją która ten znacznik Ci przerobi.
Zapewne są inne rozwiązania, a to tutaj to tylko sposób/próba naprowadzenia Cię na to czego oczekujesz: )

Powodzenia
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.