PHP - Charts abstimmen

Zneaf

Erfahrenes Mitglied
Hallo zusammen ;)

auf meiner Webseite gibt es eine sogenannte Tracklist, die sowohl Titel als auch Interpret der zuletzt gespielten Songs enthält, sodass jeder Benutzer genau sehen kann, wann welcher Song gespielt wurde.

Das funktioniert auch einwandfrei :)

Allerdings möchte ich diese Tracklist um eine Funktion erweitern:
Es soll allen eingeloggten Benutzern möglich sein, einen Song (oder auch mehrere...je nachdem, welche Songs dem jeweiligen Benutzer gefallen) zu den Charts hinzu zu fügen.
D.h. die eingeloggten Benutzer sollen die Möglichkeit erhalten, die Charts abzustimmen.

Vorgestellt hatte ich mir, dass man Datenbanken und User-ID's mit einbeziehen / verwenden kann, um alle "Schummel-versuche" zu beseitigen (da die Benutzer für diese Funktion ja eingeloggt sein müssen).


Allerdings weiß ich noch nicht so recht, ob das so umsetzbar ist bzw. wie man es am besten umsetzen könnte.

Meine Fragen:

1. Habt ihr vielleicht Ideen / Lösungsvorschläge / Beispiele, wie das ganze am besten umzu setzen ist?
2. Ist es möglich, das ganze so umzusetzen, wie ich mir das vorgstellt habe (mit DB usw.)?


Über Eure Hilfe würde ich mich sehr freuen =)

Vielen Dank im Voraus =)

LG Zneaf ^^
 
Hey Zneaf

Es soll allen eingeloggten Benutzern möglich sein, einen Song (oder auch mehrere...je nachdem, welche Songs dem jeweiligen Benutzer gefallen) zu den Charts hinzu zu fügen.
D.h. die eingeloggten Benutzer sollen die Möglichkeit erhalten, die Charts abzustimmen.

Sollen sie auch bestimmte Songs die nicht aufgelistet sind hinzufügen können oder nur aufgelistete?


Ist es möglich, das ganze so umzusetzen, wie ich mir das vorgstellt habe (mit DB usw.)?

Natürlich auch wenn die Umsetzung je nachdem wie du es machen möchtest vielleicht nicht sehr einfach wird.


Habt ihr vielleicht Ideen / Lösungsvorschläge / Beispiele, wie das ganze am besten umzu setzen ist?


beantworte mir meine Frage zu deiner Vorstellung und dann weiß ich auch genau wie ich überlegen muss..


lG
Finbey
 
Mach eine temporäre Tabelle.. Bei jedem Klick auf einen Wunschtitel werden Song_ID, User_ID und Timestamp gespeichert. Um zB zu vermeiden, dass User immer wieder den gleichen Song voten, lässt Du diese Tabelle beim Start der Seite auslesen (mit "WHERE user_ID=sessionbla") und lässt bei gefundenen Songs Checkbox/Votebutton weg. Da ist noch genug Platz für zeitliche Begrenzungen und andere Ideen.

(A) Du erweiterst die SQL-Abfrage um eine zeitliche Komponente. Nur wenn der Vote innerhalb der letzten 24std war, wird der Button ausgeblendet.
(B) diese "temporäre" Tabelle habe ich so genannt, weil man alle Einträge älter als zB 1 Monat löschen lässt. So hat man (1) Charts über diesen Zeitraum (COUNT() und ORDER BY()) und (2) verschlankt sich diese Tabelle von selber..

mfg chmee
 
Hey zusammen =)

@finbey: also voten soll man immer nur für die Songs können, die in der Tracklist aufgeführt sind.

Allgemeine Info:
Derzeit habe ich das Song-Limit für die Tracklist auf 50 festgelegt. D.h. sobald ein neuer Song in die Tracklist eingetragen wird, fällt der älteste Song heraus (der Datensatz wird aus der DB gelöscht). Die Songs der Tracklist lasse ich aus der DB auslesen und per while-schleife ausgeben.

@chmee: Den einen Teil Deines Vorschlags kann ich nachvolziehen. Das mit der zeitlichen Komponente gefällt mir aber nicht so gut (ist ja aber auch kein muss), auch wenn das grundsätzlich eine gute Idee ist. Das mit der Song_ID wird ja dann warscheinlich (glaube ich) nicht so funktionieren, da diese ja variiern kann (wegen der Maximal-Song-Anzahl von 50). Den Teil mit der "Tabelle beim Start der Seite auslesen lassen" verstehe ich leider nicht so ganz bzw. weiß nicht, wie ich diesen umsetzen könnte.

Ich hoffe, ihr helft mir weiterhin bei meinem Problem =)

Falls ihr den bisherigen Code (oder bloß einen bestimmten Teil davon) der Tracklist benötigt, sagt bitte bescheid.

Vielen Dank ;)

LG Zneaf :)
 
Anstatt einer Zahl namens ID soll es einfach etwas Eindeutiges des Songs sein - von mir aus eine Kombination aus Interpret und Titel.

Angenommen, Du arbeitest mit Sessions (wegen angemeldeter User) dann hast Du in den Sessionvariablen eine Userkennung (id oder nickname), welche beim Anklicken eines Votes mitgespeichert wird. Wird jene Seite geladen (und es existieren Sessiondaten), macht man erstmal eine Query, in der ausgelesen wird, was User X schon angeklickt hat. Daraus könntest irgend eine Regel erschaffen. Ob zeitliche Begrenzung oder maximale Anzahl von Votes etc pp. Der Kreativität sei freien Lauf gelassen.

mfg chmee
 
Ja irgendwie finde ich, dass chmee eigentlich schon alles gesagt hat ...
Ich hätte es so gemacht:

Eine neue Tabelle wird für das Voting erstellt

Jeder Track bekommt einen eindeutigen Wert zugewiesen

Wenn der User Voted wird in die Tabelle der eindeutige Wert des Tracks und bestimmte Userdaten
(User-Id oder so) gespeichert außerdem ein Timestamp...

Beim einloggen wird automatisch jeder Voting-Butten mit den schon in der Tabelle vorhandenen
Track-Daten ausgeblendet (Außer vielleicht wenn du machen möchtest dass amn alle x-Stunden für
nen Song voten kann).

Falls man seine Votes irgendwo aufrufen soll einfach eine Abfrage der Tabelle machen...
(vielleicht noch mit der Zeit [Tag-Datum-Uhrzeit] des Votes)

Du könntest (z.B mit nem Cronjob) auch dem User ne Benachrichtigung (mail, sms, etc.) schicken
wenn einer der Songs für die er gevoted hat gerade gespielt wird.


Also so hätte ich es jetzt gemacht (und chmee vllt. auch, da der Inhalt meines Posts ja Inhaltlich ähnlich wie seiner ist...)




Falls ihr den bisherigen Code (oder bloß einen bestimmten Teil davon) der Tracklist benötigt, sagt bitte bescheid.


Also ich brauche ihn nicht, da du ja eigentlich sehr treffend erklärt hast, wie deine List arbeitet....



Falls du noch mehr Ideen brauchst .. keine Zurückhaltung xD
 
Hey Leue =)

erstmal vielen Dank für eure Mühe ;)
Das ganze hat mir schonmal sehr viel weitergeholfen...das Konzept habe ich jetzt komplett verstanden ;)

Ich lasse das Thema hier erstmal offen, da ich mir sicher bin, dass ich mich bald wieder melde...
ich denke mal, dass es auch das eine oder andere Problem bei der Umsetzung des besprochenen geben könne :D

Ich hoffe ihr helft mir dann erneut bei Fragen / Problemen :)

Vielen Dank!

Bis bald ;)

LG Zneaf =)
 
Hallo zusammen :)

heute Vormittag hatte ich ein paar Stunden Zeit und habe folgendes Ergebnis erhalten:
PHP:
<?php
require_once("config3.php");

// Daten aus Datenbank abholen und absteigend nach id sortieren.
$sql = "SELECT
			*
		FROM
			tracklist
		ORDER BY id DESC";
$result = mysql_query($sql,$db);

while ($row = mysql_fetch_object($result)) {

	$day = $row->day;
	$month = $row->month;
	$year = $row->year;
	$time = $row->time;
	$remix = $row->remix;
	$sendung = $row->sendung;
	$von = $row->von;
	$interpret = $row->interpret;
	$title = $row->title;
	
	if($_SESSION['loggedIn'] == true){

          require_once("config3.php");

		// Daten aus Datenbank abholen und absteigend nach id sortieren.
		$sqlcharts = "SELECT 
						*
					  FROM
						charts
					  WHERE
						userid = '".$_SESSION['userid']."'
					  AND
						interpret = '".$interpret."'
					  AND
						title = '".$title."'";

		$resultcharts = mysql_query($sqlcharts,$db);

		if( mysql_num_rows($resultcharts) != 1 ){
			$charts = "<form action=".$_SERVER['PHP_SELF']." method=\"post\"><input type=\"submit\" name=\"submit\" value=\"Charts\"></form>";
		}
		
		if ( array_key_exists('submit', $_POST) ) {
			$time = new DateTime();

			require_once("config3.php");

			$sqlinsertcharts = "INSERT INTO charts
						(
						interpret, title, userid, time
						) VALUES (
						'". mysql_escape_string($interpret) ."',
						'". mysql_escape_string($title) ."',
						'". mysql_escape_string($userid) ."',
						'". mysql_escape_string($time) ."'
						)";
		}

		// SQL-Anweisung an die DB schicken und im Fehlerfall eine Meldung ausgeben
		$resultinsertcharts = mysql_query($sqlinsertcharts,$db);
	}

	if ($remix =="") {
		$remix = "-";
	}else{
		$remix = $remix;
	}
         
              // Ausgabe:
	echo "<table border=\"0\" width=\"500\" cellspacing=\"0\" cellpadding=\"0\">
			<tr valign=\"top\" width=\"500\" height=\"30\" style=\"background-image: url(images/bg_top.jpg); background-repeat:non repeat;\">
				<td height=\"30\" valign=\"middle\"><font face=\"Arial\" color=\"#FFFFFF\" size=\"-1\">&nbsp;&nbsp;<b>$interpret</b> - $title</font></td>
			</tr>
		</table>
		<table border=\"0\" width=\"500\" cellspacing=\"0\" cellpadding=\"0\">
			<tr valign=\"top\" width=\"500\" style=\"background-image: url(images/bg_middle.jpg); background-repeat:non repeat;\">
				<td><font face=\"Arial\" color=\"#333333\" size=\"-1\">&nbsp;&nbsp;<i>$time Uhr Gespielt von $von ($day.$month.$year)</i></font></td>
			</tr>
			<tr valign=\"top\" width=\"500\" style=\"background-image: url(images/bg_middle.jpg); background-repeat:non repeat;\">
				<td><font face=\"Arial\" color=\"#333333\" size=\"-1\">&nbsp;&nbsp;<b>Remix:</b> $remix</font></td>
			</tr>
			<tr valign=\"top\" width=\"500\" style=\"background-image: url(images/bg_middle.jpg); background-repeat:non repeat;\">
				<td><font face=\"Arial\" color=\"#333333\" size=\"-1\">&nbsp;&nbsp;<b>Sendung:</b> $sendung</font></td>
			</tr>
			<tr valign=\"middle\" width=\"500\" height=\"35\" style=\"background-image: url(images/bg_middle.jpg); background-repeat:non repeat;\">
				<td>
					<font face=\"Arial\" color=\"#333333\" size=\"-1\">&nbsp;$charts</font>
				</td>
			</tr>
			<tr valign=\"top\" width=\"500\" height=\"5\" style=\"background-image: url(images/bg_bottom.jpg); background-repeat:non repeat;\">
				<td></td>
			</tr>
		</table>";
}
?>

Damit habe ich folgendes erreicht:

1. Der Button zum Abstimmen wird nur den Benutzern angezeigt, die gerade online sind.
2. Es wird überprüft, ob bei den jeweiligen Songs bereits gevotet wurde (nur wenn nicht gevotet wurde, erscheint der Button).

Probleme:
1. Es wird kein Datensatz in die DB geschrieben, wenn man auf den "Charts"-Button klickt.
2. Ich möchte anstelle des normalen Buttons ein Bild als Button verwenden. Ist das überhaupt möglich? Wenn ja, könnt ihr mir sagen wie das funktioniert oder wo ich das nachlesen kann? =)

Ich hoffe ihr könnt mir dabei helfen, den Fehler zu finden....ich werd schon ganz verrückt :(

Vielen Dank :)

LG Zneaf =)
 
Zuletzt bearbeitet:
füge mal nach deinen values vor dem abschließenden semikolon(;)

Code:
or die (mysql_error());

ein und sag mir ob es nen error gibt ...

lG
 
Hey ;)

also ich hab das mal gemacht was du gesgat hast, aber es hat sich nichts verändert und es wurde auch keinerlei error-text angezeigt :(

Wie kann ich denn überprüfen, ob die variablen leer oder gefüllt sind?

Danke für deine Hilfe ;)

LG Zneaf =)
 
Zurück