Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Site Web > PHP > Systèmes complets > Lecture du tutoriel

Gérer la playlist du dewplayer en ligne

Avatar
Auteur : Jerry Wham
Créé : le 02/11/2007 15:48:40
Modifié : le 16/02/2008 15:47:03
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Salut les Zér0s.

Il existe sur le net de nombreux players mp3. Il y en a un que j'affectionne tout particulièrement car il est léger et simple d'utilisation, j'ai nommé le dewplayer (sélectionnez la version multi). Le seul défaut que je lui connaisse est qu'on ne peut pas modifier facilement la playlist en ligne. Il faut forcément entrer dans le code de la page, ce qui n'est pas génial à la longue. Et puis un jour, je suis tombé sur cet article, sur le site all html. Le souci est que la solution donnée ne fonctionne pas très efficacement. J'ai donc pris la liberté de modifier le code pour pouvoir gérer la playlist directement depuis la partie administration d'un site.

Pour suivre ce tuto, il vous faudra connaître le XHTML, le PHP et le SQL et avoir des notions de javascript (ou ici).
Sommaire du chapitre :

Le principe de fonctionnement

On va distinguer plusieurs parties :


Les morceaux seront importés via la page d'import et leur titre sera enregistré dans une base de données avec un identifiant différent pour chaque morceau.
La page de gestion nous permettra de déplacer les morceaux dans la playlist, de leur attribuer une catégorie ou de les supprimer de la base (je n'ai pas codé de système permettant d'effacer le fichier mp3 sur le serveur, mais ceux qui le veulent pourront aisément le faire).
La page pour le lecteur affichera le lecteur et la playlist en dessous. Il suffira de cliquer sur le titre d'un morceau pour changer celui en cours de lecture. Le nom du morceau en cours s'affichera entre le lecteur et la playlist.
Petit défaut : si on utilise les flèches du lecteur, le nom du morceau en cours ne change pas :-° . Mais il suffit d'ouvrir une fenêtre de taille réduite et de faire en sorte que les flèches ne puissent pas être vues.
Personnellement, je préfère dédier une page au player car cela permet de pouvoir naviguer tout en ayant de la musique (si cette page est ouverte dans une autre fenêtre grâce au JavaScript).

Enfin, le JavaScript est là aussi pour changer le morceau en cours de lecture sans recharger la page.

Vous pouvez voir le player en fonctionnement en visitant cette page (aucun commentaire quant aux morceaux. Merci. :p ).

La partie administration

La base de données



Je ne vais pas m'étendre sur la base de données qui est très simple. Elle ne contient que 3 champs : l'identifiant, la catégorie et le titre du morceau.

Code : SQL
1
2
3
4
5
6
CREATE TABLE `sons` (
  `id_son` int(11) NOT NULL AUTO_INCREMENT,
  `categorie` tinytext NOT NULL,
  `fichier_son` text NOT NULL,
  KEY `id_son` (`id_son`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;


La page d'importation des morceaux



Je vous donne le code que je vais commenter au fur et à mesure. Pour simplifier et éviter des redondances dans le code, j'ai placé l'entête de ma page (partie depuis le Doctype jusqu'à la balise <body> incluse) dans une fonction appelée haut(). Cette fonction sera appelée sur toutes nos pages. N'oubliez donc pas de l'inclure avant de l'appeler.

Je vous donne un exemple basique de cette fonction. À vous de l'étoffer comme bon vous semble.


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
<?php
function haut($titrepage)
{
echo'
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
   <head>
                <title>'.$titrepage.'</title>
                
                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                <meta name="keywords" content=""/>
                <meta name="description" content=""/>
                <meta name="robots" content="index,follow"/>
                <meta name="author" content=""/>
                <meta name="contact" content=""/>
                
        <!-- Lien vers la favicon -->
                <link rel="shortcut icon" type="image/x-icon" href="images/design/icone.ico"/>
                
        <!-- Ci-dessous le design "par défaut" du site  -->
                <link rel="stylesheet" media="screen" type="text/css" title="design" href="css/design_par_defaut.css" />
 
        <!-- Ci-dessous les designs alternatifs-->      
                <link rel="alternate stylesheet" media="screen" type="text/css" title="print" href="css/print.css" />
 
        <!-- Javascripts-->
                
                <script type="text/javascript" src="js/fonction_nouvellefenetre.js"></script>
                <script type="text/javascript" src="js/controle_player.js"></script>
 
   </head>
 
   <body>
   ';
}
?>


Même principe pour le bas de page :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
function bas()
{
 echo'
        <!-- Le pied de page -->
                <div id="pied_de_page"></div>
        </body>
</html>
';
}
?>


Voici donc le code de la page import_song.

Pour le fonctionnement de l'upload de fichiers par formulaire, je vous invite à lire l'excellent tuto de DHKold.


On peut diviser cette page en trois étapes :



Initiation des variables / fonctions



Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?php
//initialisation des variables
$titrepage= 'Envoi de fichier mp3';
 
require_once('fonctionconnexionbdd.php');
require_once('fonctionshautbas.php');
 
connexionbdd();
 
$extensions_ok = array('mp3'); //Pour être sûr que l'on importe uniquement des fichiers mp3
$dest_dossier = '../musique/'; //Le dossier de destination
?>



Affichage du formulaire par défaut



Je vous rappelle que c'est en fait la dernière partie du code (bien que son résultat s'affiche en premier).



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
<?php
else//À l'ouverture de la page, on affiche le formulaire
    {
     haut($titrepage);
     echo '
           <div id="import" style="margin-top:200px;">
           <h1><a href="index.php">'.$titrepage.'</a></h1>
           <p style="color:red;">Le fichier n\'est pas un fichier mp3, ou il y a eu un problème lors de l\'importation !</p>
               <form method="post" action="import_song.php" enctype="multipart/form-data" style="text-align:center;">
                    <p>
                    <label for="categorie">Spectacle:</label>
                    <select name="categorie" id="categorie">
                           <option value="pop">Musique Pop</option>
                           <option value="rock">Musique Rock</option>
                           <option value="classique">Musique Classique</option>
                     </select>
                     <label for="chanson">Chanson&nbsp;(Type&nbsp;.mp3&nbsp;uniquement)&nbsp;:</label>
                      <br/>
                      <br/>
                      <input type="hidden" name="MAX_FILE_SIZE" value="2097152"/><br/>//Taille maximale 2Mo
                       <input type="file" name="chanson" id="chanson"/>
                      <br/><br/>
                      <input type="hidden" name="soumettre" value="1" />
                      <input type="submit" name="envoi" value="Envoyer le fichier .mp3" />
                       </p>
               </form>
          </div>
              ';
     }
 
bas();//On ferme les balises html
mysql_close();// On ferme la connexion Mysql
?>


Traitement des données du formulaire



Ceci est la deuxième partie du code. :lol:


Le code est un peu long mais il est abondamment commenté pour que vous puissiez vous y retrouver, et la dernière partie n'est que l'affichage du formulaire. Donc ne fuyez pas :D .

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php
if(isset($_POST['soumettre'])) // Si le formulaire est envoyé
   {
    $categorie=htmlentities(trim($_POST['categorie']),ENT_QUOTES); //Protection des données
    $dest_fichier = strtolower($_FILES['chanson']['name']); //récupération du nom du fichier qui a été envoyé
    // formatage du nom du fichier
    $dest_fichier = str_replace(' ','_',$dest_fichier);
    $dest_fichier = str_replace('-','_',$dest_fichier);
    $dest_fichier = str_replace("'",'&#039;',$dest_fichier);
    // enlève les accents
    $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    $extension=$dest_fichier;
    $extension=strtolower(substr(strrchr($_FILES['chanson']['name'],'.'),1));// Récupération de l'extension du fichier pour vérification
                                        
    if(in_array($extension, $extensions_ok)) //Si l'extension est l'extension attendue
       {
       $dest_dossier = $dest_dossier.$dest_fichier; 
       $fichier = str_replace('.'.$extension,'',$dest_fichier); //On supprime l'extension pour n'avoir que le nom du fichier dans la base de données
        $resultat =move_uploaded_file($_FILES['chanson']['tmp_name'],$dest_dossier); // On déplace le fichier sur le serveur
         if($resultat) //Si tout va bien
            {
             $sql=mysql_query('INSERT INTO sons VALUES("","'.$categorie.'","'.$fichier.'")')or die(mysql_error()); //On entre les données dans la base
             haut($titrepage); // On affiche la page
             echo 'Le fichier a bien été importé. Le chemin relatif est : "'.$dest_dossier.'"
             <br/>
             <br/>
             <a href="index.php">Retour à l\'accueil</a>';
            }
          else
             {
             haut($titrepage); // On affiche la page
             echo'
                 Il y a eu un problème lors du téléchargement :
                 <ul>
                     <li>fichier '.$dest_fichier.'</li>
                     <li>erreur fichier n'.$_FILES['chanson']['error'].' : ';
                     switch($_FILES['chanson']['error'])
                            {
                            case '1': echo'le fichier a une taille supérieure à 2Mo.'; //Le fichier téléchargé excède la taille de upload_max_filesize, configurée dans le php.ini.
                             break;
                             case '2': echo'le fichier a une taille supérieure à 2Mo.'; //Le fichier téléchargé excède la taille de MAX_FILE_SIZE, qui a été spécifiée dans le formulaire HTML.
                             break;
                             case '3': echo'le fichier n\'a été chargé que partiellement.';
                             break;
                             case '4': echo'aucun fichier n\'a été chargé.';
                             break;
                             case '6': echo'échec de l\'écriture du fichier sur le disque.';
                             break;
                             case '7': echo'l\'envoi du fichier a été arrêté.';
                             break;
                             }
                 echo'</li>
                  </ul>
<a href="index.php">Retour à l\'accueil</a>';
             }
        }
      else //Si l'extension n'est pas celle attendue
        {
         haut($titrepage);//Affichage du formulaire et du message d'erreur
         echo '
         <div id="import" style="margin-top:200px;">
         <h1><a href="index.php">'.$titrepage.'</a></h1>
         <p style="color:red;">Le fichier n\'est pas un fichier mp3, ou il y a eu un problème lors de l\'importation !</p>
             <form method="post" action="import_song.php" enctype="multipart/form-data" style="text-align:center;">
                  <p>
                  <label for="categorie">Spectacle:</label>
                  <select name="categorie" id="categorie">
                         <option value="pop">Musique Pop</option>
                         <option value="rock">Musique Rock</option>
                         <option value="classique">Musique Classique</option>
                   </select>
                   <label for="chanson">Chanson&nbsp;(Type&nbsp;.mp3&nbsp;uniquement)&nbsp;:</label>
                <br/>
                <br/>
                <input type="hidden" name="MAX_FILE_SIZE" value="2097152"/><br/>//Taille maximale 2Mo
                <input type="file" name="chanson" id="chanson"/>
                <br/>
                <br/>
                <input type="hidden" name="soumettre" value="1" />
                <input type="submit" name="envoi" value="Envoyer le fichier .mp3" />
                   </p>
               </form>
           </div>
                ';
          }
    }
?>


En résumé, on vérifie que le formulaire a envoyé un fichier, que l'extension est la bonne, que la taille du fichier est inférieure ou égale à la taille maximale autorisée, que le transfert s'est bien passé, et si tout va bien, on entre le nom et la catégorie du fichier dans la base de données.
Sinon, on affiche le formulaire avec éventuellement un message d'erreur.

La page de gestion des morceaux



La page va être séparée en deux parties :


Le principe



Pour pouvoir afficher les morceaux en fonction de leur catégorie, on va définir 2 variables qui n'ont pas de signification particulière mais qui vont nous permettre de savoir ce que l'on doit afficher. On va les appeler $tmp et $tmp2.
Au début de la boucle d'affichage (car oui, nous allons utiliser une boucle), $tmp n'aura pas de valeur particulière et $tmp2 aura pour valeur 0. On a donc :

Code : PHP
1
2
$tmp = '';
$tmp2 = 0;


Ensuite, $tmp prendra la valeur de chaque catégorie, et $tmp2 sera incrémentée de 1. Je vais vous montrer comment.

Commençons ! :pirate:

Tout d'abord, la requète sql. On demande tous les éléments de la base "sons" définie au début de ce tuto, et on va les classer par catégorie puis par identifiant grâce à ORDER BY. Ce qui nous donne :

Code : SQL
1
$requet=mysql_query('SELECT * FROM sons ORDER BY categorie,id_son') OR die(mysql_error());


Le or die(mysql_error()) nous permet de débugger la requête si l'on fait une erreur d'écriture. Bien pratique... ^^


Ensuite vient la boucle que l'on va faire avec un while($playlist=mysql_fetch_array($requet)).

Avant de vous donner le code, je vais vous expliquer le principe de cette boucle un peu particulière.



Lorsque le dernier morceau de la base sera affiché, on sortira de la boucle. Il faudra donc clôturer la dernière liste en affichant une ultime balise </ul>.

Après cette brève description, je vous donne le code. Vous y verrez plus clair.


Le code



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
<?php
echo'
<div id="liste_chansons">';
//Initialisation des variables
        $tmp='';
        $tmp2= 0;
//La requête
        $requet=mysql_query('SELECT * FROM sons ORDER BY categorie,id_son') or die(mysql_error());
        while($playlist=mysql_fetch_array($requet))
                {       
                 if($playlist['categorie'] != $tmp)
                   {
                    $tmp = $playlist['categorie'];
                    $tmp2 = $tmp2 + 1;
                    if($tmp2 === 2)
                      {
                       $tmp2 = $tmp2 - 1;
                       echo'
                       </ul>
                       <br/>
                           ';
                      }
                    echo'
                        <span style="text-decoration:underline;">Playlist '.$playlist['categorie'].'</span>
                        <br/>
                        <br/>
                        <ul style="list-style:decimal;">
                        ';              
                   }
                   echo'
                        <li>chanson n&deg;<strong>'.$playlist['id_son'].'</strong> : '.$playlist['fichier_son'].'</li>
                        ';
               }
               echo'
                   </ul>
                   <br/>
                   </div>';
?>


On affiche ensuite le formulaire.

On vérifie tout d'abord si on a des entrées dans la base, et on n'affiche le formulaire que si c'est le cas. Je ne vous détaille pas le formulaire car c'est du html de base que je vous donnerai par la suite. Sachez juste qu'il fonctionne par la méthode POST.
Ce formulaire va nous permettre de déplacer ou d'effacer les morceaux dans la base. On placera en début de page les éléments qui nous permettront de réaliser ce que le formulaire ordonne.

Intervertir la place de 2 morceaux



On vérifie que l'on a envoyé par le formulaire les deux identifiants de morceaux à intervertir. Si c'est le cas, on sécurise les données et on récupère la catégorie de chaque morceau dans une variable. Ensuite, on change les morceaux de place.

On procède en trois temps.



Ce qui nous donne en langage informatique :
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
<?php
if(isset($_POST['id_a_remplacer']) AND !empty($_POST['id_a_remplacer']) AND isset($_POST['new_id']) AND !empty($_POST['new_id']))
        {
        $id_a_modifier=intval($_POST['id_a_remplacer']);
        $new_id=intval($_POST['new_id']);
        
        $requet = mysql_query('SELECT categorie FROM sons WHERE id_son="'.$id_a_modifier.'"') or die(mysql_error());
        $requet_a_modifier=mysql_fetch_array($requet);
        $cat_a_modifier = $requet_a_modifier['categorie'];    
        
        $requet = mysql_query('SELECT categorie FROM sons WHERE id_son="'.$new_id.'"') or die(mysql_error());
        $new_requet=mysql_fetch_array($requet);
        $new_cat = $new_requet['categorie'];
        
        mysql_query('UPDATE sons  SET id_son="10000" WHERE id_son="'.$id_a_modifier.'"') or die(mysql_error());
        mysql_query('UPDATE sons  SET id_son="'.$id_a_modifier.'", categorie="'.$cat_a_modifier.'" WHERE id_son="'.$new_id.'"') or die(mysql_error());
        mysql_query('UPDATE sons  SET id_son="'.$new_id.'", categorie="'.$new_cat.'" WHERE id_son="10000"') or die(mysql_error());
        
                echo'
                <p>
                Les chansons ont été déplacées dans la playlist !
                </p>
                '; 
        }
?>


Modifier la catégorie ou supprimer un morceau



Pour modifier la catégorie d'un seul morceau, ou supprimer un morceau, je vous donne directement la requête car elle est simple à comprendre.

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
<?php
if(isset($_POST['id_a_modifier']) AND !empty($_POST['id_a_modifier']) AND isset($_POST['new_categorie']) AND !empty($_POST['new_categorie']))
        {
                $id_a_modifier=intval($_POST['id_a_modifier']);
                $new_categorie = htmlentities(htmlspecialchars($_POST['new_categorie']), ENT_QUOTES);
                mysql_query('UPDATE sons  SET categorie="'.$new_categorie.'" WHERE id_son="'.$id_a_modifier.'"') or die(mysql_error());
                
                echo'
                <p>
                La catégorie de la chanson n&deg; '.$id_a_modifier.' a été modifiée !
                </p>
                '; 
        }
        
        if(isset($_POST['supp']) AND !empty($_POST['supp']))
        {
                $supp=intval($_POST['supp']);
                mysql_query('DELETE FROM sons WHERE id_son="'.$supp.'"')or die(mysql_error());
                
                echo'
                <p>
                La chanson a été supprimée de la playlist !
                </p>
                '; 
        }
?>


Le code complet



Comme vous avez été sages, je vous donne le code complet de la page. :p

Secret (cliquez pour afficher)
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
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<?php
require_once('fonctionconnexionbdd.php');
require_once('fonctionshautbas.php');
 
connexionbdd();
 
 
$titrepage= 'Gestion des morceaux';
 
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
 
if(isset($_POST['id_a_remplacer']) AND !empty($_POST['id_a_remplacer']) AND isset($_POST['new_id']) AND !empty($_POST['new_id']))
        {
        $id_a_modifier=intval($_POST['id_a_remplacer']);
        $new_id=intval($_POST['new_id']);
        
        $requet = mysql_query('SELECT categorie FROM sons WHERE id_son="'.$id_a_modifier.'"') or die(mysql_error());
        $requet_a_modifier=mysql_fetch_array($requet);
        $cat_a_modifier = $requet_a_modifier['categorie'];    
        
        $requet = mysql_query('SELECT categorie FROM sons WHERE id_son="'.$new_id.'"') or die(mysql_error());
        $new_requet=mysql_fetch_array($requet);
        $new_cat = $new_requet['categorie'];
        
        mysql_query('UPDATE sons  SET id_son="10000" WHERE id_son="'.$id_a_modifier.'"') or die(mysql_error());
        mysql_query('UPDATE sons  SET id_son="'.$id_a_modifier.'", categorie="'.$cat_a_modifier.'" WHERE id_son="'.$new_id.'"') or die(mysql_error());
        mysql_query('UPDATE sons  SET id_son="'.$new_id.'", cat="'.$new_cat.'" WHERE id_son="10000"') or die(mysql_error());
        
                echo'
                <p>
                Les chansons ont été déplacées dans la playlist !
                </p>
                '; 
        }
if(isset($_POST['id_a_modifier']) AND !empty($_POST['id_a_modifier']) AND isset($_POST['new_categorie']) AND !empty($_POST['new_categorie']))
        {
                $id_a_modifier=intval($_POST['id_a_modifier']);
                $new_categorie = htmlentities(htmlspecialchars($_POST['new_categorie']), ENT_QUOTES);
                mysql_query('UPDATE sons  SET categorie="'.$new_categorie.'" WHERE id_son="'.$id_a_modifier.'"') or die(mysql_error());
                
                echo'
                <p>
                La catégorie de la chanson n&deg; '.$id_a_modifier.' a été modifiée !
                </p>
                '; 
        }
        
        if(isset($_POST['supp']) AND !empty($_POST['supp']))
        {
                $supp=intval($_POST['supp']);
                mysql_query('DELETE FROM sons WHERE id_son="'.$supp.'"')or die(mysql_error());
                
                echo'
                <p>
                La chanson a été supprimée de la playlist !
                </p>
                '; 
        }
 
haut($titrepage);
 
echo'
        <h1><a href="index.php">'.$titrepage.'</a></h1>
                <div id="liste_chansons">';
        $tmp='';
        $tmp2= 0;
        $requet=mysql_query('SELECT * FROM sons ORDER BY categorie,id_son') or die(mysql_error());
        while($playlist=mysql_fetch_array($requet))
                {       
                        if($playlist['categorie'] != $tmp)
                                {
                                $tmp = $playlist['spect'];
                                $tmp2 = $tmp2 + 1;
                                if($tmp2 === 2)
                                        {
                                        $tmp2 = $tmp2 - 1;
                        echo'
                                </ul>
                                <br/>
                                ';
                                        }
                        echo'
                                <span style="text-decoration:underline;">Playlist '.$playlist['categorie'].'</span>
                                <br/>
                                <br/>
                                <ul style="list-style:decimal;">
                                ';              
                                }
                        echo'
                                <li>chanson n&deg;<strong>'.$playlist['id_son'].'</strong> : '.$playlist['fichier_son'].'</li>
                                ';
                        }
                
                echo'
                                </ul>
                                <br/>
                        </div>
                <form method="post" action="liste_songs.php">
                                ';
                $rekete=mysql_query('SELECT COUNT(*) AS nb_entrees FROM sons') or die(mysql_error());
                $compte=mysql_fetch_array($rekete);
                if($compte['nb_entrees'] != 0)
                echo'
                                <p><strong>Remplacement</strong></p><hr/>
                                <table summary="changement">
                                <tr>
                                        <td>
                                        Remplacer la chanson n&deg;&nbsp;:
                                        </td>
                                        <td>
                                        <input type="text" name="id_a_remplacer" value="" size="2"/>
                                        </td>
                                </tr>
                                <tr>
                                        <td>
                                        Par la chanson n&deg;&nbsp;:
                                        </td>
                                        <td>
                                        <input type="text" name="new_id" value="" size="2"/>
                                        </td>
                                </tr>
                                </table>
                                <p><strong>Changement de catégorie</strong></p><hr/>
                                <table summary="changement">
                                <tr>
                                        <td>
                                        Changer la catégorie de la chanson n&deg;&nbsp;:
                                        </td>
                                        <td>
                                        <input type="text" name="id_a_modifier" value="" size="2"/>
                                        </td>
                                </tr>
                                <tr>
                                        <td>
                                        Par la catégorie&nbsp;:
                                        </td>
                                        <td>
                                        <select name="new_categorie" id="categorie">
                                          <option value="categorieA">Musique Pop</option>
                                          <option value="categorieB">Musique Rock</option>
                                          <option value="categorieC">Musique Classique</option>
                                        </select>
                                        </td>
                                </tr>
                                </table>
                                <p><strong>Suppression</strong></p><hr/>
                                <table summary="suppression">
                                <tr>
                                        <td>
                                        Supprimer la chanson n&deg; :
                                        </td>
                                        <td>
                                        <input type="text" name="supp" value="" size="2"/>
                                        </td>
                                </tr>
                                </table>
                                
                                <table summary="Envoi">
                                <tr>
                                        <td>
                        <input type="submit" name="submit" value="Envoyer"/>
                                        </td>
                                </tr>
                                </table>
                </form>
        
        ';
bas();
mysql_close();
?>

Le lecteur

Le principe est simple : on place le code flash du lecteur dans le corps de la page, et la liste des morceaux est entrée dans une variable $son que l'on aura au préalable formatée à notre convenance.


Pour cela, on fait une requête pour enregistrer, grâce à une boucle, tous les morceaux dans $son. Ensuite, on sépare par une barre verticale les morceaux entre eux (nécessaire pour que le lecteur fonctionne).

Si vous récrivez le code du player, faites attention à bien mettre le code après document.write sur une seule ligne. Cela permet d'avoir un code valide (même si je sais que ce n'est pas très bien) et surtout, que le lecteur fonctionne correctement.


Je vous donne le code abondamment commenté une fois encore. Il n'y a rien de bien nouveau mis à part le code du lecteur. Le principe de fonctionnement étant équivalent à celui de la page de gestion.

Secret (cliquez pour afficher)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
//initialisation des variables
$titrepage= 'Lecteur mp3';
 
require_once('fonctionconnexionbdd.php');
require_once('fonctionshautbas.php');
 
connexionbdd();
 
//initialisation et formatage de la variable $son
$son='';
$sql=mysql_query('SELECT * FROM sons ORDER BY id_son') or die(mysql_error());
while($result=mysql_fetch_array($sql))
    {
    $son.='musique/'.$result['fichier_son'].'.mp3';
    }
    $son=str_replace('mp3m','mp3|m',$son);
 
//Pour afficher le nom du morceau par défaut à l'ouverture du player
if (!isset($_GET['fichier'])) 
  {
  $sql=mysql_query('SELECT fichier_son FROM sons ORDER BY id_son LIMIT 0,1') or die(mysql_error());
  $result=mysql_fetch_array($sql);
 
  $nom=str_replace('.mp3','',$result['fichier_son']);
  $nom=str_replace('_',' ',$nom);
  }
 
haut($titrepage);
 //Le lecteur
echo'   
<div id="lecteur" style="width:240px;text-align:center;">
  <div id="content_dew_player" style="margin-top:0px;margin-left:-10px;text-align:center;">
 
  <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" id="dewplayer" type="application/x-shockwave-flash" data="dewplayer-multi.swf?mp3='.$son.'&amp;autostart=1&amp;showtime=1&amp;bgcolor=B2CC53" height="20" width="240">
  <param name="wmode" value="transparent"/>
  <param name="allowScriptAccess" value="sameDomain" /> 
  <param name="movie" value="dewplayer-multi.swf?mp3='.$son.'&amp;autostart=1&amp;showtime=1&amp;bgcolor=B2CC53" />
  <param name="quality" value="high" />
  <param name="bgcolor" value="B2CC53" />
    <script type="text/javascript">
    <!--
    document.write(\'<embed src="dewplayer-multi.swf?mp3='.$son.'&amp;autostart=1&amp;showtime=1&amp;bgcolor=B2CC53" quality="high" bgcolor="B2CC53" width="240" height="20" name="dewplayer" wmode="transparent" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"><\/embed>\');
    -->
    </script>
  </object>
<br/>
'.strtolower($nom).'
  </div>
<div id="liste_sons">
        ';
 
//Affichage de la liste des morceaux selon le même principe que celui de la page de gestion
        $tmp='';
        $tmp2= 0;
        $requet=mysql_query('SELECT * FROM sons ORDER BY categorie,id_son') or die(mysql_error());
        while($playlist=mysql_fetch_array($requet))
            {       
            if($playlist['categorie'] != $tmp)
               {
               $tmp = $playlist['categorie'];
               $tmp2 = $tmp2 + 1;
               if($tmp2 === 2)
                 {
                  $tmp2 = $tmp2 - 1;
                  echo'
                     </ul>
                      ';
                 }
                  echo'
                     <span style="text-decoration:underline;">Playlist '.$playlist['categorie'].'</span>
                     <ul style="list-style:decimal;height:130px;width:200px;overflow:auto;text-align:left;font-size:small;margin-left:-19px;">
                      ';              
               }
            $morceau = str_replace('.mp3','',$playlist['fichier_son']);
            $morceau = str_replace('_',' ',$morceau);
            $morceau = str_replace('-',' ',$morceau);
            echo'
              <li><a href="lecteur.php?fichier='.$playlist['fichier_son'].'.mp3"  style="color:#A22E30;text-decoration:none;">'.ucfirst($morceau).'</a></li>
                ';
            }
               
            echo'
               </ul>
</div>
';
bas();
mysql_close();
?>


Lorsque l'on clique sur un des liens de la liste, la variable va être passée dans l'adresse de la page, mais c'est le JavaScript -et non le php- qui va la traiter. Ce qui permet de changer de morceau sans recharger la page.

Nous allons donc voir ce code JavaScript.

Le JavaScript

Ce code est une fonction que l'on va placer dans une page appelée controle_player.js.


Je vous laisse le soin de la placer dans le répertoire de votre choix. Mais faites attention à bien modifier le chemin relatif dans la fonction haut() que nous avons précédemment définie.

Principe





Ce qui nous donne au final :

Le code



Code : JavaScript
 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
function control_player(forms) 
        { 
        // Test sur les méthodes
        if (!document.getElementById || !document.getElementsByTagName){ return false; }
        var song='musique/';
        var liste=document.getElementById('liste_sons').getElementsByTagName('a');
                        for(var j=0; j<liste.length; j++)
                                {
                                        var li=liste[j].innerHTML;
                                        var song=song+li+'.mp3|musique/';
                                        song=song.replace(' ','_');
                                }
        var referent=document.getElementById('liste_sons');
        var liens_son=referent.getElementsByTagName('a');
        for (i=0; i<liens_son.length; ++i)
                { liens_son[i].onclick=function()
                        {
                        /* Au clic sur le lien, on récupère l'adresse absolue du son. Attention : elle sera du type [url=http://...etc...]http://...etc...[/url] */ 
                        var adresse_son=this.href;
                        // Puis on extrait la chaîne de caractères commençant à la dernière occurrence du caractère = 
                        var pre_son=adresse_son.substring(adresse_son.lastIndexOf("=")); 
                        /* Enfin, on extrait du résultat une nouvelle chaîne de caractères commençant à l'index 1 de la précédente. L'index 0 qui correspond au caractère = est donc exclu. La variable son est maintenant opérationnelle. */ 
                        var son=pre_son.substring(1);
                        var nom_son=son.substring(0,son.lastIndexOf("."));
                        nom_son=nom_son.charAt(0).toUpperCase()+nom_son.substring(1).toLowerCase();
                        
                        var player="<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" codebase=\"http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0\" id=\"dewplayer\" type=\"application/x-shockwave-flash\" data=\"dewplayer-multi.swf?mp3=musique/"+son+'|'+song+"&amp;autostart=1&amp;showtime=1&amp;bgcolor=B2CC53\" width=\"240\" height=\"20\"><param name=\"movie\" value=\"dewplayer-multi.swf?mp3=musique/"+son+'|'+song+"&autoplay=1\" /><embed src=\"dewplayer-multi.swf?mp3=musique/"+son+'%7C'+song+"&amp;autostart=1&amp;showtime=1&amp;bgcolor=B2CC53\" quality=\"high\" bgcolor=\"B2CC53\" width=\"240\" height=\"20\" name=\"dewplayer\" wmode=\"transparent\" align=\"middle\" allowScriptAccess=\"sameDomain\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"><\/embed><\/object><br/>"+nom_son;
                        
                        player=player.replace('|musique/&','&');
                        player=player.replace('|musique/&','&');
                        player=player.replace('|musique/'+son,'');
                        player=player.replace('|musique/'+son,'');
                        player=player.replace('%7Cmusique/'+son,'');
 
                        
                        /* On régénère complètement le code html du Dewplayer grâce à la propriété innerHTML */ 
                        document.getElementById('content_dew_player').innerHTML=player
                        // On annihile le lien 
                        return false;
                        }
                }
        } 
        //On lance la fonction "control_player()"une fois le chargement de la page effectif
        window.onload=control_player;

Image utilisateur

Voilà. Si vous suivez bien toutes les instructions, vous devriez avoir un lecteur opérationnel.
Je pense que le code peut encore être amélioré et je suis preneur de toute nouvelle fonctionnalité ou optimisation.

En espérant vous avoir aidés avec ce deuxième tuto.

Wham. :p

Image utilisateur

Cette création est mise à disposition sous un contrat Creative Commons.


Merci aux zcorrecteurs (Guill@ume et Klouguinette) et à Arconis pour leur aide et leur intransigeance.
Auteur : Jerry Wham
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 475 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.4099s (0.3973s)