Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][SQL]Ranking
RoysoN
post
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 3.12.2009

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


Witam! Jestem początkujący w PHP. Stworzyłem taki ranking filmów:
WYŚWIETLANIE & GŁOSOWANIE:
Wyświetla rekordy(w tym przypadku filmy): id | nazwa | tematyka | lwys. lwys to tutaj głosy, które użytkownik może dodawać lub ujmować.
  1. <?php
  2.  
  3. require "connection.php";
  4. connection();
  5.  
  6.  
  7. $wynik = mysql_query("SELECT * FROM filmy ORDER BY lwys DESC LIMIT 10")
  8. or die('Błąd');
  9.  
  10. if(mysql_num_rows($wynik) > 0) {
  11. echo "<table width='168px'>";
  12. while($r = mysql_fetch_assoc($wynik)) {
  13. if (isset($_POST["bob".$r['id']])) {
  14. mysql_query("UPDATE filmy SET lwys=lwys + 1 where id = ".$r['id'].";");
  15. echo "głos dodany";
  16. } else if(isset($_POST["bob2".$r['id']])){
  17. mysql_query("UPDATE filmy SET lwys=lwys - 1 where id = ".$r['id'].";");
  18. echo "głos ujety";
  19. } else {
  20. echo "<tr><div id='wiersz'>";
  21. echo "<td>".$r['id']."</td>";
  22. echo "<td>".$r['nazwa']."</td>";
  23. echo "<td>".$r['tematyka']."</td>";
  24. echo "<td>".$r['lwys']."</td>";
  25. echo "<td> <form action='' method='POST'><input type='submit' name='bob".$r['id']."' value='' style='background:url(grafika/tak.gif); border:0; height:15px; width:15px''><input type='submit' name='bob2".$r['id']."' value='' style='background:url(grafika/nie.gif); border:0; height:15px; width:15px'></form></td>";
  26. echo "</div></tr>";
  27.  
  28. }
  29.  
  30.  
  31. }
  32. echo "</table>";
  33. }
  34. ?>
  35.  


DODAWANIE FILMÓW:
  1. <html>
  2. <body>
  3.  
  4. <form action="dodajfilm.php" method="post">
  5. nazwa:<br />
  6. <input type="text" name="nazwa" /><br />
  7. tematyka:<br />
  8. <select name='tematyka'>
  9.  
  10. <option>Motoryzacja</option>
  11. <option>Muzyka</option>
  12. <option>Wydarzenia</option>
  13. <option>Inne</option>
  14.  
  15. </select>
  16. <input type="submit" value="dodaj" />
  17. </form>
  18.  
  19. <?php
  20. $nazwa = $_POST['nazwa'];
  21. $tematyka = $_POST['tematyka'];
  22.  
  23. if($nazwa and $tematyka) {
  24.  
  25. $connection = @mysql_connect('localhost', 'root', '')
  26. or die('Brak połączenia z serwerem MySQL');
  27. $db = @mysql_select_db('webserv', $connection)
  28. or die('Błąd');
  29.  
  30. $ins = @mysql_query("INSERT INTO filmy SET id=null, nazwa='$nazwa', tematyka='$tematyka', lwys=0");
  31.  
  32. if($ins) echo "OK";
  33. else echo "error";
  34.  
  35. mysql_close($connection);
  36. }
  37.  
  38. ?>
  39.  
  40. </body>
  41. </html>

Gdyby ktoś chciał to ma tu gotowiec.
Ale mam pytanie odnośnie, jaki sposób polecali byście do zabezpieczenia przed powtórnym głosowaniem? Słyszałem, że tworzy się bazę danych z numerami IP, ale kolega wspomniał coś o ciasteczkach...
Go to the top of the page
+Quote Post
bialko0019
post
Post #2





Grupa: Zarejestrowani
Postów: 294
Pomógł: 4
Dołączył: 19.12.2008

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


Najczęściej zabezpiecza się poprzez ciasteczka (IMG:style_emoticons/default/winksmiley.jpg) ALE problem w ciasteczkach jest przecież taki, że jak ktoś jest uparty zagłosować jeszcze raz, sprawdzi właśnie ciasteczka i usunie i powtórnie zagłosuje (IMG:style_emoticons/default/winksmiley.jpg)

Osobiście na stronie mam możliwość odpowiadania w ankietach. Rozwiązałbym to w taki sposób ( nie wiem czy najodpowiedniejszy ale.. ) , że dodajesz nową tabelę np. głosujący. W niej, gdy ktoś zagłosuje dodajesz nr IP gościa i w drugiej kolumnie ID danego rankingu (IMG:style_emoticons/default/winksmiley.jpg) Podczas wysyłania opini, sprawdzasz czy istnieje już do tego rankingu rekord z tym IP i juz (IMG:style_emoticons/default/winksmiley.jpg) NO JEŚLI ktoś dalej uparty to i zmieni IP i dalej zagłosuje ;p

Można było by się jeszcze pokusić, do sprawdzania przeglądarki usera a nie tylko IP (IMG:style_emoticons/default/winksmiley.jpg) ALE na to też jest obejście....
Go to the top of the page
+Quote Post
sadistic_son
post
Post #3





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Na wszystko jest obejscie. Sprawdzanie po IP nie daje prawie zadnej gwarancji, jak ktos korzysta np. z DSLa to IP mu sie zmienia automatycznie co kilka-kilkanascie godzin.
Go to the top of the page
+Quote Post
RoysoN
post
Post #4





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 3.12.2009

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


tak myśle, że przecietny użytkownik nie będzie raczej wgłębiać się w cookiesy, ip itd wiec takie podstawowe zabezpieczenia starcza, kolega mi właśnie polecał ciasteczka, ale nigdy wcześniej nie bawiłem się nimi (mama mi powtarzała żebym nie bawił się jedzeniem (IMG:style_emoticons/default/biggrin.gif) (IMG:style_emoticons/default/haha.gif) ). tak serio to z ciasteczkami bym spróbował, może to będzie lepsze rozwiązanie niż od razu baza danych. tak mi się zdaje, że przy tym jest więcej dłubania.
Go to the top of the page
+Quote Post
sadistic_son
post
Post #5





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Przy bazie wiecej dlubania?
Tabela IP-ranking
id
id_filmy
ip

I gotowe. Potem przy glosowaniu sprawdzasz czy to id filmu nie jest w jednym rekordzie z IP i juz.
  1. $sql="SELECT * FROM ip_ranking WHERE id_film = ".$id_filmu." AND ip = ' ".$_SERVER['REMOTE_ADDR']." ' ";

Najlepiej zrob sprawdzenie i po IP i po ciachach.

Ten post edytował sadistic_son 20.09.2010, 20:05:38
Go to the top of the page
+Quote Post
bialko0019
post
Post #6





Grupa: Zarejestrowani
Postów: 294
Pomógł: 4
Dołączył: 19.12.2008

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


no dokładnie, zrób lepiej po bazie danych i ciasteczkach, bo każdy jeden użytkownik - a przynajmniej najczęsciej - umie kasować ciasteczka, albo też spora część użytkowników usuwa co jakiś czas automatycznie. Bezpieczniejsze będzie wyjście z bazą danych i ciasteczkami. Z bazą wiesz jak zrobić, podał kolega powyżej, a ciasteczka również prosto, nawet Twój kolega Ci podpowiedział (IMG:style_emoticons/default/winksmiley.jpg)

Pozdrawiam!
Go to the top of the page
+Quote Post
RoysoN
post
Post #7





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 3.12.2009

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


dzieki stary! jestes wielki!
  1. <?php
  2.  
  3. require "connection.php";
  4. connection();
  5.  
  6.  
  7. $wynik = mysql_query("SELECT * FROM filmy ORDER BY lwys DESC LIMIT 10")
  8. or die('Błąd zapytania');
  9.  
  10. if(mysql_num_rows($wynik) > 0) {
  11. echo "<table width='168px'>";
  12. while($r = mysql_fetch_assoc($wynik)) {
  13. if (isset($_POST["bob".$r['id']])) {
  14. $ipuz = mysql_query("SELECT * FROM iprank WHERE idfilm = ".$r[id]." AND ip = ' ".$_SERVER['REMOTE_ADDR']." ' ;");
  15. if ($ipuz) {
  16. echo "Głosowałeś już!";
  17. } else {
  18. mysql_query("UPDATE filmy SET lwys=lwys + 1 where id = ".$r['id'].";");
  19. echo "Głos dodano!";
  20. mysql_query("insert into iprank set id=null, idfilm='$r[id]', ip='$_SERVER[REMOTE_ADDR]'"); //IP ADD
  21. }
  22. } else if(isset($_POST["bob2".$r['id']])){
  23. $ipuz = mysql_query("SELECT * FROM iprank WHERE idfilm = ".$r[id]." AND ip = ' ".$_SERVER['REMOTE_ADDR']." ' ;");
  24. if ($ipuz) {
  25. echo "Głosowałeś już!";
  26. } else {
  27. mysql_query("UPDATE filmy SET lwys=lwys - 1 where id = ".$r['id'].";");
  28. echo "Głos obniżony!";
  29. mysql_query("insert into iprank set id=null, idfilm='$r[id]', ip='$_SERVER[REMOTE_ADDR]'"); //IP ADD
  30. }
  31. } else {
  32. echo "<tr><div id='wiersz'>";
  33. echo "<td>".$r['id']."</td>";
  34. echo "<td>".$r['nazwa']."</td>";
  35. echo "<td>".$r['tematyka']."</td>";
  36. echo "<td>".$r['lwys']."</td>";
  37. echo "<td> <form action='' method='POST'><input type='submit' name='bob".$r['id']."' value='' style='background:url(grafika/tak.gif); border:0; height:15px; width:15px''><input type='submit' name='bob2".$r['id']."' value='' style='background:url(grafika/nie.gif); border:0; height:15px; width:15px'></form></td>";
  38. echo "</div></tr>";
  39.  
  40. }
  41.  
  42.  
  43. }
  44. echo "</table>";
  45. }
  46. ?>
Go to the top of the page
+Quote Post
Alson
post
Post #8





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 10.03.2010
Skąd: Gniezno

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


Jak już było powiedziane IP jest zmienne i bardzo łatwo jest obejść takie coś -> Netia/Neostrada -> Reconnect + Czyszczenie Ciasteczek.

Zamiast dodawać IP do bazy może lepiej zrobić możliwość oceniania tylko dla zalogowanych i sprawdzać po nicku czy nie głosował oceniał danego filmu. Moim zdaniem tak jest najbezpieczniej.

Pozdrawiam Alson.
Go to the top of the page
+Quote Post
RoysoN
post
Post #9





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 3.12.2009

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


Szczerze mówiąc jeszcze nigdy nie pisałem systemu logowania z możliwością rejestracji.
Sprawdzanie IP to tymczasowy sposób, Aż nie nauczę się sesji . Przy następnej modernizacji serwisu wprowadzę system logowania. (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.09.2025 - 05:11