Chartsystem

Erstellt am: Dienstag, 30. Mai 2006, 00:00

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

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