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ć

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ę:
CREATE TABLE IF NOT EXISTS `lista_przebojow` ( `id` int(20) NOT NULL AUTO_INCREMENT, `piosenka` varchar(300) NOT NULL DEFAULT '', `teledysk` varchar(500) NOT NULL DEFAULT '', `poprzednio` tinyint(4) NOT NULL, `tygodnie` tinyint(4) NOT NULL, `glosy` tinyint(4) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
a sam plik ma taką strukturę (część pliku odpowiadająca za głosowanie):
<?php require_once "include/struktura.php"; dbconn_movie(); //stdhead(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Lista Przebojów</title> <link rel="stylesheet" href="styles/style.css" type="text/css" /> <!-------- dla Youtube trailer --> <link rel="stylesheet" href="colorbox.css" /> <script src="jquery.min.js" type="text/javascript" charset="utf-8"></script> <script src="jquery.colorbox.js" type="text/javascript" charset="utf-8"></script> <script> $(document).ready(function(){ //Examples of how to assign the Colorbox event to elements $(".youtube").colorbox({iframe:true, innerWidth:740, innerHeight:490}); //Example of preserving a JavaScript event for inline calls. $("#click").click(function(){ $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here."); return false; }); }); </script> <!-------- dla Youtube trailer --> </head> <body> <? $action = isset($_POST['action']) ? htmlspecialchars($_POST['action']) : (isset($_GET['action']) ? htmlspecialchars($_GET['action']) : ''); if ($action) stderr("Błąd", "Nieprawidłowa akcja"); else { switch ($action) { //GLOSOWANIE______________________________________ case "glosuj": $id=$_GET['id']; $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>'); if($q){ 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>"); } else{ } die; break; //GLOSOWANIE______________________________________ } } //TABELA Z LISTA______________________________________________________________ if ($row['lista_aktywna'] == 'no') { } else { } //LISTA PASYWNA LUB AKTYWNA_____________________________________ if ($row['lista_aktywna'] == 'no') { $akcja= ""; } else { $akcja= "glosy DESC,"; } //LISTA PASYWNA LUB AKTYWNA_____________________________________ //ILOSC UTWOROW NA LISCIE_________________ $limit_lista = $row['lista']; //ILOSC UTWOROW NA LISCIE_________________ $q = mysql_query("SELECT * FROM lista_przebojow ORDER BY $akcja IFNULL(IF(poprzednio>0, poprzednio, 999999),999999) LIMIT $limit_lista"); print("<td class='tab_ram_kom' colspan='7'><i><b>-- Brak utworów na liście przebojów --</b></i></td>"); //exit; } else {} $numeracja = 0; if ($row['lista_aktywna'] == 'no') {} else { //TREND_________________ if($rekord['tygodnie'] == 1) { } else { $trend = ($rekord['poprzednio']- (+$numeracja)); if($trend > 0) { print("<td class='tab_lista_kom' style='text-align: center; font-size: 13px; color: green;'>+$trend</td>"); } else if ($trend < 0){ print("<td class='tab_lista_kom' style='text-align: center; font-size: 13px; color: red;'>$trend</td>"); } else { print("<td class='tab_lista_kom' style='text-align: center; font-size: 13px; color: black;'>$trend</td>"); } } } //PIOSENKA_________________________________ print("<td class='tab_lista_kom' style='text-align: left; padding-left: 10px;'>".$rekord['piosenka']."</td>"); //POPRZEDNIO_______________________________ if($rekord['tygodnie'] == 1) { } else { } //ILE TYGODNI NA LISCIE____________________ //TELEDYSK_________________________________ print("<td class='tab_lista_kom' width='50px'><a class='youtube' href='".$rekord['teledysk']."?rel=0&wmode=transparent' title='Obejrzyj teledysk Youtube - ".$rekord['piosenka']."'><img src='$BASEURL/images/play.png'></a></td>"); //GLOSOWANIE_______________________________ if ($row['glosowanie_blokuj'] == 'no') { print("<td class='tab_lista_kom'><img src='$BASEURL/images/closed.png' title='Głosowanie jest czasowo wyłączone'></td>"); } else { 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>"); } } // TABELA Z LISTA______________________________________________________________ stdfoot(); ?>
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:)