Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Prywatne wiadomości
Forum PHP.pl > Forum > Przedszkole
Croos22
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ć :<
nospor
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
krispak
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
Croos22
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.
sebekzosw
w takim razie powinieneś nauczyć się spooro jeszcze... to za wysoki poziom jak na Twoje umiejętności
Croos22
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.
sebekzosw
wystarczy inaczej zrobić tabele i wszystko masz wtedy w 1 zapytaniu
Ulysess
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)
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.