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...


--------------------
Sztachnij sę zioom, muza spoko;]
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 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 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 winksmiley.jpg Podczas wysyłania opini, sprawdzasz czy istnieje już do tego rankingu rekord z tym IP i juz 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 winksmiley.jpg ALE na to też jest obejście....


--------------------
---
"kto pyta ten nie błądzi"...
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.


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
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 biggrin.gif 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.


--------------------
Sztachnij sę zioom, muza spoko;]
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


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
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ł winksmiley.jpg

Pozdrawiam!


--------------------
---
"kto pyta ten nie błądzi"...
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. ?>


--------------------
Sztachnij sę zioom, muza spoko;]
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. winksmiley.jpg


--------------------
Sztachnij sę zioom, muza spoko;]
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 Aktualny czas: 21.08.2025 - 03:18