[RESOLU] Creation annuaire/repertoire a partir d'un formulaire

Petit nouveau ! | 6 Messages

05 juil. 2012, 11:46

Bonjour,

Je ne connait pas grand chose en php et encore moins en BdD.
mais un boulot m'a été attribué dans une asso où je fais du bénévolat.
J'ai bien essayé de le leur expliquer, mais l'asso n'a pas le choix par manque de moyen pour payer ce genre de prestation.
Donc je suis obligé de m'y coller :p

Le boulot consisterait à créé un annuaire répertoriant les porteurs de projet qui sont passés par l'asso pour créer leur activité (c'est une asso d'aide à la création d'activité).
J'ai pensé faire ça par l’intermédiaire d'un formulaire en ligne qui remplirait une BdD qui elle serait utilisée pour afficher les données en tableau grâce a du php.

Avec un peu d'aide j'ai réussit à mettre un cahier des charges en place que voici :
Dans cet annuaire doit apparaître une ligne par projet (dossier),
Dans l'ordre doit apparaitre:

- Le logo, ou carte de visite si le logo n'existe pas/n'est pas fourni, rien si rien n'est fourni, la raison sociale,
- L'activité précise,
- nom, prénom du responsable, tel perso, statut,
- La ville,
- Le telephone pro, l'adresse, le contact sous forme d'un lien qui dirige vers une page formulaire type qui enverra le message directement dans la messagerie concernée (possible avec un faux popup?),
- Une rubrique à propos avec un début de descriptif et a la fin un lien "en savoir plus" ouvrant un panneau (faux popup) incluant des commentaires et une photo si celle ci est fournie (si c'est pas trop compliqué, sinon juste un lien en savoir plus). Ce faux popup aura trois paragraphes maximum de 450 caractères maximum chacun, une ou deux photos si fournies.

Le tout sera du html généré avec du php.
Les données seront récupérées d'une bdd.
Cette bdd sera remplie via un formulaire php qui sera au passage validé par un modérateur.

Il faudra toutefois prévoir:
- Que l'administrateur puisse modifier les infos avant de valider,
- Que les infos incomplètes puissent être stockées et non affichees afin de les sauvegarder pour y rajouter les données manquantes quand elles seront fournies via formulaire (je suis pas sur que la méthode soit vraiment bonne),
- Une mise à jour possible des données (via formulaire?),
- Pouvoir supprimer un dossier obsolète (archiver?),
- Qu'un porteur de projet puisse avoir plusieurs dossiers,
- Je pense que ce formulaire ne sera pas vu par plus de dix personne simultanément (du moins pour l'instant, et je pense pas vraiment que cela change),
- D'après ce que je comprend, un n° de dossier ne serait pas le mieux pour l'indexation, un n° d'adhérent serait il plus approprié?
- Une sauvegarde de la bdd,
- La plupart des informations ne sont pas obligatoires (bien que vivement recommandée),
- Ne pas imposer un enregistrement de membres serait un plus,
- Si un ou plusieurs fichiers image seront fournis par l'intermédiaire du formulaire, ils devront être stockés, non affichés. Puis après vérification et traitement seront inclus en bdd puis affichés.
-Il y a pour l'instant à peine un peu plus de 1000 projets menéS à terme et environ 200 projets voient le jour par an.
Mais ça me parait quand même un peu trop compliqué vu mon niveau.
Je me demandais si c'est vraiment faisable avec mon niveau et si quelqu'un peut me donner des pistes à suivre.

Au pire j'envisage d'envoyer un mail collectif incluant le formulaire qui sera retourné rempli et de compléter la BdD à la main, mais ça me parait un peu fastidieux.

Qu'en pensez vous? Avez vous des pistes pour ce genre de chose ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 juil. 2012, 10:38

salut,

Ce que tu demande n'est pas très compliqué et tu a déjà une bonne part du taf en réalisant le cahier des charges (assez précis) tu n'es pas dans le flou et ça va t'éviter de sortir des clous ;)


Vu le volume je ne te conseil pas trop l'accès libre c'est un nid a emmerde au niveau cohérence de la base ( comment va tu faire la différence entre pierre, Pierre ou PierRe :) ).

Si tu suis une démarche de dév la prochaine étape c'est de définir les règles de gestion (des phrases courte qui définissent une action) tu en tira les "acteurs" ce qu'ils font et au final modélisera l'application le code coulera de sources ;)

Plus simplement.

Commence par te demander ce que tu dois garder en base (a priori déja fait vu le CdC). Pense que chaque information doit rester unique (hors mis les clefs primaire pas de doublon, par exemple on ne retrouve pas le nom du mec / nana dans 4 tables différentes).

A partir de la on peu dire que :
- tu stock des projets : ce sera un objet (une table pour la base) celui aura pour attribut : un numéro de projet, un nom de projet(je suppose), un descriptif court, un descriptif long, un photo (facultative, attention on ne met l'image en base, même si techniquement c'est réalisable, mais le nom du fichier), une entreprise, et un auteur. Ne pas oublier un champs pour indiquer s'il est visible par tous ou pas (approuvé par un modérateur).
On vois de suite que certaine chose pourront faire doublon => entreprise et auteur pour cela tu aura deux tables (entreprise, auteur) sachant que la table auteur peux être généralisée à une table "membres" permettant la connexion (pour ajout de projet pas pour la consultation.
Une entreprise c'est quoi ?
- un nom / raison sociale
- un N° je sais plus quoi
- une adresse
- un logo

un membre c'est quoi ?
- un nom
- un prenom
- un email
- un N° de téléphone
- un type (normal / modérateur / administrateur) ceci peux d'ailleurs faire partie d'une table afin de gérer les niveaux simplement et de pouvoir en ajouter rapidement :)
(au minimum d'autre choses au besoin)

pour faire bien tu peux ressortir les photos des projets dans une autre table et permettre ainsi d'avoir plusieurs photos par projet. (c'est un lien, voir un type mime).

ce qui peux donner un MCD dans ce style la (j'ai pas forcé on peux aussi avoir une table pour les villes (pour les adresses) pour éviter les doublon foireux et obliger les gens à choisir dans une liste :D )
Image

ce qui donne en MDL (désolé il manque des relations à l'affichage ^^)
Image

et donc le script mysql
#Ma base de données : 

DROP TABLE IF EXISTS utilisateurs;
CREATE TABLE utilisateurs(
        idutilisateur     Int unsigned not null auto_increment,
        nom     Varchar (40) not null,
        prenom     Varchar (40),
        email     Varchar (255) not null,
        telephone     Varchar (25),
        motdepasse     Varchar (128) not null,
        idTypeUtilisateur     Int unsigned not null,
        PRIMARY KEY (idutilisateur)
)ENGINE=InnoDB;

DROP TABLE IF EXISTS typeUtilisateur;
CREATE TABLE typeUtilisateur(
        idTypeUtilisateur     Int unsigned not null auto_increment,
        nomtype     Varchar (25) not null,
        PRIMARY KEY (idTypeUtilisateur)
)ENGINE=InnoDB;



DROP TABLE IF EXISTS activites;
CREATE TABLE activites(
        idactivite     Int unsigned not null auto_increment,
        nomActivite     Varchar (50) not null,
        PRIMARY KEY (idactivite)
)ENGINE=InnoDB;

DROP TABLE IF EXISTS entreprises;
CREATE TABLE entreprises(
        idEntreprise     Int unsigned not null auto_increment,
        siret     Int (25),
        adresse     Varchar (250),
        raisonSociale     Varchar (150) not null,
        idactivite     Int unsigned not null,
        PRIMARY KEY (idEntreprise)
)ENGINE=InnoDB;

DROP TABLE IF EXISTS images;
CREATE TABLE images(
        idImage     Int unsigned not null auto_increment,
        lienImage     Varchar (100) not null,
        PRIMARY KEY (idImage)
)ENGINE=InnoDB;

DROP TABLE IF EXISTS projets;
CREATE TABLE projets(
        idProjet     Int unsigned not null auto_increment,
        nomProjet     Varchar (50) not null,
        descriptifCourt     Varchar (150) not null,
        descriptifLong     Varchar (2500),
        valider     Boolean not null default false,
        idutilisateur     Int unsigned not null,
        idactivite     Int unsigned not null,
        PRIMARY KEY (idProjet)
)ENGINE=InnoDB;

DROP TABLE IF EXISTS ImageProjet;
CREATE TABLE ImageProjet(
        idProjet     Int unsigned not null auto_increment,
        idImage     Int unsigned not null,
        PRIMARY KEY (idProjet,idImage)
)ENGINE=InnoDB;

DROP TABLE IF EXISTS logoEntreprise;
CREATE TABLE logoEntreprise(
        idImage     Int unsigned not null auto_increment,
        idEntreprise     Int unsigned not null,
        PRIMARY KEY (idImage,idEntreprise)
)ENGINE=InnoDB;

ALTER TABLE utilisateurs ADD CONSTRAINT FK_utilisateurs_idTypeUtilisateur_typeUtilisateur FOREIGN KEY (idTypeUtilisateur) REFERENCES typeUtilisateur(idTypeUtilisateur)
ALTER TABLE entreprises ADD CONSTRAINT FK_entreprises_idactivite_activites FOREIGN KEY (idactivite_activites) REFERENCES activites(idactivite)
ALTER TABLE projets ADD CONSTRAINT FK_projets_idutilisateur_utilisateurs FOREIGN KEY (idutilisateur_utilisateurs) REFERENCES utilisateurs(idutilisateur)
ALTER TABLE projets ADD CONSTRAINT FK_projets_idactivite_activites FOREIGN KEY (idactivite_activites) REFERENCES activites(idactivite)
ALTER TABLE ImageProjet ADD CONSTRAINT FK_ImageProjet_idProjet_projets FOREIGN KEY (idProjet) REFERENCES projets(idProjet)
ALTER TABLE ImageProjet ADD CONSTRAINT FK_ImageProjet_idImage_images FOREIGN KEY (idImage) REFERENCES images(idImage)
ALTER TABLE logoEntreprise ADD CONSTRAINT FK_logoEntreprise_idImage_images FOREIGN KEY (idImage) REFERENCES images(idImage)
ALTER TABLE logoEntreprise ADD CONSTRAINT FK_logoEntreprise_idEntreprise_entreprises FOREIGN KEY (idEntreprise) REFERENCES entreprises(idEntreprise)
Il manque surement des champs par rapport à ce que tu demande mais le minimum est la tu a juste a les ajouter :)

pour tous ce qui est SQL je te conseil : http://sqlpro.developpez.com + les tutos ici et sur http://www.phpdebutant.org ou http://www.lephpfacile.com pour les base mysql avec php

Ce qu'il te reste a faire
- Comprendre et mettre en oeuvre un espace membre. un tuto http://www.lephpfacile.com/howto/10-com ... bre-en-php
- Créer les pages d'ajout des projets (et donc d'images pour le projet)
- Crées les pages d'ajout d'entreprise / activité et image pour entreprise
- La pages d'administration qui permet de valider / corriger les projets
- La page d'inscription des membres :)
- Et toutes les autres fonctionnalité du CdC :)

Je te conseil d'utiliser l'extension PDO (de php) pour l'accès à la base de donnée (plutôt que mysql ou mysqli).

Prend les chose une par une :
- D'abord la partie visible (un fichier html de ce que ça va donner au final)
- Ensuite la partie membre
- L'affichage des projets (n'oublie pas la pagination et pourquoi pas un moteur de recherche a faire en dernier quand le reste fonctionne).
- L'ajout de projet
- La modération de projet (modification / suppression, passage de non valide à valide en changeant juste le champ valider de la table projet de 0 à 1).
- Ajouter les fonctionnalité que j'ai oublié (par exemple envoie de mail aux admin pour leurs dire qu'il y a de nouveaux projets par exemple, le formulaire de contact etc etc).

si tu a des questions, sur mon exemple, sur php, mysql ou le temps qui fait, le forum sera toujours la :)

bon courage.

@
Il en faut peu pour être heureux ......

Petit nouveau ! | 6 Messages

07 juil. 2012, 07:43

Merci beaucoup pour tes conseils, je vais essayer de les suivre à la lettre.
Je vais donc commencer par essayer de créer un espace membre.

Je dois avouer que je pensais recevoir une réponse bien plus floue, c'est cool.
Quelques petites questions quand même:
- Avec quoi tu as créé tous ça ? C'est un logiciel d'aide à la création de base de données ?
- Tu me dis d'utiliser l'extension PDO (de php), c'est quoi exactement ? Où est ce que je peux trouver cela, dans les tutos mis en liens ?

ViPHP
xTG
ViPHP | 7331 Messages

07 juil. 2012, 09:45

PDO c'est un module de PHP que tu as avec PHP5 et supérieur.
Il permet d'interfacer facilement des bases de données sans avoir à se préoccuper du type.
Cela facilite la portabilité du code.
Pour faire cours si un jour tu veux utiliser PostgreSQL plutôt que MySQL il suffit de modifier une ligne de configuration dans le code.
Tu trouveras des infos sur PDO dans la documentation PHP : documentation

Invité
Invité n'ayant pas de compte PHPfrance

12 oct. 2012, 11:43

J'ai été confronté à un soucis un peu similaire. Je souhaitais mettre en oeuvre un petit annuaire pour un site immobilier, un belle galère moi qui ne suis pas forcement un pro en dev. Un bon cahier des charges est inévitable pour bien savoir ou tu vas, et également je te conseille d'aller sur des sites concurrents ou de la même thématique pour y prendre quelques idées dans le code et la mise en forme des pages. Moi dans l'immobilier, j'avais un choix énorme et certains site m'ont bien inspiré et m'ont apporté de nouvelles idées plus simple. J'avais trouvé sur un autre forum des infos sur PDO que je connaissais et qui m'a bien aidé pour mes bases. Mais c'est pas si facile que ca. Bonne chance !