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)

Je ne me suis pas encore occupé des auteurs mais je pense commencer demain.

Je ne sais toujours pas pourquoi les codes plus haut ne fonctionne pas.

 

Mais surtout j'ai besoin d'une requête sql que je ne connais pas : sauf. J'avais pensé à except mais apparemment non.

 

En fait j'en ai besoin car pour la recherche par thème, j'utilise une requête qui me sors l'id de toutes les citations ayant le thème sélectionné et ainsi récupérer les citations. Mais je souhaite également récupérer les autres thèmes de chaque citation sélectionné, je refais donc une boucle à l'intérieur pour récupérer les thèmes, mais cela me donne également le thème sur lequel on fait la recherche, or je souhaite inscrire tous les autres thèmes de chaque citation sauf le thème de recherche, logique !

  • Modérateurs
Posté(e)

Bonsoir Ricou,

 

1ère étape : recherche des citations qui possèdent le thème sélectionné

 

SELECT citation FROM tableThème WHERE thème = thèmeSélectionné

 

2nde étape : pour chaque citation trouvée dans la 1ère étape, recherche de tous ses thèmes dont la valeur n'est pas celle du thème sélectionné (les deux conditions doivent être remplies)

 

SELECT thème FROM tableThème WHERE citation = citationTrouvée AND thème NOT = thèmeSélectionné

 

Cette seconde requête est un peu onéreuse, vue sous l'angle SQL. Pour de très gros volumes, il serait plus judicieux de réextraire tous les thèmes, et d'éliminer le thème sélectionné par un test a posteriori. Ta table tableThème ne sera probablement jamais suffisamment importante pour justifier cette optimisation.

 

Je suis un peu rouillé en SQL, mais il doit même y avoir moyen de réaliser les deux étapes en une seule requête, ou plutôt deux requêtes imbriquées,

SELECT ... WHERE ( SELECT ... ) ...

Posté(e)

Je n'y arrive, je n'ai pas de message d'erreur en utilisant NOT donc il connait bien ce mot mais je n'arrive pas à l'utiliser.

 

En plus j'ai encore un problème, j'ai mis un système de tri par nom, prénom, moyenne ou type, ce système fonctionne quand on fait une recherche par type ou par auteur mais pas si on fait une recherche par thème ou par type et thème simultané. Je sais pourquoi mais je n'ai pas de solution, pour la recherche par type par exemple, la page de résultat à ce code :

$reponse1 = mysql_query("SELECT * FROM humour1 WHERE type='$recherche_type' AND moyenne >= '$notemini' AND moyenne <= '$notemaxi' ORDER BY $recherche_tri DESC"); //ressort toutes les entrées ayant le type sélectionné par ordre de $recherche_tri
while ($donnees1 = mysql_fetch_array($reponse1))
{
	echo 'Auteur : ' . $donnees1['auteur'] . ' <br/>';
	echo $donnees1['texte'];

	$reponset = mysql_query("SELECT * FROM themes WHERE id='$donnees1[id]'") or die(mysql_error());//Récupère les thèmes ayant l'id de la citation
	while ($donneest = mysql_fetch_array($reponset))
	{
		$theme = $donneest['theme'];
	 	echo $theme . '<br />';
	}
}

Et pour la recherche par thème ce code :

$reponset = mysql_query("SELECT * FROM themes WHERE theme='$recherche_theme'"); //Récupération de toutes les entrées ayant le thème sélectionné
while ($donneest = mysql_fetch_array($reponset)) //Boucle pour lister tous les id sortis de la table
	{
		echo $donneest['theme']

		$reponse1 = mysql_query("SELECT * FROM humour1 WHERE id='$donneest[id]' ORDER BY $recherche_tri" DESC) or die(mysql_error()); //Récupérer toutes les entrées de tous les id sortis dans la boucle
		while ($donnees1 = mysql_fetch_array($reponse1)) //Resort toutes les données des id affichés par $donnees
			{
				echo 'Auteur : ' . $donnees1['auteur'] . '<br />';
				echo $donnees['texte'];
			}
	}

Donc en faite dans le premier l'ordre de tri se fait dans la première requête alors que dans le deuxième l'ordre de tri se fait dans la deuxième requête, au milieu de la boucle, et je ne peux pas faire le tri dans la première requête puisque la table en question ne contient pas les champs pour faire le tri.

Comment faire ?

Posté(e)

Mon problème du message 31 (le thème de la recherche qui s'affiche inutilement) est résolu.

En fait je fais une requête sql normale et dans la boucle pour les afficher je lui dis de vérifier si le résultat est égale à la recherche, si c'est le cas il ne renvoie rien, sinon il écrit le thème. C'est tout bête.

J'ai également résolu l'ajout d'une citation, c'est parce que je n'avais pas mis dans la commande insert des champs vide pour les notes donc la commande n'était pas complète. (cf: message 28)

Et j'ai trouvé pourquoi, bien que je ne comprenne pas trop, je n'arrivais pas supprimer un thème. C'était parce que le champ pour l'id unique s'appelait "index" et apparement ça posait problème, j'ai renommé ce champs en "idunique" en modifiant la requête suppression en conséquence et c'est bon. (cf: message 28)

Pour la recherche par auteur il y a soit la possibilité de tous les visualiser soit de choisir ceux dont le nom commence par A, B ou C ; ou D, E ou F... J''utilise une regex dans la requête sql pour le faire.

 

 

Mais il me reste quelques questions :

1- Le système de tri dont je parle dans mon message précédent.

 

2- Est-il possible de créer "un raccourci" pour du code ? J'ai par exemple, pour noter, ce code qui se répète 5 fois sur la même page. Ca raccourcirait le code si on pouvait au début de la page inscrire ce code en lui donnant un nom puis ensuite il n'y ait plus qu'à écrire ce nom pour effectuer le code.

echo '<form action="resultat.php?id=' . $id . '&type=' . $recherche_type . '&theme=' . $recherche_theme . '&tri=' . $recherche_tri . '&tri_ordre=' . $tri_ordre . '&auteur=' . $auteur . '&prenom=' . $prenom . '&notemini=' . $notemini . '&notemaxi=' . $notemaxi . '" method="post">';

									echo '<select name="noter">
											<option value="0">0</option>
											<option value="1">1</option>
											<option value="2">2</option>
											<option value="3">3</option>
											<option value="4">4</option>
											<option value="5" selected="selected">5</option>
											<option value="6">6</option>
											<option value="7">7</option>
											<option value="8">8</option>
											<option value="9">9</option>
											<option value="10">10</option>
										</select>
										<input type="submit" value="Noter"/>
									</form>
								</td>
							</tr>
							</table>';

  • Modérateurs
Posté(e)

Je ne connais pas le langage PHP, mais n'y existe-t-il pas une notion d'INCLUDE (de code) ?

Sinon, il doit bien y avoir une notion de fonction (FUNCTION), ou de sous-programme (SUBROUTINE ou SUB) ?

 

Ceci dit, c'est bizarre que ce bout de code ferme un tableau qu'il n'a pas ouvert ?

Posté(e)

Du nouveau, j'ai contourné mon problème de tri du message 31 pour le résoudre. N'ayant pas trouvé de solution j'ai rajouté dans la table "thème" les champs necessaire au tri, ça fonctionne mais ça m'alourdit la table pour pas grand chose, j'espère que c'est provisoire.

 

Pour mon 2ème problème, Dylav, je sais qu'il y a un include de page mais de code je ne sais pas. Quant aux fonctions, j'ai essayé mais je n'ai pas réussi pour ce code, alors que j'ai réussi pour autre chose. Je ne sais pas pourquoi.

Quant à la fermeture du tableau ne t'inquiète pas, c'est qu'il est ouvert beaucoup plus haut, ceci est juste la liste déroulante pour noter une citation.

 

D'ailleurs à ce sujet, je vais revenir dans tes compétences, j'aurais quelques questions.

1- Pour le site des rats tu m'avais gourmandé :P sur le fait que j'avais utilisé un tableau pour faire la présentation alors qu'il y avait une autre solution. Mais est-ce que je peux, pour afficher les résultats de la recherche de citations, utiliser un tableau. Pour l'instant c'est ce que j'ai fait, est-ce que ça va ou il y a une autre solution mieux, tout en gardant la même mise en page.

2- Le menu est en position fixe, j'ai vu que le problème est-que si on utilise pas toute la hauteur de l'écran le menu est tronqué et il n'y a pas de barre de défilement. Y'a-t-il un moyen d'éviter cela ou vaut-il mieux éviter de le mettre en position fixe ?

  • Modérateurs
Posté(e)

Présentation en tableau

Un tableau, c'est une énumération, c'est une liste colonnée de résultats. Son utilisation serait donc tout à fait appropriée si les 6 cases de tes citations étaient 6 colonnes d'un tableau. Tu aurais ainsi une ligne par citation, plus une ligne d'entêtes de colonnes, et il n'y aurait rien à redire. Mais ce n'est pas le cas... Alors deux solutions : soit passer outre parce que ras la casquette des pseudo-gourous sentencieux, soit tenter de jouer le jeu des blocs flottants pour rester orthodoxe. Sincèrement, c'est un coup de main à prendre, qui n'est finalement pas plus compliqué que de jongler avec des colspan et autres rowspan ! Tu remplaces ton enveloppe <table> par une <div> globale, dans laquelle tu vas empiler, de gauche à droite, 3 <div> contiguës, puis tu redécoupes les deux de gauche en conteneurs d'autres <div>, etc. (facile, Dylav, le "etc." juste au moment où ça se complique...). Pour garder une impression d'alignement d'une citation à l'autre, tu seras amené à fixer les largeurs des <div>, mais tu dois pouvoir le faire en % du conteneur précédent, ce qui permet l'expansion du bloc dans la page en fonction de la résolution d'écran de ton visiteur. Tu pourrais d'ailleurs le faire aussi pour la <div> positionnelle de gauche, avec par exemple width:15% au lieu de 157px. Voilà qui nous fait une habile transition...

 

Le menu positionnel de gauche

Chouette, la <div> positionnelle de gauche en forme de marge et de menu. Mais, sauf si tu veux faire croître ton menu de façon substantielle (qui risque de nécessiter un ascenseur), je te suggérerais d'augmenter la hauteur de la <div>, par exemple jusqu'à 1024px (ou même plus), de sorte que le trait vertical rouge et le quadrillage uniquement horizontal de la marge aillent déborder en bas pour la plupart des résolutions d'écran (dommage qu'on ne puisse pas dire height:100%), mais d'éviter l'apparition d'un ascenseur par overflow:hidden. Il te suffit de t'assurer que l'énumération du menu tient verticalement pour une résolution d'écran 800x600. Au pire, tu augmentes la largeur de ton menu pour diminuer la hauteur et éviter le scroll. Il y aura forcément du scroll dans les citations : un ascenseur, c'est déjà agaçant pour le visiteur, mais alors deux, à chaque fois ça me fiche en rogne (en tant que visiteur, bien sûr) !

Posté(e) (modifié)

Tableau :

Alors pour commencer, je vais tenter ça sur une page html, sans php, mais ça m'inquiète, je ne vois pas trop comment aligner des div. J'ai déjà le menu en float left, je ne suis donc pas sûr de pouvoir l'utiliser pour le corps et si je mets un float right il reste un div qui n'est pas aligné.

Enfin j'essaie ça tout de suite et je te dis si j'y arrive, par contre pour l'instant je ne m'occupe que de la résolution en 1024, les personnes utilisant des écran 15 pouces avec une résolution de 800 est très rare depuis la "monopolisation" des écrans plats et les 1280 ou plus auront juste des marges vide. Je verrais l'ajustement automatique dans un prochain css.

 

Menu :

Normallement le menu ne devrait plus s'agrandir, ou si c'est le cas j'enlève la position fixe et le remet en normal, c'est vrai que c'est énervant sinon les barres de défilement. Par contre ce qui m'inquiète en agrandissant la hauteur c'est effectivement les résolution de 800X600 qui ne pourront meme pas avoir d'ascenseur si ça dépasse et les écrans 16/9ème (notamment portable), pour lesquels ça doit être juste. C'est pour ça que je te demandais si c'était bien la position fixe dans ce cas là. Quant à augmenter la largeur du menu ça m'embête, je suis déjà juste pour afficher les citations, si je rétréci encore j'aurais pas assez de place. Par contre je changerai peut-être les noms, au début j'avais fait au plus simple et je n'y ai pas réfléchi depuis.

 

 

EDIT : Alors oui ça fonctionne comme tu dis mais j'ai quelques souci. Pour voir : 1 et 2. Ce sont 2 pages entièrement html avec le css au début, comme ça ça s'affiche dans le code source. :P

Si le texte et les thèmes font un maximum de 3 lignes, ce qui est le plus courant, c'est bon. Par contre si ça dépasse, comme dans mon exemple, les problèmes arrivent.

Donc dans le 1 le cadre du tour est fait avec une balise div qui encadre tout le reste, donc qui ne s'agrandit pas avec le texte.

Dans le 2 le cadre est autour du texte et des thèmes uniquement, donc sous noter ça ne s'agrandit pas et les thèmes et le texte sont indépendant.

T'as une solution pour éviter ça ?

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

Bonjour Ricou,

 

J'avais l'intention de consulter tes pages au petit matin, avant de m'attaquer à ma journée de travail. Manque de bol, mon proxy interdit la consultation des pages perso (probablement le string "http://perso..."). Il va falloir attendre ce soir... :P

Posté(e) (modifié)

Ah, dommage, ce soir je ne serai pas là, je pars en week-end.

Au cas où tu es un peu de temps dans l'après-midi et si tu repasses par là j'ai mis les pages sur ovh : 1 et 2.

 

Sinon c'est pas grave, je verrai ça à mon retour, j'aurai d'autres choses à faire sur les pages en attendant de toute façon. :P

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