Upload de fichié=> lié avec Base de donnée

Eléphant du PHP | 169 Messages

12 févr. 2007, 15:41

Slt tous le monde !

Pour que vous puissez bien comprendre mon problème, je vais vous décrire toute la partie que j’ai déjà développé (qui fonctionne très bien) et ensuite je vous exposerai le problème ou je bloque depuis un certain temps car je n’arrive pas a trouvé de solution sur le net
Attention, n’oublié pas que je suis novice en PHP

Pour infos, tout ce que je réalise est en local sous Easyphp !

Voici ce que j’ai déjà mis en place
J’ai créé un agenda dynamique, qui affiche tous les congres qui se dérouleront chaque mois de l’année en cours.
Exemple :
Janvier : congrès 1, congrès 2
Février : congres 3
Mars : congrès 4, congrès 5


Je donne la possibilité de cliquez sur le nom du congrès pour accéder au détails de celui-ci

Voici la composition des pages
- index.php = affiche tous les congres listé par "mois"
- ajout.php = permet d'ajouter un nouveau congrès (dans la Base de donnée)
- modification.php = permet de modifier un congrès existant
- detail.php = permet de visualisé le détail du congrès
- suppression.php = supprimer le congres de la base de donnée


Voici les champs de la table AGENDA
id_agenda
congres_agenda
mois_agenda
date_debut_agenda
date_fin_agenda
ville_agenda
pays_agenda

MON PROBLEME
Je voudrais donnée la possibilité d’insérer un fichier PDF et une image JPG a chaque fois que je rajoute un nouveau congrès (ajout.php) et de pouvoir télécharger ou afficher les pièces jointes lorsque je visualise le détail du congres (detail.php).

J’ai bien trouvé le tuto pour uploader le fichier, par contre je ne sais pas comment mettre les upload en base de donnée (nom, poid etc...) et ensuite de récupérer les liens pour pouvoir affiché et télécharger les élément concernant le congrès choisi.

Faut il que je créer une table différente que j’appellerai « upload » ?
Ou bien dois-je rajouter des champs dans ma table AGENDA (nom_uplaod_agenda) ?


Donc si quelqu’un aurais quelques explications concrète, ou bien des liens a proposé qui traiterais de cela, il sont les bien venu, car je galère vraiment pour trouvé sur internet des explications…. La seule chose que j’ai trouvée et sur l’upload de fichier seule, qui n’est pas lié avec une base de donnée.

Merci a vous,
Un novice qui aimerais devenir débutant…. :roll:

Eléphant du PHP | 164 Messages

12 févr. 2007, 18:54

si j'était toi je ne chercherai pas à mettre le fichier en base de données, mais le chemin du fichier c'est bcp plus léger pour la base.......

Une fois le chemin stoké en base pour un congrès donné tu va cherche ton fichier avec le chemin que tu avais stocké voila.....

sinon je vais essayer de retrouver mon script qui insérais en base un fichier si vraiment tu y tiens......

Eléphant du PHP | 164 Messages

12 févr. 2007, 19:02

$donnees = addslashes(fread(fopen($fichier, "r"), filesize($fichier)));
ensuite tu fait un INSERT INTO classique


pour récupérer ton fichier tu fait l'inverse, tu fait ton SELECT et le resultat renvoyé tu le balance dans un fichier que tu crée (utilise fwrite) et balance y ton $result

PS: type de champs de la base de données pour stocker un fichier: "LONGBLOB"

Eléphant du PHP | 169 Messages

12 févr. 2007, 19:09

Je te remercie pour ses explication,
effectivement je ne désire pas mettre mon fichier dans la BD mais juste son nom, poid, et chemin

Eléphant du PHP | 164 Messages

13 févr. 2007, 10:42

Dans ce cas :

- pour le poid du fichier uploadé utilise

Code : Tout sélectionner

$_FILES[size]


- pour le chemin tu met dans ton INSERT le chemin du fichier pas de soucis pour ça.

- le nom utilise $_FILES[name]

voili voilou ensuite tu balance tes variables dans ton INSERT et tu exécute le requete!

Eléphant du PHP | 169 Messages

13 févr. 2007, 11:17

Ok merci,
par contre tu me dit dans mon INSERT je mets le chemin de mon fichier ?
pourrais tu me donner un exemple ? merci encore une fois

Eléphant du PHP | 164 Messages

13 févr. 2007, 11:54

Code : Tout sélectionner

$nom = $_FILES[upload][name]; $poid = $_FILES[upload][size]; $chemin = "dossier_de_stockage/".$nom; $query = "INSERT INTO matable (nom,chemin,poid)"; $query .= "VALUES ('".$nom."','".$chemin."',".$poid.")";

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

13 févr. 2007, 12:27

Nota : penser aux apostrophes/guillemets pour les noms d'index qui ne sont rien d'autre que des chaines. PHP est tolérent et fais la conversion en supposant qu'il s'agit d'une chaine et pas d'une commande ou d'une variable, mais autant lui épargner cette batterie de test :)
$nom = $_FILES['upload']['name']; 
Pensez également sur le forum à utiliser les balises
 pour du code php ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 169 Messages

13 févr. 2007, 12:34

Merci beaucoup pour ses informations