Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Créer une page internet assez complexe


Messages recommandés

Posté(e) (modifié)

Je n'avais pas pensé à mettre plusieurs thème par citation, pour simplifier, plutôt que de créer une deuxième table pour ça, serait-ce possible dans la table principale de mettre 2 ou 3 colonnes thèmes dont seulement 1 doit obligatoirement être remplie, et lorsqu'on fait une recherche par thème php fait la recherche sur les 3 colonnes en même temps. Par contre un seul type par citation, c'est suffisant.

 

Pour ce qui est des notes est commentaires, dis-moi si j'ai bien compris le fonctionnement (je ne demanderai pas d'inscription, par contre un pseudo pour les commentaires devra être entré) : quand quelqu'un envoi une note ou un commentaire, ça écrit dans la deuxième base de donnée l'id de la citation, la note, le pseudo et le commentaire ou seulement un des 3 et les autres cases reste vide. Dans cette table on aura plusieurs fois le même id puisqu'il correspond à l'id des citations. Lorsqu'on veut afficher les commentaires il faut demander à php d'aller chercher tous les commentaires ayant l'id de la citation et pareille pour les notes sauf qu'au lieu de les écrire on fait une moyenne. Comme il y aura plus de notes que de commentaires logiquement, ne vaut-il pas mieux les séparer ? ou plus simplement encore se passer des commentaires qui ne sont peut-être pas des plus utiles pour ce genre de site ?

 

Par contre je n'ai rien compris à quoi sert les tables nomenclatures.

Et je ne vois pas l'utilité d'un timestamp pour ça, pourrais-tu m'expliquer.

Le compteur c'est une bonne idée, mais je sens que ça va pas mal me compliquer la vie pour pas grand chose, je préfère à la rigueur prévoir la colonne dans la base de donnée mais ne pas l'écrire au début, je verrai ça quand tout le reste fonctionnera, surtout que le hit parade c'est justement le but de la note.

Modifié par ricou33

  • Modérateurs
Posté(e)

Thèmes

Oui, tu peux transiger par rapport à un modèle de données pur, et choisir de te limiter à un nombre de thèmes déterminé.

Avantages : une seule table.

Inconvénients : trois zones à saisir (au lieu d'une en boucle); ordre SQL un peu cher (where Theme = Theme_1 or Theme = Theme_2 or Theme = Theme_3) au lieu d'un ordre simple en boucle; difficulté d'augmenter le nombre maximal de thèmes.

Commentaires

Si tu décides de dissocier note et commentaire (tables séparées, mais dynamique similaire), ça te permet de commencer seulement avec la notion de note, et d'ajouter aisément plus tard la notion de commentaire, sans reprise de données.

Nomenclatures

Tu peux t'en passer, si tu ne permets de choisir le type et le(s) thème(s) que par le biais de listes déroulantes (qui serviront de facto de nomenclatures).

Timestamp

Pour moi, c'est un réflexe, toujours pouvoir connaître la date de dernière mise à jour d'un élément. Mais ce n'est pas obligatoire.

Compteur

Les SGBD relationnels permettent d'ajouter à une table existante une nouvelle colonne, et ceci sans reprise de données. Tu n'es donc même pas obligé de prévoir ta colonne compteur à l'avance.

Posté(e) (modifié)

Thèmes

Alors ok j'adopte ta solution des 2 tables par contre j'ai besoin d'explications car là c'est vraiment flou dans ma tête. Dans cette table, pas d'id unique non plus, seulement l'id de la citation et le nom du thème et il faut mettre une ligne par id par thème (il doit donc y avoir au moins chaque id une fois et s'il y a plusieurs thèmes pour une citation il faut refaire une ligne avec le même id et le thème différent).

Pour faire une recherche par thème, il faut chercher dans cette table tous les id ayant pour le thème désiré et de renvoyer la citation en rapport avec le thème

Pour afficher les thèmes de la citation il faut aller chercher dans la table tous les thèmes ayant l'id de la citation désirée.

C'est ça ?

Commentaires

OK, alors ça me va.

Nomenclatures

Tu voulais que je fasse une table pour limiter les choix et également créer des noms plus courts ? Je préfère la liste déroulante.

Timestamp

Ok, je n'en mets pas

Compteur

Les SGBD ? Super Gestionnaire de Base de Données ? C'est vrai que j'ai vu dans dans phpmyadmin qu'on peut rajouter des colonnes.

 

 

 

PS : j'aimais bien ta présentation.

PS2 : Suite du correcteur orthographique de Firefox, il ne connait pas non plus "déroulante" qui est dans mon dico. Il connait déroulant, découlante et dé roulante mais c'est tout.

Modifié par ricou33
Posté(e)

Je suis confronté à plusieurs problèmes, il faudrait d'abord que j'arrive à me connecter à la base de donnée sur ovh -> voir le dernier message ici.

Quand ça sera résolu je pourrais vous montrer ce qui ne va pas.

 

En attendant j'ai réfléchi à l'histoire des notes. Le but est uniquement d'avoir une moyenne des notes postées par les visiteurs, et la possibilité de faire une recherche selon la moyenne. J'espère que ça fonctionnera bien et que j'aurais de nombreuses notes pour chaque citation, ce qui voudra dire que la table ayant les notes sera énorme. Si je créer la moyenne de chaque citation à chaque fois que quelqu'un visualise une page, avec je pense 20 citations par page ça va être long et faire beaucoup de requête à la bdd.

Ne serait-ce pas possible de créer une page php qui va calculer la moyenne et la mémoriser. Ce serait bien que cette page se mette à jour quand quelqu'un poste une note. Il n'y aurait plus qu'à l'ajouter en include dans la page où s'affiche les citations.

Est-ce possible ?

  • Modérateurs
Posté(e)

Alors, juste sur le problème de ta moyenne, tu as une solution simple, qui est de stocker deux nombres,

  • le nombre de notes,
  • le cumul de ces notes,

de sorte que tu pourras recalculer à chaque fois une moyenne exacte à peu de frais (en divisant le 2nd par le 1er).

 

Tu remarqueras au passage que tu n'as alors plus besoin d'une table des notes, mais seulement de deux colonnes supplémentaires dans ta table principale. Et la mise à jour est simple : à chaque nouvelle note, tu fais +1 dans le 1er, et +note dans le 2nd. Si tu veux faire luxe, tu peux stocker, en plus, la meilleure et la moins bonne note, par exemple... :P

Posté(e) (modifié)

Ca c'est une super idée Dylav, ça me plait et quelle simplicité !

 

 

Par contre pour l'instant j'ai d'autres souci :

 

a- La fonction ajouter une news avec la page d'administration ne fonctionne pas alors que la modification fonctionne, voici le bout du code :

if (isset($_POST['texte']) AND isset($_POST['auteur'])) //Si le formulaire "rédiger" renvoi des données
		{
			$texte = addslashes($_POST['texte']);
			$auteur = addslashes($_POST['auteur']);
			$type = addslashes($_POST['type']);

			echo $texte; //4 Lignes de test pour vérifier que les variables existent
			echo $auteur;
			echo $type;
			echo $_POST['id'];

		//Si c'est une nouvelle citation la page "rédiger" renvoi un id = 0 alors que si c'est une modification elle renvoi le n° de l'id de la citation à modifier
				if ($_POST['id'] == 0) 
					{
		// Ce n'est pas une modification, on crée une nouvelle entrée dans la table
						mysql_query("INSERT INTO humour1 VALUES('', '" . $texte . "', '" . $auteur . "', '" . $type . "')"); //Apparement ce qui me pose problème
					}
				else
					{
		// C'est une modification, on met juste à jour le texte, l'auteur et le type
						mysql_query("UPDATE humour1 SET texte='" . $texte . "', auteur='" . $auteur . "', type='" . $type . "' WHERE id=" . $_POST['id']); //Ca ça fonctionne
					}
		}

Explication : il y a un formulaire sur une page rédiger qui, lors de l'envoi des données, ramène sur cette page où sont listées toutes les citations. Mais avant de lister la page vérifie s'il y a un ajout ou une modification de citation.

 

De la même manière, ce code devrait effacer une ligne mais ça ne le fait pas :

if (isset($_GET['suppr_theme'])) //Si on veut supprimer un thème
			{
				echo $_GET['suppr_theme'];
				mysql_query('DELETE FROM themes WHERE id=' . $_GET['suppr_theme']);
			}

La variable suppr_theme contient l'id de la ligne à effacer, la commande echo renvoie bien ce numéro, par contre la requête sql ne se fait, la ligne n'est pas supprimé et je n'ai aucun message d'erreur.

 

 

b- Voici l'addresse du site.

J'avais eu une première idée de formulaire permettant d'effectuer des recherches multi-critères mais j'ai finalement trouvé ça trop compliqué pour l'instant, je l'ai juste mis pour montrer, je le reprendrai peut-être plus tard quand tout fonctionnera.

C'est donc sur le formulaire "recherche.php" où j'ai des questions :

 

1- d'abord est-ce bien de tout mettre ensemble comme ça où vaut-il mieux faire une page pour la recherche par auteur, une par type, une par thème et une pour les notes ?

 

2- Pour afficher les auteurs j'utilise une boucle qui écrit tous les auteurs qu'il trouve, comment lui dire de ne pas marquer 2 fois le même nom, je pense que c'est possible.

 

3- Par la suite il y aura surement pas mal d'auteur, il faudrait un classement par ordre alphabétique, mais l'inconvénient c'est qu'ils vont être classé par ordre du prénom, hors ce serait mieux par le nom. Faut-il que je fasse une colonne pour le nom et une pour le prénom pour faire ça ?

 

PS : faut pas faire attention à la présentation pour l'instant, j'ai juste fait un bout de css pour l'index.

Modifié par ricou33
  • Modérateurs
Posté(e) (modifié)

Page de recherche unique

Le problème, c'est que ta page va se mettre à déborder en hauteur dès que tu auras un nombre sigificatif d'auteurs, ce qui sera contradictoire avec l'idée de mettre d'un coup sous les yeux de ton lecteur la totalité des critères.

Par ailleurs, l'intérêt essentiel de montrer tous les critères ensemble serait de permettre une recherche croisée, par exemple "toutes les citations de Jean Cocteau concernant la famille". La difficulté résidera alors dans la façon de résoudre la question complexe ainsi posée...

Pour type, thème et note, tu pourrais utiliser des listes déroulantes (car les éléments y sont en nombre raisonnable et quasi-fixe). Pour l'auteur en revanche, pourquoi pas une pop-up (fenêtre secondaire) qui s'ouvre en appuyant sur un bouton "auteur" ? Pop-up étroite, avec possibilité de redimensionnement, ascenseur (car de toute façon ton nombre d'auteurs ne fera que croître), et choix par clic sur un auteur. Du coup, l'ensemble des pistes de choix peut être agencé sur une seule page.

 

Affichage des auteurs

Tu inclus dans ta requête SQL un critère de tri (genre ORDER BY AUTHOR_NAME), et il doit exister un paramètre DISTINCT qui ne rend qu'une fois chaque auteur. Les langages SQL se ressemblant tous, la requête serait quelque chose comme SELECT DISTINCT AUTHOR_NAME FROM AUTHOR_TABLE WHERE AUTHOR_NAME LIKE A% ORDER BY AUTHOR_NAME (ici, la clause WHERE donne les auteurs dont le nom commence par A).

 

Tri des auteurs

Si tu veux une présentation dans un ordre nom/prénom, il te faut effectivement deux colonnes séparées, respectivement LAST_NAME et FIRST_NAME, et la requête devient SELECT DISTINCT FIRST_NAME, LAST_NAME FROM AUTHOR_TABLE WHERE FIRST_NAME = "Jean" ORDER BY LAST_NAME, FIRST_NAME (ici pour ceux qui se prénomment Jean). Et rien ne t'empêche, malgré ce tri nom/prénom, de faire une présentation "Prénom Nom", en une seule zone reconstituée, plus conviviale.

 

Je laisse à d'autres le soin de te répondre à propos de PHP, tu sais que c'est un domaine qui sort actuellement de ma zone de compétence, au moins en matière de conseil. :P

Nota : les deux clauses WHERE ci-dessus sont juste là à titre d'exemples indicatifs, pour montrer comment on peut exprimer des critères de sélection pour cibler une liste de résultats.

Modifié par dylav
Posté(e) (modifié)
Page de recherche unique

Le problème, c'est que ta page va se mettre à déborder en hauteur dès que tu auras un nombre sigificatif d'auteurs, ce qui sera contradictoire avec l'idée de mettre d'un coup sous les yeux de ton lecteur la totalité des critères.

Effectivement, ma solution sinon était de limiter la auteur du cadre réservé aux auteurs afin qu'il se mette une barre de défilement juste pour eux.

 

Par ailleurs, l'intérêt essentiel de montrer tous les critères ensemble serait de permettre une recherche croisée, par exemple "toutes les citations de Jean Cocteau concernant la famille". La difficulté résidera alors dans la façon de résoudre la question complexe ainsi posée...
D'où ma première idée de formulaire de recherche avec des cases à cocher, libre aux visiteurs de cocher ou décocher les critères à volonté, mais ce n'est pas encore de mon niveau

 

Pour type, thème et note, tu pourrais utiliser des listes déroulantes (car les éléments y sont en nombre raisonnable et quasi-fixe). Pour l'auteur en revanche, pourquoi pas une pop-up (fenêtre secondaire) qui s'ouvre en appuyant sur un bouton "auteur" ? Pop-up étroite, avec possibilité de redimensionnement, ascenseur (car de toute façon ton nombre d'auteurs ne fera que croître), et choix par clic sur un auteur. Du coup, l'ensemble des pistes de choix peut être agencé sur une seule page.
Les pop-up ne sont pas un truc que j'adore, et je ne sais pas les faire, je crois que c'est du javascript, je ne m'y suis pas du tout interressé et n'en ai pas plus envie que ça pour l'instant.

Néanmoins je me base sur 70-80 auteurs qu'il devrait y avoir à terme, maxi 100 je pense. En mettant type, thème et note avec des listes déroulantes le tout sur la même ligne il reste une quinzaine de ligne voir un peu plus pour afficher les auteurs avec une résolution de 1024 sur 3 colonnes ça fait une cinquantaine de noms à l'écran. Donc il en tient pas mal mais j'ai peur que ça fasse fouilli.

La dernière option, qui me semble plus raisonnable, est l'affichage en cliquant sur une lettre de l'alphabet pour afficher tous les auteurs dont le nom commence par cette lettre.

 

 

Affichage des auteurs

Suffit de connaître le nom de la commande :P, pour info la requête exacte est "SELECT DISTINCT auteur FROM table ORDER BY auteur"

 

 

Tri des auteurs

Un peu de boulot en plus :P

 

Je laisse à d'autres le soin de te répondre à propos de PHP, tu sais que c'est un domaine qui sort actuellement de ma zone de compétence, au moins en matière de conseil. :P
J'avais oublié, alors merci tout de même pour tout tes conseils, j'espère que d'autres personnes viendront faire un tour sur le topic pour m'aider, y'a pas grand monde dans ce forum. Modifié par ricou33

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...