Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Lista przebojów
Forum PHP.pl > Forum > Przedszkole
xoro
Witam serdecznie!
Mój nazwijmy to "problem" dotyczy listy przebojów. Pomęczyłem się i napisałem skrypt do obsługi radia. Panel radiowy jest oczywiście oparty na rejestracji i logowaniu. Może nie tyle rejestracji co dodawaniu przez ADMINA użytkowników panelu czyli prezenterów mających dostęp do jego zasobów. Wszystkie więc funkcje wewnętrzne oparte są na "zdrowej" zasadzie uprawnień przydzielanych użytkownikom (prezenterom) zarejestrowanym.
Jest jednak jeden plik, który musi być uniezależniony od tego czy ktoś jest zarejestrowany, po prostu plik zewnętrzny widoczny dla każdego kto wejdzie pod konkretny link (który oczywiście poniżej podaję).

Lista przebojów

Jak widać po wejściu ukazuje się nam lista przebojów z utworami i kilkoma statystykami czyli wiadomo: tytuł utworu i wykonawca, aktualna pozycja, trend (czyli dół lub góra), pozycja w poprzednim notowaniu oraz ilość tygodni na liście dla utworu. Można również obejrzeć teledysk z YT oraz oddać głos na konkretny utwór.
I właśnie mój "problem" dotyczy opcji głosowania (szczerze przytkało mi umysł i na chwilę obecną nie mam pomysłu jak ugryźć temat - stary jestem to i umysł już nie ten, będziecie przed 50 tką to też Wam się to będzie zdarzać smile.gif znalazłem sobie hobby na stare lata i w sumie wciąż uczę się php/mysql - dlatego piszę w PRZEDSZKOLU).

Co chciałbym osiągnąć:
1. zablokowanie na np. 1 dzień konkretnego klawisza GŁOSUJ jeśli już konkretna osoba głosowała na konkretny utwór,
2. max. głosowanie na powiedzmy 5 utworów przez jedną osobę dziennie.

Problemu by nie było gdyby plik był obwarowany dostępem tylko dla zarejestrowanych użytkowników (sprawa prosta ustawienia uprawnień) lecz ten plik nie może być uzależniony od tego czy ktoś jest zarejestrowany.
To co widać pod podanym linkiem jest obsługiwane przez tabelę:

  1. CREATE TABLE IF NOT EXISTS `lista_przebojow` (
  2. `id` int(20) NOT NULL AUTO_INCREMENT,
  3. `piosenka` varchar(300) NOT NULL DEFAULT '',
  4. `teledysk` varchar(500) NOT NULL DEFAULT '',
  5. `poprzednio` tinyint(4) NOT NULL,
  6. `tygodnie` tinyint(4) NOT NULL,
  7. `glosy` tinyint(4) NOT NULL,
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;


a sam plik ma taką strukturę (część pliku odpowiadająca za głosowanie):

  1. <?php
  2. require_once "include/struktura.php";
  3. dbconn_movie();
  4. //stdhead();
  5. ?>
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  7. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  8. <head>
  9. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  10. <title>Lista Przebojów</title>
  11. <link rel="stylesheet" href="styles/style.css" type="text/css" />
  12. <!-------- dla Youtube trailer -->
  13. <link rel="stylesheet" href="colorbox.css" />
  14. <script src="jquery.min.js" type="text/javascript" charset="utf-8"></script>
  15. <script src="jquery.colorbox.js" type="text/javascript" charset="utf-8"></script>
  16. <script>
  17. $(document).ready(function(){
  18. //Examples of how to assign the Colorbox event to elements
  19. $(".youtube").colorbox({iframe:true, innerWidth:740, innerHeight:490});
  20. //Example of preserving a JavaScript event for inline calls.
  21. $("#click").click(function(){
  22. $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
  23. return false;
  24. });
  25. });
  26. </script>
  27. <!-------- dla Youtube trailer -->
  28. </head>
  29. <body>
  30. <?
  31. $action = isset($_POST['action']) ? htmlspecialchars($_POST['action']) : (isset($_GET['action']) ? htmlspecialchars($_GET['action']) : '');
  32. $allowed_actions = array("dodaj", "glosuj");
  33. if ($action)
  34. if (!in_array($action, $allowed_actions))
  35. stderr("Błąd", "Nieprawidłowa akcja");
  36. else {
  37. switch ($action) {
  38. //GLOSOWANIE______________________________________
  39. case "glosuj":
  40. $id=$_GET['id'];
  41. $q = mysql_query("UPDATE lista_przebojow SET glosy=glosy+1 WHERE id=$id") or die('<p align=center>Błąd edycji cos poszło nie tak!.</p>');
  42. if($q){
  43. print("<div class='pozdro_online'>");
  44. print("<fieldset>");
  45. print("<legend>Głosowanie</legend>");
  46. print("<table class='TABELA' cellspacing='0' cellpadding='5'>");
  47. print("<tr>");
  48. print("<td class='TABELA_KOMORKA' colspan='2' style='text-align:center; color: green; font-weight: bold; font-size: 16px;'>Twój głos jest zapisywany!</td>");
  49. print("</tr>");
  50. print("</table>");
  51. print("<center><img src='$BASEURL/images/loader.gif'></center>");
  52. print("</fieldset>");
  53. print("</div>");
  54. echo '<META HTTP-EQUIV=Refresh CONTENT="3; URL=lista_przebojow_display.php">';
  55. }
  56. else{
  57. echo '<p align=center>Nie dodano.</p>';
  58. echo '<META HTTP-EQUIV=Refresh CONTENT="1; URL=java script:history.back(1)">';
  59. }
  60. break;
  61. //GLOSOWANIE______________________________________
  62.  
  63. }
  64. }
  65. $res=mysql_query("SELECT * FROM lista_ustawienia");
  66. $row=mysql_fetch_array($res);
  67. //TABELA Z LISTA______________________________________________________________
  68. print("<br /><br />");
  69. print("<table width='100%' class='tab_lista' cellspacing='0' cellpadding='0'>");
  70. print("<tr>");
  71. print("<td class='tab_lista_nag' width='50px'><b>#</b></td>");
  72. if ($row['lista_aktywna'] == 'no') { }
  73. else {
  74. print("<td class='tab_lista_nag' width='50px'>Trend</td>");
  75. }
  76. print("<td class='tab_lista_nag'>Utwór</td>");
  77. print("<td class='tab_lista_nag' width='50px'>Ostatnio</td>");
  78. print("<td class='tab_lista_nag' width='50px'>Tydzień</td>");
  79. print("<td class='tab_lista_nag' width='50px'>Video</td>");
  80. print("<td class='tab_lista_nag' width='70px'>Głosuj</td>");
  81. print("</tr>");
  82. //LISTA PASYWNA LUB AKTYWNA_____________________________________
  83. if ($row['lista_aktywna'] == 'no') {
  84. $akcja= "";
  85. } else {
  86. $akcja= "glosy DESC,";
  87. }
  88. //LISTA PASYWNA LUB AKTYWNA_____________________________________
  89. //ILOSC UTWOROW NA LISCIE_________________
  90. $res=mysql_query("SELECT * FROM lista_ustawienia");
  91. $row=mysql_fetch_array($res);
  92. $limit_lista = $row['lista'];
  93. //ILOSC UTWOROW NA LISCIE_________________
  94. $q = mysql_query("SELECT * FROM lista_przebojow ORDER BY $akcja IFNULL(IF(poprzednio>0, poprzednio, 999999),999999) LIMIT $limit_lista");
  95. if(mysql_num_rows($q) < 1){
  96. print("<tr>");
  97. print("<td class='tab_ram_kom' colspan='7'><i><b>-- Brak utworów na liście przebojów --</b></i></td>");
  98. print("</tr>");
  99. //exit;
  100. } else {}
  101. $numeracja = 0;
  102. while($rekord = mysql_fetch_array($q)){
  103. print("<tr>");
  104. print("<td class='tab_lista_kom_1'>".++$numeracja."</td>");
  105.  
  106. if ($row['lista_aktywna'] == 'no') {} else {
  107. //TREND_________________
  108. if($rekord['tygodnie'] == 1) {
  109. print("<td class='tab_lista_kom' style='text-align: center; color: red;'>nowość</td>");
  110. } else {
  111. $trend = ($rekord['poprzednio']- (+$numeracja));
  112. if($trend > 0) {
  113. print("<td class='tab_lista_kom' style='text-align: center; font-size: 13px; color: green;'>+$trend</td>");
  114. } else if ($trend < 0){
  115. print("<td class='tab_lista_kom' style='text-align: center; font-size: 13px; color: red;'>$trend</td>");
  116. } else {
  117. print("<td class='tab_lista_kom' style='text-align: center; font-size: 13px; color: black;'>$trend</td>");
  118. }
  119. }
  120. }
  121. //PIOSENKA_________________________________
  122. print("<td class='tab_lista_kom' style='text-align: left; padding-left: 10px;'>".$rekord['piosenka']."</td>");
  123. //POPRZEDNIO_______________________________
  124. if($rekord['tygodnie'] == 1) {
  125. print("<td class='tab_lista_kom_1' width='50px'>---</td>");
  126. } else {
  127. print("<td class='tab_lista_kom_1' width='50px'>".$rekord['poprzednio']."</td>");
  128. }
  129. //ILE TYGODNI NA LISCIE____________________
  130. print("<td class='tab_lista_kom_1'style='font-size: 18px;' >".$rekord['tygodnie']."</td>");
  131. //TELEDYSK_________________________________
  132. print("<td class='tab_lista_kom' width='50px'><a class='youtube' href='".$rekord['teledysk']."?rel=0&amp;wmode=transparent' title='Obejrzyj teledysk Youtube - ".$rekord['piosenka']."'><img src='$BASEURL/images/play.png'></a></td>");
  133. //GLOSOWANIE_______________________________
  134. if ($row['glosowanie_blokuj'] == 'no') {
  135. print("<td class='tab_lista_kom'><img src='$BASEURL/images/closed.png' title='Głosowanie jest czasowo wyłączone'></td>");
  136. } else {
  137. print("<td class='tab_lista_kom'><input type='button' class='button' onclick=document.location='$BASEURL/lista_przebojow_display.php?action=glosuj&id=$rekord[id]' value='Głosuj'></td>");
  138. }
  139. print("</tr>");
  140. }
  141. print("</table>");
  142. // TABELA Z LISTA______________________________________________________________
  143.  
  144. stdfoot();
  145. ?>


Nie ukrywam, że moja wdzięczność byłaby ogromna, gdyby ktoś doświadczony podrzucił jakieś pomysły (rozsądne) staremu prykowi:)
Zdaję sobie sprawę, że nie ma doskonałego rozwiązania przed dublowaniem głosowania na ten sam utwór (przy otwartym pliku) przez tą samą osobę, ale może coś Wam rozsądnego wpadnie do głowy.
Bardzo chętnie poczytam jakie rozwiązania według WAS byłyby najrozsądniejsze.
A może nawet zapodacie gotowe rozwiązanie:)

Pozdrawiam Was serdecznie:)
casperii
musisz albo po adresie IP sprawdzać, chociaż jak ktoś ma zmienne to i tak to obejdzie lub poprzez zapisywanie SESSION.
rad11
1. Utworz sobie tabele w ktorej bedziesz zbierac klikniecia i sprawdzaj potem czy uzytkownik juz glosowal na ten utwor przyda Ci sie tu id_user, id_utworu no i data
2. Podobnie jak w 1 punkcie tylko sprawdzasz aktualna date z data w bazie i zliczasz ile juz uzytkownik glosowal danego dnia.
casperii
Cytat(rad11 @ 30.05.2015, 12:37:15 ) *
1. Utworz sobie tabele w ktorej bedziesz zbierac klikniecia i sprawdzaj potem czy uzytkownik juz glosowal na ten utwor przyda Ci sie tu id_user, id_utworu no i data
2. Podobnie jak w 1 punkcie tylko sprawdzasz aktualna date z data w bazie i zliczasz ile juz uzytkownik glosowal danego dnia.


@rad11 to nie ma być dla użytkowników zarejestrowanych przecież. Ewentualnie może sobie stworzyć w bazie tymczasowa tabele gdzie będzie wpisywać IP usera i przy ponownym głosowaniu by sprawdzać IP z datą i liczbą oddanych głosów.
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.