PHP : filtre de données

Fermé
skydosa Messages postés 25 Date d'inscription samedi 13 octobre 2012 Statut Membre Dernière intervention 5 février 2015 - Modifié par skydosa le 5/02/2014 à 13:18
skydosa Messages postés 25 Date d'inscription samedi 13 octobre 2012 Statut Membre Dernière intervention 5 février 2015 - 12 févr. 2014 à 09:31
Bonjour,


Voila je créé un site pour un projet d'école (L3). J'avais un site créé via un logiciel, convertis en HTML et que j'essaie d'animer via du PHP.


Le problème que le logiciel me faisait tenir trois sliders différent en trois pages différentes. Sur ces page, il n'y a que les Sliders qui change(et des titres, mais c'est pas un problème ça), les pages sont les même.


Voici le contenu MySql :

Table "chantier" : colonne "id_chantier" "titre chantier"
Table "image_chantier" : colonne "id_image_chantier" "id_chantier" "image_chantier"

voici le code (contenant juste le "mécanisme".

<div id="page">
<?php include('connexion.php');?>
<div id="bloc 1">
<ul>
//ici j'ai essayé d'y intégré la fonction Onclick, mais ça n'as pas marché.
   <li><a  href="#">lien 1</a></li>
   <li><a  href="#">lien 2</a></li>
   <li><a  href="#">lien 3</a></li>
   <li><a  href="#">lien 4</a></li>
</ul>
</div>

<div id="bloc 2">
<?php
//la modification de cette variable engendre un filtrage
$nbtype=1;
//cette boucle affiche tout les éléments de la table "image_chantier" du moment que l'image contient l'id_chantier spécifié
For($i=1;$i<500;$i++)
{
$requete1="SELECT * FROM image_chantier WHERE id_image_chantier=".$i." AND id_chantier=".$nbtype;
$resultat1=mysql_query($requete1);
$ligne1=mysql_fetch_assoc($resultat1);
echo $ligne1['image_chantier']."<br/>";
}
?>
</div>


(sachant qu'après la boucle image sera intégré au code du slider).


Mon problème est donc de pouvoir changer la variable "$nbtype=1" en un autre "id" en cliquant sur un lien. Grâce à google, j'ai vu qu'on ne peux pas jouer avec ça du coté client, pourtant, on m'avait fait comprend qu'il "était possible d'appliquer des filtrages. Il faudrait donc recharger la page en envoyant la modification de la variable $nbtype, cette modification se faisait automatiquement en cliquant sur un des lien.

Merci d'avance de votre réponse,
Je vous en serait vraiment reconnaissant,
Cordialement,
Skydosa
A voir également:

2 réponses

Salut,

quelques remarques qui pourront vous aider:

Si vous avez 3 pages identiques mais dont seul le contenu change pourquoi faire 3 pages et non une seule.

Les pages dynamiques utilisent des données issues de la base de données, donc la même page affiche un résultat différent en fonction de paramètres différents.
Vous vous trompez si vous filtrez les données avec PHP. C'est SQL qui permet cela, le filtre ou la clause du WHERE peut venir de l'utilisateur et c'est donc PHP qui permet d'acheminer cette donnée via un formulaire HTML vers la BDD mais c'est bien une requête (SQL) qui permet de 'filtrer'.

En suite, rien ne vous empêche d'avoir 3 requêtes correspondant aux 3 clauses de vos 3 diaporamas. Selon le choix déterminé pour afficher telle ou telle page vous utilisez l'un ou l'autre des résultats pour votre diaporama/slider.
La meilleure façon est de ne faire qu'une requête pour chaque cas mais cela semblait vous tenir à coeur de ne pas recharger la page lors d'un affichage (requête) différent(e).
Dans ce cas vous pouvez aussi utiliser AJAX qui fonctionne seulement le même principe mais en stockant les résultats des requêtes nécessaires en XML(méta-données).
Pour utiliser AJAX il faut par contre bien connaître le mécanisme client +serveur base de données+ langage serveur(https://www.commentcamarche.net/contents/221-reseaux-architecture-client-serveur-a-3-niveaux ) donc vous semblez encore peu familier.
0
edit: après avoir survolé votre code je vous conseille pas de faire une requête dans une boucle.

Cela signifie que vous vous connectez 500 fois à la base de données pour lui poser 500 questions. Mieux vaut pour la gestion ds ressources et la rapidité d'éxécution poser une seule question qui vous donne 500 réponses.

Le problème vint donc de votre compréhension des requêtes SQL; à vous d'adapter cela à votre programme.
Les sous-requêtes peuvent éventuellement vous aider l'utilisation d'alias...
Mais bref il y a quelque chose qui cloche dans votre façon de voir le programme et le mieux est de tout reprendre à la base en essayant de trouver une une requête vous évitant de faire ce que vous faites ui si ça peut marcher n'est pas du tout recommandé et sera source de problèmes.
0
skydosa Messages postés 25 Date d'inscription samedi 13 octobre 2012 Statut Membre Dernière intervention 5 février 2015 4
5 févr. 2014 à 13:47
Bonjour,

Pour la première remarque, justement j'essaie de le faire en une page. C'est le logiciel qui m'as créé le site en html qui m'as créé des pages séparé.

Pour la troisième remarque, ce qui me tiens surtout à coeur, c'est de n'avoir qu'un seul fichier (correspondant a une page). Dites moi si je me trompe (et si je me trompe je serais content d'avoir la solution :)), Mais pour je pourrais afficher un diaporama par page(qui se génère automatiquement suivant les données présente dans le serveur). Il faudrait donc que j'utilise la mêmes boucle pour les trois pages en modifiant juste la requête.
Mais enfaîte, moi je ne veut qu'une page pour que le future utilisateur n'ai pas a créer manuellement un page et toucher du code. Qu'il n'ai plus qu'a rentré un nouveau chantier associé à des images.

C'est vraiment difficile à expliquer, j'espère que vous m'aurez compris ^^'.

Donc si je dois recharger la page, c'est pas du tout un problème, il faudrait juste que cliquer sur un lien modifie la variable $nbtype présente dans la requête, et qu'il la renvois au serveur pour afficher les données voulu.
Je dois obligatoirement passer par du ajax ? (je ne connais pas du tout ce language, ca risque donc d'être compliqué)

Cordialement,
skydosa
0
Yo,
Relisez mon message et concentrez vous sur vos requêtes SQL qui est le but de l'utilisation de PHP.

Une fois ceci fait vous aurez la réponse, les boucles servent à rien, en PHP utilisez PDO(donc une structure objet toute faite) qui permet d'avoir à vous passer de boucles pour le pointeur sur le résultat de vos requêtes, du moins ce n'est pas vous qui vous en occupez.

Si vous cherchez un cours je vous conseille celui ci(complet et pratique):
http://fr.openclassrooms.com/informatique/cours/concevez-votre-site-web-avec-php-et-mysql

Sinon pour SQL:
http://sql.sh/
0
"..., ce qui me tiens surtout à coeur, c'est de n'avoir qu'un seul fichier (correspondant a une page)."

Pourquoi? Vous aurez de toutes manières plusieurs fichiers(voir description architecture tiers dont j'ai mis le lien) qui correspondent :
1_à l'affichage: HTML(même si la page indiques .php c'est le HTML qui est écrit en PHP).
2_Le traitement des données invisible à l'utilisateur: PHP envoyant des requêtes à la base de données et obtenant le résultat de celles ci.
3_Le fichier SQL qui permets de créer la base de données.

Les liens vers les cours que j'ai indiqué vous permettront de passer le cap de où vous bloquer(donc trouver la requête qu'il vous faut, mais peut être votre base(les tables) est mal faite à la base; en tout cas c'est inimaginable d'avoir un programme qui fait une boucle de 500 requêtes consécutives; si vous voulez remplir une casserole vous n'ouvrez pas et refermez pas le robinet 500 fois vous laisser couler pour la quantité désirée...la charge serveur est trop importante pour un résultat médiocre que vous pouvez obtenir en un coup de SQL).
Vous avez aussi ces liens si cela ne vous suffit pas et cherchez par vous même : Google est votre ami

https://www.commentcamarche.net/faq/1073-creer-un-site-beau-dynamique-et-respectueux-des-standards
0
skydosa Messages postés 25 Date d'inscription samedi 13 octobre 2012 Statut Membre Dernière intervention 5 février 2015 4
12 févr. 2014 à 09:31
je sais pas du tout si t'avais compris ce que je voulais, mais j'ai finalement reussis ce que je voulais faire avec du php et sans probleme client/serveur.

Dans les liens "href=chantier1.php" par exemple, je rajouter "href=chantier1.php?nbtype=1". Apres je recuperait la variable avec "$nbtype=$_GET['nbtype'];".

Sinon la le decomptage, il fallait passé par une requete SQL, puis la relier avec un variable dans la boucle.
Et vu qu'il m'affichait ne nombre de count que j'ai trouver grace a count sans le slider, j'ai rajouter une condition "IF" ou y a l'echo si $nbtype est bien égal ligne1('id_type')

Si ca peut resservir a quelqu'un,
Cordialement,
0