Hoi allemaal,

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:


<audio src="http://www.radiostereo.nl/paginas/muziek/afspeellijsten/html5.php" controls="controls" autoplay="autoplay" loop="loop">
</audio>


En hier de code voor de dynamische playlist


<?

// 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("&amp;", "&", $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
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
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



Sorry, maar het heeft niet geholpen..
nog meer ideën ?



[size=xsmall]Toevoeging op 29/01/2011 09:32:32:[/size]

- 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)

het gaat erom dat je gewoon goede foutafhandeling gebruikt.
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)


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'.

Niet alleen de foutafhandeling is op vakantie, ook de insping gedeeltes...

Voorbeeld van een nette query:

<?php
$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...

Reageren