Comment écrire ceci différemment ? [PHP : Noob à la lutte!] - PHP - Programmation
Marsh Posté le 19-02-2003 à 18:56:11
alors là, y'a un testicouille dans la soupe aux choux où je ne m'y connais pas! tout d'abord , comment fais tu la liaison entre ta photo et le texte à lui associer?? il n'y a pas de lien entre tes deux requêtes! kelles sont tes clef primaires et étrangères???
à koi ressemble ta BDD??
selon l'algo que tu as écrit, et ce que ta paga affiche, tu n'as qu'une seule image dans ta BDD et trois textes, c ça??
ce qu'il te faudrait c une liaison entre tes deux requêtes! je pense que dans l'état des choses, si tu rajoutes une nouvelle image, elle sera présente trois fois dans ta page avec les 3 descriptions
Marsh Posté le 19-02-2003 à 19:08:31
Ah oui il est fort possible qu'il y aie une grosse testichouille dans la soupe au cou
Comme indiqué dans le titre, je suis débutant et i lest encore des notions que je n'ai que très sommairement assimilées...
Je vais tenter de te répondre du mieux que je peux :
Comment je fait la liaison entre image et texte : Euh c'est une très bonne question et je me demande pourquoi je ne me la suis pas posée avant
Clefs primaires et étrangères : Euh...je ne sais pas ce que c'est...
Quand à ma BDD pour ce qui nous concerne elle ressemble à ceci :
- 2 Tables :
anno_resum qui contient tout le texte sous les champ "categorie","sous_categorie","code_postal","localite","short_description" et qui contient aussi deux champs suplémentaire "statut" et "ID" pour des question d'identification et d'affichage...
file_attach qui contient toutes les références des images que j'upload sur le serveur lors de la mise à jour de la BDD. Voici les différents champs la compostant :
- file_id : c'est l'ID de l'annonce à laquelle le fichier est lié (ah ben le voici ptet le moyen de lier mes images à mes annonces non ?
- file_true_id : c'est une id secondaire dont j'ai eu besoin pour uploader plusieurs images du même "file_type" (cf ci dessous) sous la même "file_id"
- file_statut : pour l'affichage "temp" or "visible"
- file_server_name : le nom du fichier original pour l'afficher dans un tableau de supervisation des uploads lors de ceux ci...
- file_name : le nom du fichier tel qu'il est stocké et tel que je dois l'appeler
- file_ext : l'extension du fichier, je m'en suis servie pour créer le file_name lors de l'upload...
- file_type : soit mini_photo (dans ce cas ci), main_photo, extra_photo ou extra_plan
Enfin pour ta dernière question :
Dans ma BDD j'ai :
1 mini_photo par annonce qui doit apparaitre dans la page que tu peux visionner la haut
1 main_photo par annonce : celle-ci apparaîtra dans une fenêtre pop_up contenant des détail sur l'annonce
un nombre indéfini (max 10) extra_photo par annonce
un nombre indéfini (max 10) extra_plan par annonce
Ces deux derniers type d'images apparaîtront dans une extension de la fenêtre pop-up des détails...
Voila...tu sais tout
En gros, j'ai vraiment bcp bossé sur la partie enregistrement des données et j'ai pas mal réfléchis sur tout ce dont j'allais avoir besoin pour mon site.
Et maintenant j'essaie de me coller à l'affichage mais c'est nouveau pour moi et je rame
Marsh Posté le 19-02-2003 à 19:26:46
bon ben déjà c un peu plus clair!
déjà, pour afficher ce que tu veux dans ta page, ta requête devrait ressembler à ça :
select anno_resum.categorie, anno_resum.sous_categorie, anno_resum.code_postal, anno_resum.localite, anno_resum.short_description, file_attach.filename from anno_resum, file_attach where anno_resum.ID=file_attach.file_id and file_attach.file_type='mini_photo' and file_attach.file_statut='visible' and anno_resum.statut='visible';
bon, ça devrait déjà être mieux!
ensuite, tu n'as qu'une seule boucle while avec un seul fetch_array! ça doit marcher à peu près!
Ps: y'a qqchose qui me gène dans ta structure de donnée, mais je sais pas koi!
je te le dis si je trouve!
Ps2 : tu dis que tu as bcp bossé sur le stockage des données?? pourtant tu ne sais pas ce que sont des clefs primaires et étrangères (connaissance de base en bases de données)! m'enfin c pas grave, on peut s'en sortir sans, même si c moins "propre"
Marsh Posté le 19-02-2003 à 19:29:11
juste une explication :
dans ta table anno_resum, ID est ta clé primaire : c elle qui te permet de retrouver de manière non ambigüe la bonne annonce.
dans ta table file_attach, la clé primaire est probablement file_true_id, et file_id est une clé étrangère en ce sens qu'elle fait référence à anno_resum.ID
Marsh Posté le 19-02-2003 à 20:21:49
Merci énormément Arghbis
En effet ta solution pour la requête devrait me convenir !!
Pour ce qui est de cette histoire de clé c'est bien compris à présent ! En fait, j'ai un bon ami qui m'a épaulé pendant mon apprentissage ces deux dernières semaines et bien qu'il m'aie dit que mon champ ID serait la liaison entre mes trois table (car j'ai une table "anno_detail" qui contient tout les détails relatifs aux annonces), il ne m'a pas dit que cela s'appelait une clé primaire ou une clé secondaire...
Donc si j'ai bien compris le principe, dans ma table "anno_detail" ou figure aussi un champ "ID" qui se calque sur le champ "ID" de "anno_resum", ce champ "ID" est une clé étrangère de la table faisant référence à "anno_resum"... !?
Par contre, "file_true_id" ne me sert pas à grand chose tu sais.
Je t'illustre ça en exemple :
file_true_id n'est utilisé que lors de l'upload de "extra_photo" et "extra_plan" car l'admin peut s'il le souhaite uploader plusieurs de ces fichiers pour une même annonce.
Or mon "file_name" est crée comme suit ds mon code php : file_name = $file_id.".".$file_ext
En sachant que $file_id est égal à l'ID de l'annonce en cours d'insertion.
Le problème avec cette méthode est que dès que j'upload + d'un fichier pour la même annonce, $file_id, ou en d'autres mots, le nom du fichier, est le même pour ces multiples fichiers. Donc au fil des uploads, les fichiers s'écrasent les uns les uns les autres.
C'est pourquoi j'ai crée "file_true_id" qui équivaut en fait au "dossard" du fichier (:lol.
Si tu veux la huitième extra_photo uploadée, toutes annonces confondues, portera la file_true_id n°8, la 9ème portera le 9 et ainsi de suite...
Le fait est que ça je m'en fou...
Ce qui m'intéresse c'est que pour nommer mes extra_photo et extra_plan, je fait ceci :
file_name = $file_id."_".$file_true_id.".".$file_ext
Et voilà...
C'est peut-être une méthode qui n'est pas très propre mais elle fonctionne sans aucun problème jusqu'à présent...
Puis surtout...C'est tout ce que j'ai trouvé avec mon niveau de compétence du gars qui a écrit sa première ligne de code il y'a 9 jours à peu près
Allez c'est parti je me met au boulot !
Merci encore !
Marsh Posté le 19-02-2003 à 20:29:12
heu ben non en fait. dans ta table anno_detail, ID est aussi ta clé primaire, mais elle est en même temps clé étrangère (pas secondaire ) car elle fait "référence" à ID de anno_resum. M'enfin bon, c du détail technique à la limite! tant que tu as bien étudié tes clés primaires, tu ne devrais pas avoir de problèmes au niveau de l'intégrité des données.
Marsh Posté le 19-02-2003 à 20:34:25
EDIT ci-dessus...
Je post ceci juste pour dire que j'éditais mon post alors que tu répondais
Juste au cas ou si ce que j'ai écris pouvait te montrer plus clairement l'organisation de mes données...
A+
Marsh Posté le 19-02-2003 à 20:54:58
Yeah :
http://81.240.117.87/condrogest/list.php
Je suis trop content pis je viens d'apprendre comment faire des requêtes MySQL un peu plus souples...
THX
Marsh Posté le 19-02-2003 à 21:01:25
Bon l'étape suivante, c'est de faire en sorte que chaque mini photo soit un lien vers une page qui s'ouvre dans une fenêtre pop-up et qui contient les infos détaillées liées à l'annonce...
Huuu au boulot
La je vais devoir passer des infos via l'url...
Bon faut que je me renseigne la dessus...
Marsh Posté le 19-02-2003 à 22:38:43
qq conseils au passage :
- évite de donner aux fichiers l'extension .inc ! c'est à bannir. Surtout pour un fichier où devrait se trouver login/pwd Mysql. Le phps, c'est pas terrible non plus... sauf pour le développement et encore, mais au moins là tu sais que tu affiches le source.
- interdit le listing des répertoires
- configure apache pour qu'il charge la page index.php par défaut
- interdit l'accès à ton phpMyAdmin depuis internet.
ça fait bcp d'un coup je sais... mais le jour ou tu mettras ton site en production n'oublies pas de le faire, sinon tu vas te faire hacker
Marsh Posté le 19-02-2003 à 23:07:59
Ok Ethernal je prend note !! Je viens justement de lire un truc sur le fait qu'il fallait nommer les .inc en .php pour plus de sécurité !
Pour le listing des répertoire, je ne sais pas encore comment interdire cela mais je me penche sur la question...
Idem pour la Config Apapche et Phpmyadmin...
La je bosse avec un environnement de noob c'est clair ! J'ai configuré que le minimum et c'est la porte ouverte à toutes les crasses...
Merci des conseils
Marsh Posté le 19-02-2003 à 18:30:44
Bonjour !
J'écris un ptit script pour afficher dans un tableau des données d'une BDD MySQL.
Dans la colonne de gauche doivent apparaître des mini-photos dont les références sont stockées dans une table et dans la colonne de droite du texte...
Comme je voudrais qu'il y ai autant de tableau que d'entrée dans la BDD je fait ça avec une boucle WHILE...
Voici à quoi ressemble la page :
http://217.136.153.44/condrogest/list.php
et en voici le code :
http://217.136.153.44/condrogest/list.phps
Le problème actuellement, c'est que selon le fait que je place l'un ou l'autre WHILE devant l'autre...c'est la boucle en rapport avec le second WHILE qui fonctionnera...
Donc la dans l'état actuel du script, le texte de la colonne de droite est bien affiché, mais la photo est toujours la même alors qu'elle devrait changer elle aussi...
Puis voilà, je cherche un peu partout dans les manuels mais j'ai peu de pistes...
Merci à tout qui peut m'aider
Message édité par Robbb le 19-02-2003 à 18:39:13