Chartsystem
Einleitung
Dieses Projekt beschäftigt sich mit er erstellung eines Votesystems für Musikcharts. Dabei kann man über die Internetseite abstimmen. Das ganze kann vom Homepagebetreiber entsprechend verwaltet werden.
Testumgebung & Anwender
Wer will kann das mal ausprobieren. Das Design müssen sich interressenten gegebenenfalls selbst erstellen.
Im Unterordner test kann man sich den Script in Funktion ansehen. Das Passwort für den Admin-Bereicht ist admin.
Quelltext
config.php
Es ist empfehlenswert diese Datei config.php entsprechend zu schützen, da darin Passwörter und zugangsdaten gespeichert sind. Die Datei enthält folenden Code:
<?
$db_server = ""; //SQL-Server
$db_name = ""; //Datenbankname
$db_user = ""; //MySQL-Username
$db_passwort = ""; //MySQL-Passwort
$db = @MYSQL_CONNECT($db_server,$db_user,$db_passwort) or
die ("Konnte keine Verbindung zur Datenbank herstellen");
$db_check = @MYSQL_SELECT_DB($db_name,$db);
$adminpw=""; //Admin-Passwort
$schluessel="h36dgezsk62ns";
?>
In die Anführungszeichen bei $db_server, $db_name, $db_user, $db_passwort und $adminpw müssen jeweils die Angaben eingetragen werden und der Schlüssel muss geändert werden.
index.php
Außerdem muss die Datei index.php mit folgendem Inhalt erstellt werden:<?php include ('config.php'); $id = $_GET['id']; $action = $_GET['action']; $order = $_GET['order']; $key = $_GET['key']; if($key="") { $key=$_POST["key"]; } if($order=="") { $order="votes"; } //sagt, was er machen soll, wenn kein Order angegeben ist. // Wenn keine Aktion angegeben ist --------- if(empty($action)) { echo "<div align=\"center\"><a href=\"?order=date\">Nach eintragsdatzum sortieren</a> | <a href=\"?order=name\">Nach Titel sortieren</a> | <a href=\"?order=inter\">Nach Interpret sortieren</a> | <a href=\"?order=votes\">Nach Meinungen sortieren</a> | <a href=\"?order=top10\">Top 10</a></div>"; if($order == "name") { $sql = mysql_query("SELECT ID, Name, Interpreter FROM charts ORDER BY Name"); } if($order == "inter") { $sql = mysql_query("SELECT ID, Name, Interpreter FROM charts ORDER BY Interpreter"); } elseif($order == "date") { $sql = mysql_query("SELECT ID, Name, Interpreter FROM charts ORDER BY Date DESC"); //nach Datum sortieren } elseif($order == "votes") { $sql = mysql_query("SELECT ID, Name, Interpreter FROM charts ORDER BY Voteschnitt DESC"); } elseif($order == "top10") { $sql = mysql_query("SELECT ID, Name, Interpreter FROM charts ORDER BY Voteschnitt DESC LIMIT 10"); } while($row = mysql_fetch_object($sql)) { $id = $row->ID; $name = $row->Name; $in = $row->Interpreter; echo "<br><b><a href=\"?action=see&id=".$id."\">".$name."</a></b> ".$in; } echo "<br><br><br><a href=\"?action=admin\">Admin-Panel</a>"; } // Administrator-Bereich ------------ elseif($action == "admin") { if(isset($HTTP_POST_VARS['log'])) { $pass = $HTTP_POST_VARS['Pass']; if($pass == $adminpw) { /*Adminbereich*/ $sql = mysql_query("SELECT ID, Name, Interpreter, Text, Voteschnitt FROM charts ORDER BY Votes DESC LIMIT 10"); echo "<table width=\"100%\" border=\"0\"> <tr> <td width=\"25%\"><b>Title</b></td> <td width=\"25%\"><b>Interpret</b></td> <td width=\"25%\"><b>Bewertung</b></td> <td width=\"25%\"><b>Löschen</b></td> </tr>"; while($row = mysql_fetch_object($sql)) { $songid = $row->ID; $name = $row->Name; $in = $row->Interpreter; $votes = $row->Voteschnitt; echo "<tr> <td width=\"25%\">".$name."</td> <td width=\"25%\">".$in."</td> <td width=\"25%\">".$votes."</td> <td width=\"25%\"><a href=\"?action=delete&key=$schluessel&id=".$songid."\">DELETE</a></td> </tr>"; } echo "</table>"; ?> <form method="post" action="?action=add"> <h3>Neues Lied</h3> <input type="hidden" name="key" value="<?php echo $schluessel; ?>"> Titel: <input type="text" name="name"><br> Interpret: <input type="text" name="inter"><br> Text: <textarea name="text"></textarea><br> <input type="submit" name="senden"> <?php /*Adminbereich-ende*/ } else { echo "Das Passwort ist Falsch!"; echo "<b>Neu eingeben:</b><br><form method=\"post\" action=\"?action=admin\"> User: admin<br> Passwort: <input type=\"text\" name=\"Pass\"> <input type=\"submit\" name=\"log\">"; } } else { echo "<form method=\"post\" action=\"?action=admin\"> User: admin<br> Passwort: <input type= ext\" name=\"Pass\"> <input type=\"submit\" name=\"log\">"; } } // Lied ansehen -------- elseif($action == "see") { $sql = mysql_query("SELECT ID, Name, Interpreter, Text, Voteschnitt FROM charts WHERE ID = '$id' ORDER BY Votes DESC LIMIT 10"); while($row = mysql_fetch_object($sql)) { $name = $row->Name; $in = $row->Interpreter; $text = $row->Text; $votes = $row->Voteschnitt; ?> Liedername: <?php echo $name; ?> <br> Interpreter: <?php echo $in; ?><br> Gesamtvote: <?php echo $votes; ?><br><br> Liedertext: <?php echo $text; ?><br> <br><form method="post" action="index.php?action=vote&id=<?php echo $id; ?>"> <select name="lol"> <option value="5">5 -> Spitze</option> <option value="4">4</option> <option value="3" selected>3</option> <option value="2">2</option> <option value="1">1 -> Man braucht nen Waffenschein</option> </select> <input type="submit" value="Voten"></form> <br><br><br><a href="index.php">Zurück</a> <?php } } // Vote speichern ----------------- elseif($action == "vote") { $vote = $HTTP_POST_VARS['lol']; mysql_query("UPDATE charts SET Votes = Votes + '$vote' WHERE ID = '$id'"); mysql_query("UPDATE charts SET Voters = Voters + '1' WHERE ID = '$id'"); $sql = mysql_query("SELECT Votes, Voters FROM charts WHERE ID = '$id' LIMIT 1"); while($row = mysql_fetch_object($sql)) { $countvote[votes] = $row->Votes; $countvote[voters] = $row->Voters; } if($countvote[voters]!=0) { $countvote[durchschnitt] = $countvote[votes] / $countvote[voters]; } mysql_query("UPDATE charts SET Voteschnitt = $countvote[durchschnitt] WHERE ID = '$id'"); echo "<div align=\"center\">Vote beendet</div>"; echo "<meta http-equiv=\"refresh\" content=\"2 url=index.php?action=see&id=".$id."\">"; } // Lied löschen ------------------- elseif($action == "delete") { if($_POST["key"] == $schluessel OR $_GET["key"] == $schluessel) { $sql=mysql_query("DELETE FROM charts WHERE ID = '$id'"); if($sql) { echo "Löschen erfolgreich."; } else { echo "Löschen fehlgeschlagen."; } } else { echo "Schlüssel ist falsch."; } } // Lied hinzufügen ----------------- elseif($action=="add") { $datei="add-entry.txt"; if(!file_exists ($datei)) { echo "datei fehlt!"; $result = mysql_query("SELECT * FROM charts"); $id=mysql_num_rows($result); $fp = fopen($datei,"w"); flock($fp,2); fputs($fp,$id); flock($fp,3); fclose($fp); } else { $file=file($datei); $id=$file[0]; } echo $id; $exists=mysql_query("SELECT * FROM `charts` WHERE `ID`=$id LIMIT 1"); if(mysql_num_rows($exists)>0) { $id++; $fp = fopen($datei,"w"); flock($fp,2); fputs($fp,$id); flock($fp,3); fclose($fp); } if($_POST["key"] == $schluessel OR $_GET["key"] == $schluessel) { $name = $_POST['name']; $inter = $_POST['inter']; $text = $_POST['text']; $date=time(); $sql=mysql_query("INSERT INTO `charts` ( `ID` , `Name` , `Interpreter` , `Text` , `Votes` , `Date` ) VALUES ('$id', '$name', '$inter', '$text', '0', '$date');"); if($sql) { echo "Eintragen erfolgreich."; $id++; $fp = fopen($datei,"w"); flock($fp,2); fputs($fp,$id); flock($fp,3); fclose($fp); } else { echo "Eintragen fehlgeschlagen."; } } else { echo "Schlüssel ist falsch."; } } echo "<br><br><a href=\"index.php\">Hauptseite</a>"; ?>
MySQL
Zum schluss wird noch eine MySQL tabelle benötigt:CREATE TABLE `charts` (
`ID` int(5) NOT NULL,
`Name` varchar(20) NOT NULL,
`Interpreter` varchar(20) NOT NULL,
`Text` text NOT NULL,
`Votes` int(20) NOT NULL,
`Voters` int(20) NOT NULL,
`Voteschnitt` int(1) NOT NULL,
`Date` int(11) NOT NULL,
PRIMARY KEY (`ID`)
) TYPE=MyISAM;
Probleme
- Nach dem Löschen eines Titels funktioniert die Eintragefunktion nichtmehr. Das habe ich jetzt mit einer zusätzlichen Datei gelöst. es besteht aber immernoch das Problem, dass man den neuen Eintrag eventuell mehrmals senden muss, bevor er eingetragen wird.
Mitwirkende
Einen herzlichen Dank ann alle, die bei der Erstellung dieses Scriptes geholfen haben.
Zum einen danke ich kai008, der den Script geschrieben hat und zusammen mit mir verbessert hat und geholfen hat Fehler zu finden und zu korrigieren.
Zum anderen danke ich hansolo, der die Idee hat und die antreibende Kraft bei der Fehlersuche war, und viele Fehler oder Probleme entdeckt hat.
Der Idee und die Zusammenkunft erfolgte über den Foreneintrag Suche ein PHP Chart system. im Forum von lima-city.de



