Dynamische muziekspeler met html5 en php script
Voor mijn muziek website ben ik bezig met een php script in combinatie met het html5 audio element om een dynamische muziekspeler + playlist te maken.
Hier de code voor de html5 audio speler:
Code (php)
1
2
2
<audio src="http://www.radiostereo.nl/paginas/muziek/afspeellijsten/html5.php" controls="controls" autoplay="autoplay" loop="loop">
</audio>
</audio>
En hier de code voor de dynamische playlist
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?
// Verbinding maken met de database
mysql_connect("***","***","***");
mysql_select_db("***");
// Kijken of er een nummer in de playlist_tabel staat
$sql = "SELECT muziek_id FROM playlist ORDER BY id ASC";
$query = mysql_query($sql);
$rij = mysql_fetch_object($query);
$muziek_id = htmlspecialchars($rij->muziek_id);
// Zo ja, dan informatie uit de muziek_tabel halen
$sql = "SELECT * FROM `muziek` WHERE id='$muziek_id'";
$query = mysql_query($sql);
$rij = mysql_fetch_object($query);
$id = htmlspecialchars($rij->id);
$artiest = htmlspecialchars($rij->artiest);
$titel = htmlspecialchars($rij->titel);
$link = htmlspecialchars($rij->link);
$album = htmlspecialchars($rij->album);
// Nummer uit de playlist_tabel verwijderen
$sql = "DELETE FROM playlist WHERE muziek_id=$muziek_id";
$query = mysql_query($sql);
// Aantal keer afgespeeld van het gekozen nummer verhogen met 1
mysql_query("UPDATE muziek SET afgespeeld=afgespeeld + 1 WHERE id= '$id' ");
// Wanneer er geen nummers in de playlist_tabel staan een random nummer kiezen
if(!$link){
// Aantal nummers tellen
$sql = "SELECT id FROM `muziek` ORDER BY id DESC ";
$query = mysql_query($sql);
$rij = mysql_fetch_object($query);
$tot = htmlspecialchars($rij->id);
// Random nummer bepalen
$random = rand(1, $tot);
// Informatie uit de muziek_tabel halen
$sql = "SELECT * FROM `muziek` WHERE id='$random'";
$query = mysql_query($sql);
$rij = mysql_fetch_object($query);
$id = htmlspecialchars($rij->id);
$artiest = htmlspecialchars($rij->artiest);
$titel = htmlspecialchars($rij->titel);
$link = htmlspecialchars($rij->link);
$album = htmlspecialchars($rij->album);
}
// Speciale characters in de link omzetten
$link = str_replace("&", "&", $link);
$link = str_replace(" ", "%20", $link);
$link = str_replace("é", "%c3%a9", $link);
//Header
header('Content-type: audio/mpeg');
header('Content-Length: '.filesize($link));
header("Expires: -1");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
readfile($link);
?>
// Verbinding maken met de database
mysql_connect("***","***","***");
mysql_select_db("***");
// Kijken of er een nummer in de playlist_tabel staat
$sql = "SELECT muziek_id FROM playlist ORDER BY id ASC";
$query = mysql_query($sql);
$rij = mysql_fetch_object($query);
$muziek_id = htmlspecialchars($rij->muziek_id);
// Zo ja, dan informatie uit de muziek_tabel halen
$sql = "SELECT * FROM `muziek` WHERE id='$muziek_id'";
$query = mysql_query($sql);
$rij = mysql_fetch_object($query);
$id = htmlspecialchars($rij->id);
$artiest = htmlspecialchars($rij->artiest);
$titel = htmlspecialchars($rij->titel);
$link = htmlspecialchars($rij->link);
$album = htmlspecialchars($rij->album);
// Nummer uit de playlist_tabel verwijderen
$sql = "DELETE FROM playlist WHERE muziek_id=$muziek_id";
$query = mysql_query($sql);
// Aantal keer afgespeeld van het gekozen nummer verhogen met 1
mysql_query("UPDATE muziek SET afgespeeld=afgespeeld + 1 WHERE id= '$id' ");
// Wanneer er geen nummers in de playlist_tabel staan een random nummer kiezen
if(!$link){
// Aantal nummers tellen
$sql = "SELECT id FROM `muziek` ORDER BY id DESC ";
$query = mysql_query($sql);
$rij = mysql_fetch_object($query);
$tot = htmlspecialchars($rij->id);
// Random nummer bepalen
$random = rand(1, $tot);
// Informatie uit de muziek_tabel halen
$sql = "SELECT * FROM `muziek` WHERE id='$random'";
$query = mysql_query($sql);
$rij = mysql_fetch_object($query);
$id = htmlspecialchars($rij->id);
$artiest = htmlspecialchars($rij->artiest);
$titel = htmlspecialchars($rij->titel);
$link = htmlspecialchars($rij->link);
$album = htmlspecialchars($rij->album);
}
// Speciale characters in de link omzetten
$link = str_replace("&", "&", $link);
$link = str_replace(" ", "%20", $link);
$link = str_replace("é", "%c3%a9", $link);
//Header
header('Content-type: audio/mpeg');
header('Content-Length: '.filesize($link));
header("Expires: -1");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
readfile($link);
?>
Nu werkt het script redelijk goed.
Behalve wanneer ik een nummer aan de playlist toevoeg.
In plaats van dat het nummer in de playlist wordt afgespeeld wordt er toch een random nummer afgespeeld.
Nu lijkt het dus dat het eerste gedeelte van het script niet werkt
(waar het nummer uit de playlist wordt gekozen)
maar wanneer ik de onderstaande regels verwijder:
// Nummer uit de playlist_tabel verwijderen
$sql = "DELETE FROM playlist WHERE muziek_id=$muziek_id";
$query = mysql_query($sql);
wordt het nummer uit de playlist WEL afgespeeld.
Maar dan heb ik dus het probleem dat het nummer oneindig gekozen blijft worden, omdat het nummer niet wordt verwijdert uit de playlist.
Iemand enig idee hoe dit kan?
Je kunt het script proberen door naar deze pagina te gaan met bijvoorbeeld google chrome http://www.radiostereo.nl?frame
En dan nummers toe te voegen aan de playlist
Bedankt alvast!
Stefan
Gewijzigd op 27/01/2011 23:02:17 door Stefan Vermunt
$sqlid
$queryid
en daarna
$sqlinfo
$queryinfo
want nu gebruik je 2x dezelfde, dit werkt niet goed denk ik,
gebruik liever ook geen * geef aan wat je wilt ophalen zoals bij de 1e query
edit
je gebruikt zelfs 4x $sql en $query, probeer ze allemaal eens een aparte naam te geven
Gewijzigd op 28/01/2011 10:06:57 door gerhard l
En is de foutafhandeling op vakantie ofzo?
Gerhard lubbers op 28/01/2011 10:04:43:
probeer eens de $sql's en $query's een verschillende namen te geven zoals
$sqlid
$queryid
en daarna
$sqlinfo
$queryinfo
want nu gebruik je 2x dezelfde, dit werkt niet goed denk ik,
gebruik liever ook geen * geef aan wat je wilt ophalen zoals bij de 1e query
edit
je gebruikt zelfs 4x $sql en $query, probeer ze allemaal eens een aparte naam te geven
$sqlid
$queryid
en daarna
$sqlinfo
$queryinfo
want nu gebruik je 2x dezelfde, dit werkt niet goed denk ik,
gebruik liever ook geen * geef aan wat je wilt ophalen zoals bij de 1e query
edit
je gebruikt zelfs 4x $sql en $query, probeer ze allemaal eens een aparte naam te geven
Sorry, maar het heeft niet geholpen..
nog meer ideën ?
Toevoeging op 29/01/2011 09:32:32:
- Aar - op 28/01/2011 10:20:46:
En is de foutafhandeling op vakantie ofzo?
Ik heb de foutmeldingen weggelaten omdat de header anders niet meer werkt..
(header allready send)
Zolang je geen foutmeldingen ziet, zien je ook geen 'header already sent'-error.
Stefan Vermunt op 29/01/2011 09:31:39:
Ik heb de foutmeldingen weggelaten omdat de header anders niet meer werkt..
(header allready send)
(header allready send)
Struisvogelpolitiek: wat ik niet zie, is er niet....
Zoals Aar ook aangeeft: zorg voor goede foutafhandeling en je hebt geen foutmeldingen en dus geen probleem met 'headers already sent'.
Voorbeeld van een nette query:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$sql =
"
SELECT
veld1,
veld2,
veld3
FROM
tabel
WHERE
veld1 = '".mysql_real_escape_string( $_GET['veld'] )."'
";
?>
$sql =
"
SELECT
veld1,
veld2,
veld3
FROM
tabel
WHERE
veld1 = '".mysql_real_escape_string( $_GET['veld'] )."'
";
?>
Mits je dat doet gaat het er al een stuk beter uitzien, voeg dan nog foutafhandeling toe, en laat dat htmlspecialchars is achterwege... Naar mijn idee is dat echt een overbodige functie, zeker wat id's betreft...