| | sianhurley | Posté le 23/09/2003 @ 08:22 | Petit astucien
128 Messages
| Matinales salutations,
Je vous expose mon idée pour un site à venir (je débute dans MySql et dans PHP, mais je suis un utilisateur avancé en HTML).
Il s'agirait d'une énorme base de données sur la musique populaire des seventies avec la discographie détaillée des 45 tours de chaque artiste. Le site n'est pas encore en train, car j'en suis à la récolte des informations, passionnant mais fastidieux. Mais je suis bien obligé d'y penser à ce site, à en concevoir les grandes lignes d'ores et déjà. Des centaines d'artistes, des milliers de disques... Imaginez le boulot si je devais créer pour chaque entrée (artistes, disques) une page HTML, même avec des gabarits. D'où l'idée, bien sûr, de stocker toutes ces infos dans une BDD, MySql en l'occurence. J'ai d'ailleurs déjà créé une table avec la liste, encore partielle, des artistes et quelques éléments biographiques (nom réel, date et lieu de naissance, etc.). La seconde table sera consacrée à la discographie avec des champs Face_A, Face_A_duree, Face_B, Face_B_duree, anecdotes, etc., et un champ avec le lien vers l'image de la pochette lorsque je la possède.
Je m'interroge. Vu le temps que va me prendre la collecte et l'introduction des données dans la base, je n'ai pas forcément envie de me casser la tête durant 6 mois supplémentaires pour mettre au point le site proprement dit. Je le souhaite fonctionnel à tous égards.
Mon site - en PHP - comprendrait un header et un footer. Dans l'un d'eux, un alphabet classique. Je voudrais que le visiteur, en cliquant sur une lettre, tombe sur une page reprenant la liste de tous les artistes dont le nom commence par la lettre choisie.
Exemple : un clic sur S affiche la page où sont listés tous les artistes dont le nom commence par S. Dans cette page, le visiteur clique sur Sardou : une autre page s'affiche alors avec les divers éléments biographiques recueillis dans ma table "artistes", ainsi que la photo de l'artiste. En dessous, le plus important, la discographie complète des 45 tours de l'artiste de 1970 à 1979, ordonnée par date. Chaque référence 45 tours serait cliquable, ce qui amènerait à une page détaillant ce 45 tours (face A, face B, durée, label, pochette, etc.)
À concevoir mentalement, c'est assez simple. Pratiquement, c'est une autre paire de manches. En gros, en très gros plutôt, je vois ce que PHP me permet de faire, notamment grâce aux "include". Sans connaître, loin s'en faut, toutes les fonctions, je puis dire que la vision d'un fichier .php m'est familière pour avoir naguère installé et modifié (ajout de modules) un forum PhpBB. Je ne suis donc pas totalement un demeuré en ce domaine, même si je débute dans la programmation.
Je ne demande à personne de me concevoir un site clé sur porte, ça non. Je vous demande de me conseiller dans sa conception. Comment vous y prendriez-vous si vous deviez créer un pareil site ? J'ai besoin d'une orientation générale. Ce qui me turlupine, c'est de savoir plus ou moins comment m'y prendre pour parvenir au résultat souhaité (clic sur une lettre > page avec liste d'artistes dont le nom commence par cette lettre > clic sur un artiste, etc., comme expliqué plus haut). Absolument toutes les informations seront dans la BDD, sauf les images. Ceci devrait donc m'éviter de devoir créer une page indépendante pour chaque référence, il me semble. Comment y parvenir ? Projet délirant ? Complexe mais réalisable ? Fastoche ? Je tiens à commencer sur des bases saines, ayant horreur du travail inutile.
Merci aux spécialistes qui voudront bien m'éclairer.
[smile]
Il va de soi que je n'attends pas des réponses du style : "je serais toi, je mettrais les images des pochettes à droite plutôt qu'à gauche".
| | |
| |
| Publicité |
|
| | koala01 | Posté le 23/09/2003 à 12:01 | Astucien
4715 Messages
| Ce devrait etre assez facile...trois pages html et deux tables devraient suffire (en plus de celle reprenant l'alphabet, ca va de soi)
les tables
une table "chanteur"
qui serait composée des champs
id (BIGINT autoincrément clé primaire)
nom (varchar, 50)
prénom (varchar 50) [des fois qu'il y aurait plusieurs chanteurs dans la famille [clindoeil]]
biographie (longtext)
éventuellement un champs discographie
une table "chanson"
elle serait composée d'un peu plus de champs:
id bigint autoincrément clé primaire
chanteur (bigint, recevrait le numéro id des chanteurs)
année (int)
mois (int, varchar ou enum au choix)
titre_disque (varchar 50)
face(varchar 2)
photo (varchar 255 null recoit l'url de la photo )
texte (longtext recoit les paroles)
...tout autre info oubliée [clindoeil]
les pages
avant de m'attaquer aux nouvelles pages, voyons les liens de la page "alphabet"
ils seront du genre <a href="choixchanteur.php?lettre=(la_lettre)>
exemple <a href="choixchanteur.php?lettre=a>A </a>
la page choixchanteur.php
effectuerait la recherche sur la table chanteur...
une petite condition:
si lettre==''{
$sql="SELECT * FROM chanteur ORDER BY nom"
}else {
$sql=sprintf("SELECT * FROM chanteur WHERE `chanteur` like`%s` ORDER BY nom", $lettre);
}
de cette manière, si aucune lettre n'est sélectionnée, tous les artistes seront listés par ordre alphabetique, sinon, seuls les chanteurs dont le nom commence par la lettre seront choisis
Le reste consiste en l'affichage [clindoeil]
penser à faire créer des liens du genre <a href="disco.php?chanteur=<? echo $nom_enregistrement[idchanteur]; ?>">
la page disco.php
serait basée sur une recherche dans la table chansons sur base de l'id chanteur
$sql=sprintf("SELECT * FROM chansons WHERE chanteur=%d ORDER BY année ASC",$chanteur);
Les titre seront ainsi classé par année
Penser à faire pointer des liens pour voir le texte du genre
<a href="texte.php?chanson=<? echo nom_enregistrement[id]; ?>">
la page texte.php
Effectuerait la recherche dans la table chanson sur base de l'id de la chanson et affiche son texte
$sql=sprintf("SELECT * FROM chansons WHERE id=%d",$chason);
Tu te sera endu compte que $nom_enregistrement correspondra à la variable que tu aura choisie pour le jeu d'enregistrement et que je n'ai absolument rien mis comme affichage...
De cette manière, tu reste parfaitement libre
Pense à créer des boucles pour faire afficher tous les titres par exemple [clindoeil]
Modifié par koala01 le 23/09/2003 12:02 | | | | | koala01 | Posté le 23/09/2003 à 12:07 | Astucien
4715 Messages
| Tu remarqueras en outre que, comme on a créé un chamsp "annee", il t'est tout à fait possible de créer une page qui reprendrait les chansons sortie en telle ou telle année... | | | | | sianhurley | Posté le 23/09/2003 à 14:08 | Petit astucien
128 Messages
| Je ne m'attendais pas à recevoir si rapidement une réponse aussi peu évasive. Merci pour elle et les suivantes, car il y aura d'autres questions... mais je promets de ne pas solliciter à temps plein les neurones et surtout les nerfs des astuciens ! [happy]
Une belle image valant mieux qu'un long discours, voici une capture d'écran de ma table "artistes" :
[img]http://www.familoo.com/familoo/RepFiles/545315958/table_1.gif[/img]
J'ai choisi pour l'id_artistes un "smallint(5)" (j'aurais pu me contenter d'un (4), car la base ne comptera pas un nombre à 5 chiffres pour les artistes). Tu choisis, toi, un "BIGINT" - why ?
Hormis les champs "id_artistes" et "nom", les autres champs sont en NULL, car il arrive que l'un d'eux ne puisse être rempli, ainsi le champ "prénom" pour les artistes au nom unique (comme "Antoine" ou "Sheila"), ou les autres champs pour lesquels je ne dispose pas toujours des infos souhaitées. J'ai mis le champ "real_name" en "varchar(60)" car certains artistes ont un nom réel à rallonge, ainsi Philippe Lavil (= Philippe Durand de la Villejugu du Fresnay) !
Je rajouterai d'autres champs dans cette table pour les liens vers la photo de l'artiste (à ce propos : lien relatif ou absolu ?), un champ de type TEXT pour les anecdotes biographiques et au moins un champ URL pour linker vers le site officiel de l'artiste s'il en a un, voire des champs supplémentaires pour chaque lien vers un site non officiel, mais digne d'intérêt.
Je n'ai pour l'instant insérer que des artistes uniques, aucun groupe, pour la bonne raison que je ne sais trop comment faire pour insérer un id_artistes par entrée tout en permettant de placer les éléments biographiques des musiciens composant ce groupe. S'il est aisé d'insérer les données pour Sheila (une ligne), cela se complique pour Martin Circus. Je compte donc créer un champ "compo_groupes" de type TEXT où je stockerais les infos détaillées pour les membres du groupe.
Une seconde capture d'écran pour montrer le détail des premières entrées de la table :
[img]http://www.familoo.com/familoo/RepFiles/545315958/table_details.gif[/img]
(Je n'ai pas entré les données selon un ordre alphabétique, ce qui explique que les id_artistes semblent farfelues. Je n'insère que les données les plus complètes, au fur et à mesure de mes recherches.)
Tu me suggères de créer une table pour l'alphabet. Ça paraît logique, mais que dois-je y mettre ??? Combien et quelles sortes de champs ?
...
Pour la seconde table, non encore créée... C'est un peu plus complexe, car je tiens à y voir figurer sur la même ligne (afin de m'y retrouver) les faces A et B de chaque 45 tours (et cela se complique pour les quelques EP 4 titres qui sortaient encore en 70-71) avec pour chaque titre un champ prévu pour la durée des tracks, un champ "label_reference" (ex : Barclay 45.009), un champ pour l'année de parution du disque, le mois, un champ de type TEXT pour les anecdotes éventuelles et les mentions de classements dans les charts, un champ URL pour les liens vers les pochettes et bien sûr, pour effectuer les jointures entre les tables, un rappel de l'id_artiste. Tu me suggères justement de lier la seconde table à la première par l'id_artiste, alors que je pensais plutôt le faire par le champ secondaire "nom", pour la bonne et simple raison que si je connais le nom de l'artiste qui a enregistré tel ou tel disque, je ne connais pas forcément l'id qui lui a été attribuée. Je pense qu'il n'y a pas d'inconvénient à lier une table à une autre en faisant référence à une clé secondaire. Pas de champ prévu pour les paroles : je sais que cela plairait, mais d'autres sites font ça très bien... en plus ce sont eux qui sont emmerdés pour les questions de copyright. [approuve]
Voilà, à peu près. Je compte bien sûr, le site étant appelé à s'enrichir, à afficher en page d'accueil une page "news.php" reprenant les derniers ajouts.
Une dernière chose : je voudrais pouvoir afficher la liste des artistes de manière alphabétique, mais sous la forme Prénom + Nom avec le nom en majuscule (et peut-être en gras ou en couleur). Ex :
- Salvatore ADAMO
- Marcel AMONT
- ...
ou bien sous la forme Nom + Prénom entre parenthèses. Ex :
- BARRIÈRE & Noëlle Cordier (Alain)
- ...
- DURY & The Blockheads (Ian)
Boudiou ti, j'ai du perlimpimpin sur la planche ! Enfin, ça ira, je pense, d'après les indications que tu me fournis (j'avais la trouille de devoir créer 10 000 pages). Le plus harassant, c'est ce que je fais en ce moment : la collecte des discographies respectives détaillées.
Merci koala01 pour tes précieuses indications. J'imprime tout ça.
[bierre] | | | | | koala01 | Posté le 24/09/2003 à 00:27 | Astucien
4715 Messages
| |
J'ai choisi pour l'id_artistes un "smallint(5)" (j'aurais pu me contenter d'un (4), car la base ne comptera pas un nombre à 5 chiffres pour les artistes). Tu choisis, toi, un "BIGINT" - why ?
|
C'est une vieille habitude de célibataire endurci [clindoeil]
Plus sérieusement, sauf erreur de ma part, smallint(5) codera le nombre, non pas sur 5 octets, mais sur 5 bits...
On arrive donc, non pas à 99999 possibilités, mais seulement à (en binaire)11111 soit ...31 possibilité à peine [langue]
Toujours sauf erreur, on aurait pu choisir simplement INT, limité à +- 64000 valeurs...et la 64001 aurait foiré...
La seule manière d'être sur que ta table te survivra quel que soit le nombre d'enregistrement est donc d'utiliser BIGINT
|
Hormis les champs "id_artistes" et "nom", les autres champs sont en NULL, car il arrive que l'un d'eux ne puisse être rempli, ainsi le champ "prénom" pour les artistes au nom unique (comme "Antoine" ou "Sheila"), ou les autres champs pour lesquels je ne dispose pas toujours des infos souhaitées. J'ai mis le champ "real_name" en "varchar(60)" car certains artistes ont un nom réel à rallonge, ainsi Philippe Lavil (= Philippe Durand de la Villejugu du Fresnay) !
|
Tout à fait...on aurait meme pu le mettre encore plus long
|
Je rajouterai d'autres champs dans cette table pour les liens vers la photo de l'artiste (à ce propos : lien relatif ou absolu ?),
|
Du fait que tout sera toujours appelé de la meme page, tu peux tres bien mettre les liens relatifs à ta page (ou veiller à ce que le chemin reste valide
| un champ de type TEXT pour les anecdotes biographiques et au moins un champ URL pour linker vers le site officiel de l'artiste s'il en a un, voire des champs supplémentaires pour chaque lien vers un site non officiel, mais digne d'intérêt.
|
utilise alors longtext afin d'être sur de ne pas etre limité en nombre de caractères...
Y compris pour le champs qui prendrais les url...
tu les mettrais tous à la suite avec un séparateur (,) et utiliserait la fonction explode() pour les récupérer... l'affichage se faisant avec un foreach
|
Je n'ai pour l'instant insérer que des artistes uniques, aucun groupe, pour la bonne raison que je ne sais trop comment faire pour insérer un id_artistes par entrée tout en permettant de placer les éléments biographiques des musiciens composant ce groupe. S'il est aisé d'insérer les données pour Sheila (une ligne), cela se complique pour Martin Circus. Je compte donc créer un champ "compo_groupes" de type TEXT où je stockerais les infos détaillées pour les membres du groupe.
|
meme remarque
|
Une seconde capture d'écran pour montrer le détail des premières entrées de la table :
[img]http://www.familoo.com/familoo/RepFiles/545315958/table_details.gif[/img]
(Je n'ai pas entré les données selon un ordre alphabétique, ce qui explique que les id_artistes semblent farfelues. Je n'insère que les données les plus complètes, au fur et à mesure de mes recherches.)
Tu me suggères de créer une table pour l'alphabet. Ça paraît logique, mais que dois-je y mettre ??? Combien et quelles sortes de champs ?
...
|
non... je suggere de faire une requete sql qui vérifie la premiere lettre du nom
(je me suis d'ailleurs trompé dans le code, voici sa modification)
si lettre==''{
$sql="SELECT * FROM chanteur ORDER BY nom"
}else {
$sql=sprintf("SELECT * FROM chanteur WHERE `chanteur` like`%s%` ORDER BY nom", $lettre);
}
le %s sera remplacé par la valeur de $lettre et le % suivant indiquera à MySQL qu'il doit chercher des caractères apres cette lettre
|
Pour la seconde table, non encore créée... C'est un peu plus complexe, car je tiens à y voir figurer sur la même ligne (afin de m'y retrouver) les faces A et B de chaque 45 tours (et cela se complique pour les quelques EP 4 titres qui sortaient encore en 70-71)
|
Malheureusement, cela devient berauoup plus compliqué...
Ici, c'est un titre par enregistrement, mais en modifiant quelques peu les requetes sql il sera aisé de trouver les titre correspondant à chaque face de chaque album [clindoeil]
|
avec pour chaque titre un champ prévu pour la durée des tracks, un champ "label_reference" (ex : Barclay 45.009),
|
rajoute les champs manquant [clindoeil]
|
un champ pour l'année de parution du disque,le mois,
|
je les avais prévus [clindoeil]
année (int)
mois (int, varchar ou enum au choix)
|
un champ de type TEXT pour les anecdotes éventuelles et les mentions de classements dans les charts, un champ URL pour les liens vers les pochettes et bien sûr, pour effectuer les jointures entre les tables, un rappel de l'id_artiste. Tu me suggères justement de lier la seconde table à la première par l'id_artiste, alors que je pensais plutôt le faire par le champ secondaire "nom", pour la bonne et simple raison que si je connais le nom de l'artiste qui a enregistré tel ou tel disque, je ne connais pas forcément l'id qui lui a été attribuée. Je pense qu'il n'y a pas d'inconvénient à lier une table à une autre en faisant référence à une clé secondaire. Pas de champ prévu pour les paroles : je sais que cela plairait, mais d'autres sites font ça très bien... en plus ce sont eux qui sont emmerdés pour les questions de copyright. [approuve]
|
Je proposais id_artiste parce que cela semblait plus facile (évite les erreurs de casse ou de mauvaise orthographe) mais tu n'a pas tort [clindoeil]
|
Voilà, à peu près. Je compte bien sûr, le site étant appelé à s'enrichir, à afficher en page d'accueil une page "news.php" reprenant les derniers ajouts.
|
Why not [question]...mais tu posais la question sur la faisabilité de la base de donnée des chanteur [clindoeil]
|
Une dernière chose : je voudrais pouvoir afficher la liste des artistes de manière alphabétique, mais sous la forme Prénom + Nom avec le nom en majuscule (et peut-être en gras ou en couleur). Ex :
- Salvatore ADAMO
- Marcel AMONT
- ...
ou bien sous la forme Nom + Prénom entre parenthèses. Ex :
- BARRIÈRE & Noëlle Cordier (Alain)
- ...
- DURY & The Blockheads (Ian)
|
utilise pour cela la fonction strtoupper()
du genre <? echo strtoupper(nom_enregistrement[nom]) ?>
|
Boudiou ti, j'ai du perlimpimpin sur la planche ! Enfin, ça ira, je pense, d'après les indications que tu me fournis (j'avais la trouille de devoir créer 10 000 pages). Le plus harassant, c'est ce que je fais en ce moment : la collecte des discographies respectives détaillées.
Merci koala01 pour tes précieuses indications. J'imprime tout ça.
|
Mais de rien et bon courrage [clindoeil] | | | | | sianhurley | Posté le 24/09/2003 à 23:32 | Petit astucien
128 Messages
| Encore merci.
Je connais deux mots de chinois et je voudrais déjà pouvoir lire, écrire un livre en chinois. C'est énervant.
Je vois tout ce que PHP me permet, mais n'en maîtrisant rien, je me prends la tête, parce que je voudrais pouvoir tout faire en un tournemain. J'ai juste pigé deux ou trois petits trucs. C'était déjà comme ça lorsque je me suis mis au HTML. J'allais de l'enthousiasme délirant au découragement, sans transition. Et puis, et puis...
Plutôt que de me casser la nénette à essayer de comprendre qqchose sur quoi je ne suis pas encore en train de travailler (le site proprement dit), et avant de compléter ma base, il serait bon je crois de m'exercer avec les quelques enregistrements MySQL que j'ai déjà.
Je vais donc créer les quelques petites pages dont j'ai besoin, sur le modèle que tu as donné, sans me préoccuper de la mise en page autrement que par un mysql_fetch_array.
Une page alphabet.php (appelée à devenir un header)
une page artistes.php (où apparaîtra la liste des artistes dont le nom commence par la lettre sélectionnée)
une page ???
Voilà, ça coince : je souhaite que, lorsque le visiteur choisira un artiste, Sardou par exemple, en dessous de sa biographie apparaisse sa discographie, sur cette page-là et non sur une nouvelle page. Ce serait une liste par année, chaque ligne représentant un 45 tours. L'internaute aurait la possiblité, pour connaître plus de détails, de cliquer sur l'une des lignes afin de voir apparaître les détails dudit 45 tours (pochette, références, etc.). Il me faut donc, si je calcule bien, 2 pages .php en plus des deux ci-dessus ? Nommons-les : artiste_disco.php et disco_details.php. Ça te semble OK ?
Bien. Pour faire des essais, par quoi je commence ? Je suis un peu paumé à cause des liens, en fait.
Je me sauve : j'ai la tête en feu !
Merci pour tes encouragements : j'en ai bzoin (tsoin-tsoin !)
[crazy][bigsmile][clindoeil] | | | | | koala01 | Posté le 25/09/2003 à 00:39 | Astucien
4715 Messages
| sianhurley a écrit :
Encore merci.
|
mais de rien [clindoeil]
|
Je connais deux mots de chinois et je voudrais déjà pouvoir lire, écrire un livre en chinois. C'est énervant.
Je vois tout ce que PHP me permet, mais n'en maîtrisant rien, je me prends la tête, parce que je voudrais pouvoir tout faire en un tournemain. J'ai juste pigé deux ou trois petits trucs. C'était déjà comme ça lorsque je me suis mis au HTML. J'allais de l'enthousiasme délirant au découragement, sans transition. Et puis, et puis...
|
Hé... il faut saavoir marcher avant de savoir courrir [bigsmile]
|
Plutôt que de me casser la nénette à essayer de comprendre qqchose sur quoi je ne suis pas encore en train de travailler (le site proprement dit), et avant de compléter ma base, il serait bon je crois de m'exercer avec les quelques enregistrements MySQL que j'ai déjà.
Je vais donc créer les quelques petites pages dont j'ai besoin, sur le modèle que tu as donné, sans me préoccuper de la mise en page autrement que par un mysql_fetch_array.
|
c'est une solution
|
Une page alphabet.php (appelée à devenir un header)
une page artistes.php (où apparaîtra la liste des artistes dont le nom commence par la lettre sélectionnée)
une page ???
|
une page chanson.php qui permettrait, par exemple de voir les paroles [clindoeil]
|
Voilà, ça coince : je souhaite que, lorsque le visiteur choisira un artiste, Sardou par exemple, en dessous de sa biographie apparaisse sa discographie, sur cette page-là et non sur une nouvelle page.
|
aucun problème: pour autant que tu nomme les enregistrement et les requetes avec des noms de variables différents, tu peux avoir (presque) autant de requetes et de jeux d'enregistrement que ce que tu peux souhaiter...et ca peut lire les données sur des tables différentes...
Le plus facile est peut etre de créer une série de petits fichiers connexes que tu appellerais par des includes...
De cette manière, tu ne risquera pas de t'emmeler dans le code
|
Ce serait une liste par année, chaque ligne représentant un 45 tours. L'internaute aurait la possiblité, pour connaître plus de détails, de cliquer sur l'une des lignes afin de voir apparaître les détails dudit 45 tours (pochette, références, etc.). Il me faut donc, si je calcule bien, 2 pages .php en plus des deux ci-dessus ? Nommons-les : artiste_disco.php et disco_details.php. Ça te semble OK ?
|
C'est possible, un peu fatigué pour comprendre les phrases trop longues à cette heure ci [bigsmile]
|
Bien. Pour faire des essais, par quoi je commence ? Je suis un peu paumé à cause des liens, en fait.
|
comme déjà dit, il faut savoir marcher avant d'apprendre à courrir[clindoeil]...
Commence donc par:
créer le fichier qui affiche l'alphabet avec
<a href="nom_de_page.php?lettre=a">A</a>
<a href="nom_de_page.php?lettre=b">B</a>
<a href="nom_de_page.php?lettre=...">...</a>
<a href="nom_de_page.php?lettre=z">Z</a>
ou nom_de_page.php est bien sur à ta discrétion (j'avais pris dans mon premier post le nom choixchanteur.php)
puis de savoir faire afficher les nom de chanteurs en fonction de la lettre choisie en créant la requete sql en utilisant la condition que je t'indique en langage php cette fois ci
<? if ($lettre==''){
$sql="SELECT * FROM chanteur ORDER BY nom"
}else {
$sql=sprintf("SELECT * FROM chanteur WHERE `chanteur` like`%s` ORDER BY nom", $lettre);
}
?>
de créer un jeu d'enregistrement
(je concidère que $conn contient toutes les données nécessaires à l'acces à la DB et qu'elle a été correctement choisie [clindoeil]
<?
$cherche= mysql_query($sql, $conn) or die(mysql_error());
$trouve= mysql_fetch_assoc($cherche);
?>
puis de faire afficher les noms avec les liens
<? do { ?>
<a href="nom_de_la_page.php?artiste=<? echo $trouve[id];?>"><? echo strtoupper($trouve[nom]).' '.$trouve[prenom] ?> </a><br>
<? } while ($trouve= mysql_fetch_assoc($cherche)); ?>
et ca marche (normalement en tout cas, car je n'ai pas vérifier le code, fait de tete)
bien sur, nom_de_la_page est le nom de la page qui devrait afficher les informations concernant le chanteur sélectionné (correspond plus ou moins à la page disco.php de mon premier post [clindoeil]) | | | | | sianhurley | Posté le 25/09/2003 à 18:18 | Petit astucien
128 Messages
| Attention lorsque tu tapes du code de mémoire : il manquait un crucial ; après une requête et j'ai eu droit à une magnifique "parse error" qu'il m'a fallu un certain temps pour identifier. Je rappelle que je me suis mis au PHP le week-end dernier seulement.
Voici ce que j'ai fait. D'abord j'ai créé une page "connexion.conf.php", puis une page "database.inc.php" que je mets en "require" au début de tous mes scripts pour m'éviter d'avoir à retaper mes paramètres de connexion. Sur la page "database.inc.php" le fichier "connexion.conf.php" est en "require". Pour ton information je travaille avec PHPEdit.
J'ai ensuite créé la page "alphabet.php" :
<a href="artistes.php?lettre=a">A</a>
<a href="artistes.php?lettre=b">B</a>, etc.
Puis la page "artistes.php" où devrait s'afficher le résultat du choix d'après la lettre. Là, ça coince. Il doit manquer qqchose dans le code, car si l'alphabet s'affiche bien sur la page "alphabet", strictement rien ne s'affiche sur la page "artistes". Pas d'erreur : aucun affichage, hormis celui de mon BGCOLOR. Voici cette page :
<HTML>
<HEAD></HEAD>
<BODY BGCOLOR="indianred">
<?php
require 'database.inc.php';
if ($lettre=='')
{
$sql='SELECT nom, prenom FROM artistes ORDER BY nom';
}
else {
$sql=sprintf('SELECT nom, prenom FROM artistes WHERE `artistes` like`%s` ORDER BY nom', $lettre);
}
?>
</BODY>
</HTML>
Comme je n'arrivais pas à résoudre ce problème, j'ai créé une page "test.php" avec une requête basique, histoire d'arriver au moins une fois à afficher une requête, n'importe laquelle. Voici cette page :
<HTML>
<HEAD></HEAD>
<BODY BGCOLOR="indianred">
<?php
// Connexion à la base de données
require 'database.inc.php';
// Requête
§requete = 'SELECT nom, prenom FROM artistes';
// Exécution de la requête
§resultat = mysql_query( §requete );
// Récupération des enregistrements
§enregistrement = mysql_fetch_array( §resultat );
// Affichage du résultat
echo §enregistrement['prenom'] - '<br>';
echo §enregistrement['nom'] - '<br>';
?>
</BODY>
</HTML>
Et là, j'ai droit à une incompréhensible "parse error" : "unexpected '=' à la ligne 8". Et la ligne 8 est celle-ci : §requete = 'SELECT nom, prenom FROM artistes';
J'ai essayé de jouer avec les "double quote" et les "simple quote" : nada, toujours la même erreur à la même ligne. Il était alors 5 heures du matin, et j'ai abandonné la partie.
Tu vas certainement sourire en repérant tout de suite l'erreur, mais moi, néophyte que je suis, j'y pige que dalle, et ce n'est pas faute d'avoir à portée de main 36 bouquins et 36 sites.
Une petite aide pour un pauvre usager perdu ? [confus][bigsmile] | | | | | koala01 | Posté le 25/09/2003 à 18:25 | Astucien
4715 Messages
| l'erreur est là: §requete = 'SELECT nom, prenom FROM artistes';
Et d'ailleurs c'est valable pour tous les noms de variables: C'est un signe dollar"$" qu'il faut et non un signe paragraphe"§" [clindoeil]
En plus tu peux tres bien décider de sélectionner tous les champs de la base de données et pas uniqueement le nom et le prénom [clindoeil] | | | | | sianhurley | Posté le 25/09/2003 à 18:55 | Petit astucien
128 Messages
| M... alors ! Such a stupid man ! Et moi qui ai dansé sur la tête deux heures durant sans voir ça ! Pourquoi alors me signale-t-on une erreur concernant le signe = ? Je me suis focalisé là-dessus. Effectivement, tu as dû bien rire. Et moi aussi en te lisant par la même occasion.
Euh... et pour le reste ?
Ne te sens pas obligé de me répondre dans l'heure, hein. J'ai hâte d'obtenir des résultats, mais ça ne urge pas. J'ai lu par ailleurs que tu étais un peu débordé. [clindoeil] | | | | | koala01 | Posté le 25/09/2003 à 19:03 | Astucien
4715 Messages
| sianhurley a écrit :
M... alors ! Such a stupid man ! Et moi qui ai dansé sur la tête deux heures durant sans voir ça ! Pourquoi alors me signale-t-on une erreur concernant le signe = ? Je me suis focalisé là-dessus. Effectivement, tu as dû bien rire. Et moi aussi en te lisant par la même occasion. |
je ne me serais pas permis...[clindoeil]
|
Euh... et pour le reste ?
|
si le reste concerne
Puis la page "artistes.php" où devrait s'afficher le résultat du choix d'après la lettre. Là, ça coince. Il doit manquer qqchose dans le code, car si l'alphabet s'affiche bien sur la page "alphabet", strictement rien ne s'affiche sur la page "artistes". Pas d'erreur : aucun affichage, hormis celui de mon BGCOLOR. Voici cette page :
<HTML>
<HEAD></HEAD>
<BODY BGCOLOR="indianred">
<?php
require 'database.inc.php';
if ($lettre=='')
{
$sql='SELECT nom, prenom FROM artistes ORDER BY nom';
}
else {
$sql=sprintf('SELECT nom, prenom FROM artistes WHERE `artistes` like`%s` ORDER BY nom', $lettre);
}
?>
</BODY>
</HTML>
ben, c'est normal, tu définit une requete sql, mais tu n'en fais rien [clindoeil]
|
Ne te sens pas obligé de me répondre dans l'heure, hein. J'ai hâte d'obtenir des résultats, mais ça ne urge pas. J'ai lu par ailleurs que tu étais un peu débordé. [clindoeil]
|
ne t'en fais pas, il est vrai que je suis quelques peu "overbooke", mais aujourd'hui, c'est une relache exceptionnelle de jeudi [clindoeil]...et comme les réponses sont faciles à donner [clindoeil] | | | | | sianhurley | Posté le 25/09/2003 à 19:13 | Petit astucien
128 Messages
| koala01 a écrit :
ben, c'est normal, tu définit une requete sql, mais tu n'en fais rien |
Oui, je me doutais qu'il manquait qqchose. Mais quoi ? Si je commence à piger tout doucement le système des requêtes avec les variables, les conditions et l'affichage m'échappent un peu. Sans parler des boucles.
Mais je vais utiliser ma page de tests pour pousser le bouchon de plus en plus loin en matière de requêtes, d'affichages, de conditions et tutti quanti. Ainsi seulement j'apprendrai à me débrouiller seul.
Merci encore. | | | | | koala01 | Posté le 25/09/2003 à 19:32 | Astucien
4715 Messages
| essaye de penser à la manière "que doit faire le serveur (et de quoi a-t-il besoin)"
et de là, la logique viendra (presque) toute seule...
on se doute que le serveur doit afficher les enregistrements d'une table qui se trouve dans la base de données...soit.
Mais que lui faut-il pour y arriver [question]
il lui faut l'acces à la base de données (c'est fait avec les fichiers includes)
il doit savoir connaitre la question à poser à la base de données (on lui donne la requete sql, c'est fait)
il faut maintemant lui dire d'interroger la base de données, et nous allons tuiliser différentes variables et différentes fonctions gracieusement données par le langage.
cela correspond (mis à par l'erreur du $) à
// Exécution de la requête
$resultat = mysql_query( $requete );
dans ton code...
Ce résultat, il doit le retenir dans une nouvelle variable... ca correspond aux deux lignes suivantes (la première est un commentaire)
// Récupération des enregistrements
$enregistrement = mysql_fetch_array( §resultat );
(mysql_fetch_assoc ou mysql_fetch_array servent à cela)Comme il y a plusieurs valeurs, il les mets toutes dans un tableau
ensuite, il faut qu'il refasse certaines instructions (afficher le nom...) plusieurs fois: nous créons une boucle avec
do{ (signifie fait)
les instructions à refaire
} while ($enregistrement= mysql_fetch_assoc($resultat)); (signifie jusqu'à ce que la variable soit la meme chose que l'association récupérée)
et les instructions à refaire, elles sont simples:
afficher le champs nom, un espace et le champs prénom (<? echo $enregistrement[nom].' '.$enregistrement[nom]; ?>)
rajouter un retour à la ligne (<BR>)
Et voilà [clindoeil]
Modifié par koala01 le 25/09/2003 19:46 | | | | | sianhurley | Posté le 25/09/2003 à 19:46 | Petit astucien
128 Messages
| Beuh !
Donc si je reprends ma page de tests, je dois rajouter une boucle ? Parce que là, avec la correction effectuée (remplacement du signe § par $), il m'affiche qqchose, mais un triste 00... | | | | | koala01 | Posté le 25/09/2003 à 19:56 | Astucien
4715 Messages
| rajoute une fois, avant la boucle, un affchage de la requete sql pour voir ce qu'elle donne
un simple
echo $sql; suffit...
Ceci dit, je crois que dans la condition:
if ($lettre=='')
{
$sql='SELECT nom, prenom FROM artistes ORDER BY nom';
}
else {
$sql=sprintf('SELECT nom, prenom FROM artistes WHERE `artistes` like`%s` ORDER BY nom', $lettre);
}
il faudrait faire un léger ajout:
if ($lettre=='')
{
$sql='SELECT nom, prenom FROM artistes ORDER BY nom';
}
else {
$lettre.='%';
$sql=sprintf("SELECT nom, prenom FROM artistes WHERE `artistes` like`%s` ORDER BY nom", $lettre);
}
car il faut un signe % dans la requete afin de signaler à MySQL qu'il doit chercher d'autres caractères apres la lettre [clindoeil]...
bien mettre des guillemets ("), et non de simples apostrophes (')dans sprintf (au début et à la fin uniquement)
Modifié par koala01 le 25/09/2003 19:58 | | | | | sianhurley | Posté le 25/09/2003 à 20:37 | Petit astucien
128 Messages
| Ne mélangeons pas. Dans un premier temps, j'aimerais pouvoir réussir un test d'affichage simple. Reprenons ma page "test.php" que voici :
<HTML>
<HEAD></HEAD>
<BODY BGCOLOR="indianred">
<?php
// Connexion à la base de données
require 'database.inc.php';
// Requête
$requete = 'SELECT nom, prenom FROM artistes';
// Exécution de la requête
$resultat = mysql_query( $requete );
// Récupération des enregistrements
$enregistrement = mysql_fetch_array( $resultat );
// Affichage du résultat
echo $enregistrement['prenom'] - '<br>';
echo $enregistrement['nom'] - '<br>';
?>
</BODY>
</HTML>
Il manque une boucle, ok. Quelle est-elle exactement au vu de la requête demandée, et où dois-je la placer ?
Je rappelle que ce qui semble évident pour toi est pour moi une purée de pois où je distingue à peine un arbre à 20 cm. [boom] | | | | | koala01 | Posté le 25/09/2003 à 20:46 | Astucien
4715 Messages
| sianhurley a écrit :
Ne mélangeons pas. Dans un premier temps, j'aimerais pouvoir réussir un test d'affichage simple. Reprenons ma page "test.php" que voici :
<HTML>
<HEAD></HEAD>
<BODY BGCOLOR="indianred">
<?php
// Connexion à la base de données
require 'database.inc.php';
// Requête
$requete = 'SELECT nom, prenom FROM artistes';
|
modifie la requete en
$requete="SELECT * FROM artistes";
Pense à vérifier que le nom de la tables soit correctement orthographié (s à la finc du nom de table [question] et qu'elle existe
|
// Exécution de la requête
$resultat = mysql_query( $requete );
// Récupération des enregistrements
$enregistrement = mysql_fetch_array( $resultat );
// Affichage du résultat
|
la boucle commence ici
do{
|
echo $enregistrement['prenom'] - '<br>';
echo $enregistrement['nom'] - '<br>';
|
et finit ici
} while ($enregistrement= mysql_fetch_assoc($resultat));
|
?>
</BODY>
</HTML>
Il manque une boucle, ok. Quelle est-elle exactement au vu de la requête demandée, et où dois-je la placer ?
Je rappelle que ce qui semble évident pour toi est pour moi une purée de pois où je distingue à peine un arbre à 20 cm. [boom]
|
je n'oublie pas, mais j'ai tendance à donner les infos par paquet[rougir] sorry[clindoeil] | | | | | sianhurley | Posté le 25/09/2003 à 21:53 | Petit astucien
128 Messages
| Cette fois, c'était un peu plus compréhensible. Mais hélas ! j'ai droit à un alignement de zéro correspondant apparemment au nombre d'enregistrements de ma base. J'ai bien vérifié l'orthographe. Je remets le script corrigé :
<HTML>
<HEAD></HEAD>
<BODY BGCOLOR="indianred">
<?php
// Connexion à la base de données
require 'database.inc.php';
// Requête
$requete = 'SELECT * FROM artistes';
// Exécution de la requête
$resultat = mysql_query( $requete );
// Récupération des enregistrements
$enregistrement = mysql_fetch_array( $resultat );
// Affichage du résultat
do{
echo $enregistrement['prenom'] - '<br>';
echo $enregistrement['nom'] - '<br>';
} while ($enregistrement= mysql_fetch_assoc($resultat));
?>
</BODY>
</HTML>
On y arrivera, on y arrivera... [clindoeil] | | | | | koala01 | Posté le 26/09/2003 à 00:58 | Astucien
4715 Messages
| excuse-moi pour le léger délai, mais j'ai pris la peine de réfléchir un tout petit peu...
Pourrais tu modifier la ligne
$resultat = mysql_query( $requete );
en
$resultat = mysql_query( $requete )or die(mysql_error());
De manière à avoir une éventuelle erreur dans la gestion de la requete | | | | | sianhurley | Posté le 26/09/2003 à 01:57 | Petit astucien
128 Messages
| Ça ne change rien du tout : alignement de 194 zéros (soit le nombre de mes enregistrements).
Le bât doit blesser ailleurs. Je suis assez calme et j'ai essayé de comprendre. J'ai créé un autre script de test (test_test.php) en me passant cette fois des fichiers "connexion.conf.php" et "database.inc.php". Voici le script en question :
<?php
// Connexion au serveur de données
if(mysql_connect('localhost', 'root', '') > 0)
echo 'Connexion réussie !';
else
echo 'Connexion impossible !';
// Sélection de la base
if(mysql_select_db('seventies')==true)
echo 'Sélection de la base réussie';
else
echo 'Sélection de la base impossible';
// Requête
$requete = 'SELECT nom, prenom FROM artistes';
$resultat = mysql_query ($requete)
or die ('Erreur dans la requête : ' - $requete - ' <br> avec l\\'erreur : ' - mysql_error());
// Affichage
$enregistrement = mysql_fetch_array($resultat);
// Affiche le champ - Prénom -
echo $enregistrement ['prenom'] - '<br>';
// Affiche le champ - Nom -
echo $enregistrement ['nom'] - '<br>';
?>
Et là, quelque chose s'affiche enfin, mais pas forcément ce que je voulais :
Connexion réussie !Sélection de la base réussie00
Encore deux zéros ! Donc quand je fais un SELECT sur deux champs, il me retourne 2 zéros. Quand je fais un SELECT sur tous les champs, il me retourne autant de zéros alignés qu'il n'y a d'entrées dans la base. [confus]
Je déduis de tout cela que le problème ne provient pas des scripts. Il me retourne des résultats comme si tous les champs de ma base ne contenaient aucune donnée. Y a-t-il qqchose que je puisse (et doive) faire depuis PhpMyAdmin ? Une vérification d'usage ? | | | | | koala01 | Posté le 26/09/2003 à 02:22 | Astucien
4715 Messages
| remplace peut etre
$enregistrement = mysql_fetch_array($resultat);
par
$enregistrement = mysql_fetch_assoc($resultat);
C'est cette fonction que j'utilise généralement et elle fonctionne [clindoeil] | | | | | sianhurley | Posté le 26/09/2003 à 06:37 | Petit astucien
128 Messages
| Non, non et non. À vrai dire, je me doutais que ça non plus ne marcherait pas. Pourquoi, mais pourquoi m'aligne-t-il des zéros alors que j'ai 209 entrées dans ma base ?
Ceci dit : info. J'ai ajouté un élément à ma requête pour qu'il m'affiche le champ "naissance" et une date, une seule, s'inscrit à la suite des zéros : 1943 !
Connexion réussie !Sélection de la base réussie001943
Il se fait que 1943 est l'année de naissance du premier artiste de ma base par ordre alphabétique : Adamo (avec l'id_artiste 5), mais le champ "naissance" ne contient pas que l'année, mais "1943-11-01". Et si je change l'ordre des artistes, en les classant par leur ID, il m'affiche 1945, soit la l'année de naissance de l'ID 1 : Gérard Lenorman !
C'est quoi ce cafouillazibule ?
En plus, tout aligné sur la même ligne.
Cela t'aide-t-il à comprendre ce qui se passe ?
Si j'ajoute une quatrième requête sur le "real_name", il m'ajoute un zéro. Autrement dit il n'affiche (et partiellement) que le contenu des champs de type "date" et pas celui, sinon sous forme de zéros, des champs de type "varchar". | | | | | sianhurley | Posté le 26/09/2003 à 06:53 | Petit astucien
128 Messages
| Ironie : si j'ajoute en bas de page un echo ('Et merde !'); - il me l'affiche, bien sûr ! [bigsmile] | | | | | sianhurley | Posté le 27/09/2003 à 01:55 | Petit astucien
128 Messages
| Problème résolu.
En fait il manquait une boucle ("while", etc) et surtout je devais utiliser le . de concaténation au lieu du tiret.
[fete] | | | |
| | Haut de la page |
| | Inscrivez-vous ! |
- Posez vos questions
- Résolvez vos problèmes
- Aidez les autres
- Participez et créez vos discussions
- Dialoguez en privé avec d'autres membres
- Suivez vos sujets préférés
- Affichez les signatures des membres
|
|