8791 sujets

Développement web côté serveur, CMS

Bonsoir,
je suis actuellement en train de faire une base de donnée de tous mes CDs, MP3s et Vinyles. Cet exercice me permet de me mettre un peu à PHP et la gestion d'une BdD MySQL puisque je n'y connais pas grand chose.

Du coup, j'ai trois tables différentes dans la Base "music":
a écrit :

****cds****
(id) - Artiste - Album - Année - Genre - Pays - Label
****mp3s****
(id) - Artiste - Album - Année - Genre
****vinyles****
(id) - Artiste - Album - Année - Pays


Le tout est affiché sur 3 pages PHP différentes.

J'ai aussi créé un petit formulaire pour ajouter des CDs, ce qui m'amène à ma première question:
1/ Actuellement, mon code me permet de n'ajouter que des CDs mais j'aimerais pouvoir ajouter un objet de formulaire Select (options: CDs/MP3s/Vinyles) pour que l'écriture se fasse dans la base correspondante.
Voici mon code actuel:

// On récupère les champs
if(isset($_POST['artiste']))      $artiste=$_POST['artiste'];
else      $artiste="";

if(isset($_POST['album']))      $album=$_POST['album'];
else      $album="";

if(isset($_POST['année']))      $année=$_POST['année'];
else      $année="";

if(isset($_POST['genre']))      $genre=$_POST['genre'];
else      $genre="";

if(isset($_POST['pays']))      $pays=$_POST['pays'];
else      $pays="";

if(isset($_POST['label']))      $label=$_POST['label'];
else      $label="";

    $db = mysql_connect('localhost', 'root', '');  // connexion à la base
    mysql_select_db('music',$db);                  // sélection de la base
    
        $sql = "INSERT INTO cds(artiste,album,année,genre,pays,label) VALUES('$artiste','$album','$année','$genre','$pays','$label')";
        mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
        
        // on affiche le résultat pour le visiteur
        echo 'Le disque a été ajouté!';

    mysql_close();  // on ferme la connexion


J'espère que je suis suffisamment clair et précis...

2/ Ça paraît simple mais pour moi ça ne l'est pas... Smiley sweatdrop
Une fois que mes disques sont ajoutés, ils vont apparaître en fin de liste. Cependant, j'aimerais que par défaut, ils soient affichés dans l'ordre alphabétique depuis le nom de l'Artiste. J'ai passé du temps sur Google mais rien trouvé

3/ J'ai encore plein de questions mais je vais me limiter à 3 pour l'instant Smiley confused
J'aimerais aussi utiliser des 'filtres' comme sur Excel. Par exemple, un petit menu déroulant qui me permet d'afficher tous les albums sortis en 2005 (à appliquer sur année, genre, label, pays). Je ne connais pas le nom de cette technique donc je ne sais même pas apr où commencer mes recherches Smiley rolleyes

A grand merci à vous à l'avance. Je prends beaucoup de plaisir à découvrir ces méthodes mais c'est quand même assez compliqué tout seul...
Modifié par BloodyM (27 Aug 2010 - 21:06)
Modérateur
Bonjour,

Pour la question 2, voir du côté de ORDER BY en SQL

Pour la question 3, voir du côté de WHERE en SQL.

Bon courage!
Merci pour ta réponse. Donc, j'en suis au 3ème point et je rencontre un petit problème de syntaxe.

J'ai changé un peu d'orientations. Voici ce que je souhaite faire:
Ma page:
a écrit :
Artiste A - Album 1 - Année...
Artiste A - Album 3 - Année...
Artiste B - Album 9 - Année...
...

En cliquant sur le lien Artiste A par exemple, uniquement les entrées de cet artistes s'affichent. Pareil pour Année...

Voici mon code actuel récupéré sur un autre site:

		// on se connecte à MySQL
$db = mysql_connect('localhost', 'root', '');

// on sélectionne la base
mysql_select_db('music',$db);

$order = (iSset($_GET['ordre']) ? $_GET['ordre'] : null);
$tri = (iSset($_GET['tri']) ? " ORDER BY " . $_GET['tri'].' '. $order : null);
$ARTISTE = (iSset($_GET['ARTISTE']) ? $_GET['ARTISTE'] : null);

$requete  = "SELECT artiste,album,année,genre,pays,label FROM vinyles";
if ( $ARTISTE != null) { // on ajoute le critère que s'il est demandé
  $requete  .= " WHERE ARTISTE=" .$ARTISTE; // Nota: si ARTISTE est numérique, il ne faut pas le délimiter avec des apostrophes en SQL
}
$requete .=  $tri;
$resultat = mysql_query($requete) or die('Erreur SQL !'.$requete.'<br>'.mysql_error());


//TABLEAU
echo '<table border="0">';
echo '<thead>';
echo '<tr>
    <th>Artiste <a href="?view=vinyle&tri=ARTISTE&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=ARTISTE&ordre=desc"> <img src="img/triUP.png"></a></th>
    <th>Album <a href="?view=vinyle&tri=ALBUM&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=ALBUM&ordre=desc"> <img src="img/triUP.png"></a></th>
    <th>Année <a href="?view=vinyle&tri=ANNéE&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=ANNéE&ordre=desc"> <img src="img/triUP.png"></a></th>
	<th>Pays <a href="?view=vinyle&tri=PAYS&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=PAYS&ordre=desc"> <img src="img/triUP.png"></a></th>
    <th>Genre <a href="?view=vinyle&tri=GENRE&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=GENRE&ordre=desc"> <img src="img/triUP.png"></a></th>
	<th>Label <a href="?view=vinyle&tri=LABEL&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=LABEL&ordre=desc"> <img src="img/triUP.png"></a></th>
	
    </tr>';
	'</thead>';

// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($resultat))
    {
    // on affiche les informations de l'enregistrement en cours
        [b]echo '<tr><td><a href="?view=vinyle&ARTISTE=????????"[/b]>'.$data['artiste'].'</a></td><td>'.$data['album'].'</td><td align="center">'.$data['année'].'</td><td align="center">'.$data['pays'].'</td><td align="center">'.$data['genre'].'</td><td align="center">'.$data['label'].'</td></tr>';
    }
'</table>';
// on ferme la connexion à mysql
mysql_close();


J'ai bien remarqué le Nota: si ARTISTE est numérique, il ne faut pas le délimiter avec des apostrophes en SQL et je crois que c'est ce qui change tout. En effet, si dans mon navigateur je tape: ?view=vinyle&ARTISTE='test' ça fonctionne mais si j'enlève les guillemets ' ' ça ne fonctionne plus.
J'ai essayé de placer des guillemets et modifier la syntaxe de toutes les manières mais rien ne fonctionne...

Et sinon je n'arrive pas non plus à faire mon lien (là où j'ai mis en Bold dans le texte).
J'ai essayé des trucs du genre
&ID_AUTEUR=<?php echo $ARTISTE; ?>
mais ça reste dans le même état dans le navigateur...

Modifié par BloodyM (29 Aug 2010 - 17:59)
Salut,

1 :
Pour faire une liste dans ton formulaire utilise <select> et <option>


<form method="post" action="#">
<label for="choix">
<select name="choix" id="choix">
     <option value="select" selected="selected">---Fait ton choix---</option>
     <option value="cd">CDs</option>
     <option value="mp3">MP3s</option>
     <option value="vinyles">Vinyles</option>
</select>
</form>


Après tu fais une condition PHP : si c'est un cd je mets dans la table cd, si mp3 je mets dans la table mp3 etc


if ($_POST['choix'] == cd) {
         // on écrit dans la base music table cd
}
elseif ($_POST['choix'] == mp3) {
         // on écrit dans la base music table mp3
}
elseif ($_POST['choix'] == vinyles) {
         // on écrit dans la base music table vinyles
}


Fais moi signe si ta besoin d'aide sur le code PHP/SQL pour écrire dans la base où il faut.

2 : Comme on l'a dit en SQL tu as ORDER BY, donc par exemple :


$db = mysql_connect('localhost', 'root', ''); 
mysql_select_db('music',$db);  
$reponse = $bdd->query('SELECT count(*) FROM cd ORDER BY nom');
					
while ($donnees = $reponse->fetch()) {
     echo $donnees['nom']. '<br />';
}


Ici on demande de lister tous les champs de la table cd par ordre alphabétique des "nom" en sautant une ligne donc les uns en dessous les autres.

3 : Comme on l'a dit aussi c'est WHERE, on va demander "tout ce qu'il y a dans la table où les champs années valent 2005"


SELECT count(*) WHERE annees = '2005'


J'avoue n'avoir pas lu tous les posts du topic, désolé si certaines choses ont déjà été dites.

Bonne journée
Modifié par KelT55 (30 Aug 2010 - 15:16)