Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Prywatne wiadomości
Croos22
post 23.09.2010, 21:00:26
Post #1





Grupa: Zarejestrowani
Postów: 316
Pomógł: 4
Dołączył: 22.03.2010

Ostrzeżenie: (0%)
-----


Witam.
Mam problem z prywatnymi wiadomościami. Analizowałem kod kilka razy ale na nic nie wpadłem. Problem polega na tym, że gdy ktoś wysyła wiadomość to odbiorca otrzymuje dwie chodź została wysłana jedna. Niektórych wiadomości wysłanych oraz nadawczych nie można odczytać ponieważ wywala błąd:
Cytat
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /virtual/k/o/kosek.ugu.pl/odbiorcza.php on line 15
.
Wszystkie pliki znajdują się na stronie głównej czyli kosek.ugu.pl.

Oto kod odiorcza.php
  1. <?
  2. require "sesje.php";
  3. require "naglowek.php";
  4.  
  5. if($_GET["id"]){
  6. $id=intval($_GET["id"]); //zamieniamy zmienną na liczbe, zapobiega to atakom typu sql injection
  7. if(mysql_num_rows(mysql_query("select wiad_od from wiadomosci where wiad_id=$id and wiad_czyj=0 and wiad_od=".$_SESSION["zalogowany"]))){
  8. mysql_query("delete from wiadomosci where wiad_id=$id"); //sprawdzamy czy wiadomość którą użytkownik chce usunąć faktycznie ależy do niego
  9. echo "Usunięto wiadomość!<br>";
  10. }
  11. }
  12.  
  13. else if($_GET["co"]){
  14. $co=intval($_GET["co"]); //zamieniamy zmienną na liczbe, zapobiega to atakom typu sql injection
  15. if(mysql_num_rows(mysql_query("select wiad_od from wiadomosci where wiad_id=$id and wiad_czyj=0 and wiad_od=".$_SESSION["zalogowany"]))){
  16. mysql_query("update wiadomosci set wiad_przeczytane=1 where wiad_id=$co"); //po raz kolejny zostaje sprawdzony warunek,
  17. $wynik=mysql_query("select * from wiadomosci where wiad_id=$co and wiad_czyj=0"); //który również sprawdza właściciela wiadomości
  18. $rekord=mysql_fetch_array($wynik);
  19. $nadawca=mysql_fetch_array(mysql_query("select user_login from users where user_id=".$rekord["wiad_od"]));
  20. echo "<br><br><table><tr><td>Nadawca: ".$nadawca["user_login"]."</td><td>Data: ".date("d/m/Y H:i", strtotime($rekord["wiad_data"]))."</td><td><a href='odbiorcza.php?id=".$rekord["wiad_id"]."'>usuń</a></td></tr>";
  21. echo "<tr><td colspan=3>".$rekord["wiad_temat"]."</td></tr>";
  22. echo "<tr><td colspan=3>".$rekord["wiad_tresc"]."</td></tr>";
  23. echo "</table>";
  24. }
  25. }
  26.  
  27. else{
  28. $wynik=mysql_query("select * from wiadomosci where wiad_do=".$_SESSION["zalogowany"]." and wiad_czyj=0 order by wiad_data");
  29.  
  30. echo "<table><tr><td>Nadawca</td><td>Temat</td><td>Data</td><td>&nbsp;</td></tr>";
  31. if(!mysql_num_rows($wynik))echo "<tr><td colspan=4 style='text-align:center'>Nie masz żadnych wiadomości!</td></tr>";
  32. else while($rekord=mysql_fetch_array($wynik)){
  33. $nadawca=mysql_fetch_array(mysql_query("select user_login from users where user_id=".$rekord["wiad_od"]));
  34. $kw1="";$kw2="";
  35. if(!$rekord["wiad_przeczytane"]){$kw1="<b>";$kw2="</b>";}
  36. echo "<tr><td>".$nadawca["user_login"]."</td><td><a href='odbiorcza.php?co=".$rekord["wiad_id"]."'>$kw1".$rekord["wiad_temat"]."$kw2</td><td>".date("d/m/Y H:i", strtotime($rekord["wiad_data"]))."</td><td><a href='odbiorcza.php?id=".$rekord["wiad_id"]."'>usuń</a></td></tr>";
  37. }
  38. echo "</table>";
  39. }
  40. require "stopka.php";
  41. ?>


Nie wiem czy się przyda ale dam jeszcze nadawczą czyli newmsg.php
  1. <?
  2. require "sesje.php";
  3. require "naglowek.php";
  4.  
  5. if($_POST["tresc"] && $_POST["do"] && $_POST["temat"]){
  6. mysql_query("insert into wiadomosci values(NULL, '".htmlspecialchars($_POST["tresc"])."', ".$_SESSION["zalogowany"].", ".intval($_POST["do"]).", 0, NOW(), '".htmlspecialchars($_POST["temat"])."', 0)");
  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. }
  10. else if($_POST["submit"]){
  11. echo "<br><br>Nie uzupełniono wszystkich pól!<br>";
  12. }
  13. echo "<form action='newmsg.php' method=post>";
  14. echo "<br>Temat: <input name=temat size=30>";
  15. echo "<br>ID: <input name=do>";
  16. $wynik=mysql_query("select user_id from users order by user_id");
  17. while($rekord=mysql_fetch_array($wynik)){
  18. echo "<option value=".$rekord["user_id"].">".$rekord["user_login"];
  19. }
  20. echo "</select><br>";
  21. echo "Treść: <br><textarea name='tresc' rows=8 cols=50></textarea>";
  22. echo "<br><input type=submit value='wyślij wiadomość' name=submit>";
  23. require "stopka.php";
  24. ?>


Proszę o jakieś rady sam sobie nie mogę poradzić :<
Go to the top of the page
+Quote Post
nospor
post 24.09.2010, 06:20:20
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Niektórych wiadomości wysłanych oraz nadawczych nie można odczytać ponieważ wywala błąd:
Masz blad zapytania. Tu masz napisane jak sobie z tym radzic
Temat: Jak poprawnie zada pytanie
Ogólnie zastosuj się do podanych tam porad


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
krispak
post 24.09.2010, 07:35:45
Post #3





Grupa: Zarejestrowani
Postów: 250
Pomógł: 55
Dołączył: 27.08.2008

Ostrzeżenie: (0%)
-----


Poplatanie z pomieszaniem w tym skrypcie winksmiley.jpg
W newmsg.php masz dwa INSERTy, ktore wysylaja do jednego usera $_POST["do"] ta sama wiadomosc rozniac sie tylko ostatnia wartoscia 0,1


--------------------
* * * * * * * * * * * * * * * * * * * * * * * * *
PHP, Laravel, Docker, Docker Compose, Laradock, Redis, JS, React, Vue, CSS, SCSS, Gulp, GIT ... itd..
Go to the top of the page
+Quote Post
Croos22
post 24.09.2010, 15:24:25
Post #4





Grupa: Zarejestrowani
Postów: 316
Pomógł: 4
Dołączył: 22.03.2010

Ostrzeżenie: (0%)
-----


Szukałem błędu w pliku odbiorczym.
Gdy usunę inserta z 0 na końcu nadal wysyła dwie wiadomości lecz gdy usuwam tego z 1 do bazy wysyła ale nie wyświetla na stronie. Wydaje mi się, że oba muszą tam być ale nie mam pojęcia jak rozwiązać problem.
Go to the top of the page
+Quote Post
sebekzosw
post 25.09.2010, 01:59:04
Post #5





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


w takim razie powinieneś nauczyć się spooro jeszcze... to za wysoki poziom jak na Twoje umiejętności
Go to the top of the page
+Quote Post
Croos22
post 25.09.2010, 05:17:15
Post #6





Grupa: Zarejestrowani
Postów: 316
Pomógł: 4
Dołączył: 22.03.2010

Ostrzeżenie: (0%)
-----


Tzn. wiem za co odpowiadają te dwie linijki przydaje się przy to jeśli chcemy stworzyć skrzynkę odbiorczą i nadawczą z opcją usuwania wiadomości.
Go to the top of the page
+Quote Post
sebekzosw
post 25.09.2010, 07:45:22
Post #7





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


wystarczy inaczej zrobić tabele i wszystko masz wtedy w 1 zapytaniu
Go to the top of the page
+Quote Post
Ulysess
post 25.09.2010, 08:24:54
Post #8





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

Ostrzeżenie: (0%)
-----


hmm a nie lepiej wszystkie dane mieć w 1 wierszu questionmark.gif np status_recipient , status_sender,sender,recipient,date,message i np jeśli chcemy wyświetlić swoje wysłane to poprzez where sender = moje id and status sender = 0 (bo 1 oznacza że wiadomośc jest tak jakby skasowana)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 04:04