Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Prywatne wiadomości - > skrzynka odbiorcza
GoodStuff
post 18.02.2015, 21:45:58
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 3.04.2013

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


Cześć, mam pewien problem z którym nie mogę sobie poradzić . Mianowicie chodzi o prywatne wiadmości "skrzynka odbiorcza" nie wyświetla mi się treść wiadomości po naciśnięciu na temat -> przenosi do strona.pl/odbiorcza.php?co=8 - > 8 to id wiadomości lecz niestety nić sie nie wyświetla. Drugą sprawą jest to, że nie kasuje mi się rekord po naciśnięciu usuń


  1. <? if(user::isLogged()){
  2. $user = user::getData('', '');
  3. if($_GET["id"]){
  4. $id=intval($_GET["id"]); //zamieniamy zmienną na liczbe, zapobiega to atakom typu sql injection
  5. if(mysqli_num_rows($db->query("select wiad_od from wiadomosci where wiad_id=$id and wiad_czyj=0 and wiad_od=".$user['id']))){
  6. $db->query("delete from wiadomosci where wiad_id=$id"); //sprawdzamy czy wiadomość którą użytkownik chce usunąć faktycznie zależy do niego
  7. echo "Usunięto wiadomość!<br>";
  8. }
  9. }
  10.  
  11. else if($_GET["co"]){
  12. $co=intval($_GET["co"]); //zamieniamy zmienną na liczbe, zapobiega to atakom typu sql injection
  13. if(mysqli_num_rows($db->query("select wiad_od from wiadomosci where wiad_id=$id and wiad_czyj=0 and wiad_od=".$user['id']))){
  14. $db->query("update wiadomosci set wiad_przeczytane=1 where wiad_id=$co"); //po raz kolejny zostaje sprawdzony warunek,
  15. $wynik=$db->query("select * from wiadomosci where wiad_id=$co and wiad_czyj=0"); //który również sprawdza właściciela wiadomości
  16. $rekord=mysqli_fetch_array($wynik);
  17. $nadawca=mysqli_fetch_array($db->query("select login from users where id=".$rekord["wiad_od"]));
  18. echo "<br><br><table><tr><td>Nadawca: ".$nadawca["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>";
  19. echo "<tr><td colspan=3>".$rekord["wiad_temat"]."</td></tr>";
  20. echo "<tr><td colspan=3>".$rekord["wiad_tresc"]."</td></tr>";
  21. echo "</table>";
  22. }
  23. }
  24.  
  25. else{
  26. $wynik=$db->query("select * from wiadomosci where wiad_do=".$user['id']." and wiad_czyj=0 order by wiad_data");
  27.  
  28. echo "<table><tr><td>Nadawca</td><td>Temat</td><td>Data</td><td>&nbsp;</td></tr>";
  29. if(!mysqli_num_rows($wynik))echo "<tr><td colspan=4 style='text-align:center'>Nie masz żadnych wiadomości!</td></tr>";
  30. else while($rekord=mysqli_fetch_array($wynik)){
  31. $nadawca=mysqli_fetch_array($db->query("select login from users where id=".$rekord["wiad_od"]));
  32. $kw1="";$kw2="";
  33. if(!$rekord["wiad_przeczytane"]){$kw1="<b>";$kw2="</b>";}
  34. echo "<tr><td>".$nadawca["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>";
  35.  
  36. }
  37. echo "</table>";
  38. }
  39. }
  40. else
  41. {
  42. echo "Aby w pełni korzystać z przywilejów tej strony zaloguj się !";
  43.  
  44. }
  45. ?>
Go to the top of the page
+Quote Post
freewalker
post 18.02.2015, 22:14:45
Post #2





Grupa: Zarejestrowani
Postów: 90
Pomógł: 4
Dołączył: 14.02.2015

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


stosuj ' ' w zapytaniu przekazując argument do pola oraz przede wszystkim - budując zapytanie zmienne PHP wyrzucaj poza to zapytanie stosując konkatenację (czyli łączenie ciągu ze zmienną poprzez kropkę) np:

  1. $wynik=$db->query("select * from wiadomosci where wiad_id='".$co."' and wiad_czyj='0'");


co do usuwania - możliwe, że to ten sam problem z wrzucaniem zmiennej php w ciąg zapytania.

pzdr
Go to the top of the page
+Quote Post
Pyton_000
post 18.02.2015, 22:18:06
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Co ma piernik do wiatraka?

Problem masz w zapytaniu sprawdzającym czy są wiadomości. Sprawdzasz wiad_id=$id a powinieneś wiad_id=$co
Go to the top of the page
+Quote Post
GoodStuff
post 18.02.2015, 22:25:28
Post #4





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 3.04.2013

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


Dalej nic to samo

zmieniony kod:

  1. <? if(user::isLogged()){
  2. $user = user::getData('', '');
  3. if($_GET["id"]){
  4. $id=intval($_GET["id"]); //zamieniamy zmienną na liczbe, zapobiega to atakom typu sql injection
  5. if(mysqli_num_rows($db->query("select wiad_od from wiadomosci where wiad_id='".$co."' and wiad_czyj=0 and wiad_od=".$user['id']))){
  6. $db->query("delete from wiadomosci where wiad_id='".$co."'"); //sprawdzamy czy wiadomość którą użytkownik chce usunąć faktycznie zależy do niego
  7. echo "Usunięto wiadomość!<br>";
  8. }
  9. }
  10.  
  11. else if($_GET["co"]){
  12. $co=intval($_GET["co"]); //zamieniamy zmienną na liczbe, zapobiega to atakom typu sql injection
  13. if(mysqli_num_rows($db->query("select wiad_od from wiadomosci where wiad_id='".$co."' and wiad_czyj=0 and wiad_od=".$user['id']))){
  14. $db->query("update wiadomosci set wiad_przeczytane=1 where wiad_id='".$co."'"); //po raz kolejny zostaje sprawdzony warunek,
  15. $wynik=$db->query("select * from wiadomosci where wiad_id='".$co."' and wiad_czyj=0"); //który również sprawdza właściciela wiadomości
  16. $rekord=mysqli_fetch_array($wynik);
  17. $nadawca=mysqli_fetch_array($db->query("select login from users where id=".$rekord["wiad_od"]));
  18. echo "<br><br><table><tr><td>Nadawca: ".$nadawca["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>";
  19. echo "<tr><td colspan=3>".$rekord["wiad_temat"]."</td></tr>";
  20. echo "<tr><td colspan=3>".$rekord["wiad_tresc"]."</td></tr>";
  21. echo "</table>";
  22. }
  23. }
  24.  
  25. else{
  26. $wynik=$db->query("select * from wiadomosci where wiad_do=".$user['id']." and wiad_czyj=0 order by wiad_data");
  27.  
  28. echo "<table><tr><td>Nadawca</td><td>Temat</td><td>Data</td><td>&nbsp;</td></tr>";
  29. if(!mysqli_num_rows($wynik))echo "<tr><td colspan=4 style='text-align:center'>Nie masz żadnych wiadomości!</td></tr>";
  30. else while($rekord=mysqli_fetch_array($wynik)){
  31. $nadawca=mysqli_fetch_array($db->query("select login from users where id=".$rekord["wiad_od"]));
  32. $kw1="";$kw2="";
  33. if(!$rekord["wiad_przeczytane"]){$kw1="<b>";$kw2="</b>";}
  34. echo "<tr><td>".$nadawca["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>";
  35.  
  36. }
  37. echo "</table>";
  38. }
  39. }
  40. else
  41. {
  42. echo "Aby w pełni korzystać z przywilejów tej strony zaloguj się !";
  43.  
  44. }
  45. ?>
Go to the top of the page
+Quote Post
freewalker
post 18.02.2015, 22:27:27
Post #5





Grupa: Zarejestrowani
Postów: 90
Pomógł: 4
Dołączył: 14.02.2015

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


przy wartościach liczbowych niewiele ma ten piernik do wiatraka, ale jak będzie pobierał czy wrzucał inne dane to już może się wysypać, jak trafi na spację ; )

deklarujesz $id a korzystasz z $co :

$id=intval($_GET["id"]); //zamieniamy zmienną na liczbe, zapobiega to atakom typu sql injection
if(mysqli_num_rows($db->query("select wiad_od from wiadomosci where wiad_id='".$co."' and wiad_czyj=0 and wiad_od=".$user['id']))){
$db->query("delete from wiadomosci where wiad_id='".$co."'");

Ten post edytował freewalker 18.02.2015, 22:28:16
Go to the top of the page
+Quote Post
GoodStuff
post 18.02.2015, 22:33:02
Post #6





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 3.04.2013

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


Może jakieś pomysły jeszcze?
Go to the top of the page
+Quote Post
freewalker
post 18.02.2015, 22:36:22
Post #7





Grupa: Zarejestrowani
Postów: 90
Pomógł: 4
Dołączył: 14.02.2015

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


Cytat(GoodStuff @ 18.02.2015, 22:33:02 ) *
Może jakieś pomysły jeszcze?


a zmieniłeś wszystko na powyższe?

Ogólnie radziłbym jeszcze trochę zmienić logikę if, bo masz if(id)elseif(co). Zrób tak, żeby ID przekazywać zawsze w zmiennej id a to, co chcesz wykonać to np w zmiennej opt (opcja), tak aby link wyglądał:

odbiorcza.php?opt=pokaz&id=".$rekord["wiad_id"]." //wyswietlanie wiadomosci
odbiorcza.php?opt=usun&id=".$rekord["wiad_id"]." //usuwanie wiadomosci

następnie sprawdzaj co wciśnięto w ten sposób:

$id=(int)$_GET['id'];

if($_GET['opt']=="pokaz")
{
akcje dla opcji pokaz
}
elseif($_GET['opt']=="usun")
{
akcje dla opcji usun
}


Ten post edytował freewalker 18.02.2015, 22:41:15
Go to the top of the page
+Quote Post
GoodStuff
post 18.02.2015, 22:37:30
Post #8





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 3.04.2013

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


Tak u góry w poście wkleiłem zmieniony kod
Go to the top of the page
+Quote Post
freewalker
post 18.02.2015, 22:43:09
Post #9





Grupa: Zarejestrowani
Postów: 90
Pomógł: 4
Dołączył: 14.02.2015

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


Cytat(GoodStuff @ 18.02.2015, 22:37:30 ) *
Tak u góry w poście wkleiłem zmieniony kod



we wklejonym poście dalej masz błąd w kodzie:

if($_GET["id"]){
$id=intval($_GET["id"]); //zamieniamy zmienną na liczbe, zapobiega to atakom typu sql injection
if(mysqli_num_rows($db->query("select wiad_od from wiadomosci where wiad_id='".$co."' and wiad_czyj=0 and wiad_od=".$user['id']))){
$db->query("delete from wiadomosci where wiad_id='".$co."'"); //sprawdzamy czy wiadomość którą użytkownik chce usunąć faktycznie zależy do niego
echo "Usunięto wiadomość!<br>";
}

gdzie masz zmienną $co, skoro ID przypisujesz do zmiennej $id questionmark.gif


aaa spoko...na samej górze.... skąd miałem widzieć tongue.gif

Ten post edytował freewalker 18.02.2015, 22:43:49
Go to the top of the page
+Quote Post
GoodStuff
post 20.02.2015, 06:47:13
Post #10





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 3.04.2013

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


Niestety dalej nic...
Go to the top of the page
+Quote Post
Pyton_000
post 20.02.2015, 11:04:05
Post #11





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Twój kod zemścił się na tobie za ten bałagan.

Weź to przeformatuj jak człowiek do czytelnej wersji a potem wstaw jeszcze raz kod.
Go to the top of the page
+Quote Post
GoodStuff
post 20.02.2015, 19:19:06
Post #12





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 3.04.2013

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


Zrobiłem tak jak poradziłeś wszystko działa jak należy smile.gif

Dopiero raczkuje w MYSQL/PHP dlatego też wygląda to tak a nie innaczej.
Go to the top of the page
+Quote Post
Pyton_000
post 20.02.2015, 19:37:55
Post #13





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Problemy w 80% przypadków wynikają z niechlujstwa i niekonsekwencji.

Formatuj i porządkuj kod a zobaczysz że wiele problemów samo się rozwiąże smile.gif
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: 29.05.2024 - 08:59