Se connecter / S'enregistrer
Votre question

Upload de fichier

Tags :
  • Script
  • Programmation
Dernière réponse : dans Programmation
28 Septembre 2010 09:58:44

Bonjours

je suis a la recherche d'un script qui me permet de faire de l upload de fichier
avec une insertion dans une basse de donnée

j'ai deja une base que sur 1 fichier mais le reste je ne sais pas faire

merci de votre aide

Autres pages sur : upload fichier

a c 145 L Programmation
28 Septembre 2010 10:05:27

En quel langage ? Avec quel type de base ?
Peux tu détailler ce que tu as déjà, ce que tu veux stocker dans ta base ?
m
0
l
28 Septembre 2010 10:41:33

Désoler, je pensait l'avoir mis dans le titre
je fait de la programmation en php
et je suis héberger chez 1&1
ce qui se passe dans le passer j'avais besoin d'uploader que 1 seul fichier
maintenant que l'activité a augmenter, j''ai besoin d'uploader entre 1 et 10 fichier
je sais qu'avec le php c'est limité a 2Mo donc, je pense qu'il faire le code en php pour qu'il upload les fichier 1 par 1 (si je ne me trompe pas)
de plus le nom du fichier je veut qu'il soit inséré dans un table sql

je vous fait voir le code qui fonctionne parfaitement MAIS pour qu'un fichier


  1. <?php
  2. // je vérifie que le champs dl diag est remplis
  3. if(!empty($_FILES[dl_diag]))
  4. {
  5. // vérification du l'extention de fichier
  6. $ext = array('.pdf', '.PDF');
  7. $ext_fichier = strtolower(substr(@$_FILES['dl_diag']['name'], -4));
  8.  
  9. // transfere du fichier sur le serveur
  10. if(in_array($ext_fichier, $ext))
  11. {
  12. move_uploaded_file($_FILES['dl_diag']['tmp_name'], '../diag/'.$_FILES['dl_diag']['name']);
  13.  
  14. // insersion dans la base de donnée
  15. $id_agence = $_POST['nom_agence'];
  16. $date_diag = $_POST['date_diag'];
  17. $nom = $_POST['nom_client'];
  18. $prenom = $_POST['prenom_client'];
  19. $dl_diag = addslashes($_FILES['dl_diag']['name']);
  20.  
  21. // Insertion dans la base de donnée
  22. include('connection.inc.php');
  23. $connexion = mysql_connect($bdd_host, $bdd_user, $bdd_passe) or die('<br/>Connexion au serveur impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
  24. $choix_base = mysql_select_db($bdd_base, $connexion) or die('<br/>Sélection de la base de donnée echouée.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
  25. $requete = "INSERT INTO diag VALUES ('', '$id_agence', '$date_diag', '$nom', '$prenom', '$dl_diag')";
  26. $resultat = mysql_query($requete) or die('<br/>Exécution de la requête impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
  27.  
  28. mysql_close($connexion);
  29.  
  30. // extraire le mail
  31. include('connection.inc.php');
  32. $connexion = mysql_connect($bdd_host, $bdd_user, $bdd_passe) or die('<br/>Connexion au serveur impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
  33. $choix_base = mysql_select_db($bdd_base, $connexion) or die('<br/>Sélection de la base de donnée echouée.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
  34. $requete = "SELECT email FROM membre WHERE id = $id_agence";
  35. $resultat = mysql_query($requete) or die('<br/>Exécution de la requête impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
  36.  
  37. // On fait une boucle pour lister tout ce que contient la table :
  38. while($val = mysql_fetch_array($resultat))
  39. {
  40. $mail_destinataire = $val['email'];
  41. $sujet = "Nouveau diagnostique disponible";
  42.  
  43. $message = "Bonjour,\r Suite à votre demande, nous avons le plaisir de vous envoyé le diagnostique de Monsieur, Madame $nom . \r\n
  44. Vous pouvez télécharger votre diagnostique en vous connectant sur votre espace-client \r\n ou en cliquant sur ce lien: \r\n
  45. http://www.*****.com/diag/$dl_diag ";
  46.  
  47. $head = "From: no_reply@*****com\n";
  48. $head .= "Content-type: text/html; charset= iso-8859-1\n";
  49. mail($mail_destinataire, $sujet, $message, $head);
  50. }
  51.  
  52. // Déconnexion de MySQL
  53. mysql_close($connexion);
  54. $valid='Votre document est transfere, et le mail à été envoyé';
  55. } else {
  56. $error='ECHEC lors du transfère.';
  57. }
  58. }
  59. ?>
m
0
l
Contenus similaires
a c 145 L Programmation
28 Septembre 2010 10:55:01

Malheureusement, la solution n'est pas en PHP.
Le souci de la limitation se fait sur l'envoi du formulaire, qui intervient avant le traitement en PHP.

La solution envisageable est de faire des envois en ajax, mais ça risque de poser des problèmes de compatibilité avec certains navigateurs et ça demande de repenser complètement le principe de traitement des fichiers.
m
0
l
28 Septembre 2010 11:22:11

tu en est sur??
car avant de poster j'ai vue sur le net
un input avec un name entre crochet exemple
<input type="text" name="exemple[]" />
mais ca sert a quoi ses crochet?
m
0
l
a c 145 L Programmation
28 Septembre 2010 11:58:37

Ca sert à créer un tableau de données envoyées.
si tu fais un var_dump($_POST), tu obtiendras:
array('exemple' => array());

Et ça n'a encore rien à voir avec le traitement fait par le php qui est effectué une fois que tout le contenu du formulaire a été envoyé au serveur.
Pour rappel: le PHP s'exécute côté serveur, pas lors de la transmission http.
m
0
l
a c 232 L Programmation
28 Septembre 2010 17:32:29

En fait, ce que tu peux faire, c'est mettre 10 <input type="file">.
Et dans ton code PHP, tu fais une boucle sur ces 10 inputs en exécutant le code à chaque fois si le fichier sélectionné n'est pas null.
m
0
l
a c 145 L Programmation
28 Septembre 2010 17:46:50

Non OmaR, désolé de te contredire.

Les limites qui sont dans le php.ini concerne le formulaire (poids maximal d'un champ file et poids maximal du formulaire) et ces limites sont appliquées lors de l'envoi du formulaire, pas lors du traitement par php.

La seule façon d'essayer de passer outre est d'avoir effectivement plusieurs champs de type file et de faire les uploads un à un avec de l'ajax sitôt qu'un champ est rempli (sur le onchange ?)
m
0
l
a c 232 L Programmation
28 Septembre 2010 20:48:51

Hmm, je n'ai pas du tout lire. J'ai seulement lu qu'il voulait passer de 1 à 10 input file, je n'ai pas fait attention au problème de poids.
Et je t'avoue que je ne connais pas tous les problèmes de poids d'ailleurs. Je ne savais même pas qu'il y avait une limite par formulaire, seulement par champ pour moi, enfin bon, tant pis alors :) 
m
0
l
29 Septembre 2010 16:01:45

Ok, je me suis inspiré d'un tuto sur le site developper.com

ce que je suis en train d'essayer de faire c'est ce type de programation, mais
rien ne passe.

  1. $repertoire = "/diag/";
  2.  
  3. Foreach($_FILES as $fichier)
  4. {
  5. move_uploaded_file(($_FILES['fichier']['tmp_name'], '../diag/'.$_FILES['fichier']['name']));
  6. }


ps il ne faut pas s'inquiete du poid car les fichier envoyer sont tres légé
m
0
l
a c 232 L Programmation
29 Septembre 2010 23:10:50

Tu fais un foreach, mais tu n'utilises pas la variable créée ($fichier)
m
0
l
2 Octobre 2010 12:03:15

ok, j'ai enfin trouver la solution pour uploader mes fichier, par contre là, j'ai une autre problématique,
lorsce que je veut mettre dans la base de donnée le nom des fichiers cela me les marque bien, mais avec une faute
exemple sur un fichier qui s apple test.pdf cela me marque test_pdf
je ne comrpend pas, pourtant j'ai l'impression que j'ai bien codé
je vous fait tt voir

  1. <?php
  2. // verifier que le bouton ok est bien cliquer
  3. if (isset($_POST['ok']) && $_POST['ok'] == 'ok')
  4. {
  5. // verification que les champs sont bien remplis
  6. if (isset($_POST['date_diag']) && isset($_POST['nom_client']) && isset($_POST['dossier']) && isset($_POST['pour']))
  7. {
  8. $date_diag = $_POST['date_diag'];
  9. $nom = $_POST['nom_client'];
  10. $dossier = $_POST['dossier'];
  11. $pour = $_POST['pour'];
  12. $id_agence = $_POST['nom_agence'];
  13.  
  14. // Insertion dans la base de donnée
  15. include('../connection.inc.php');
  16. $connexion = mysql_connect($bdd_host, $bdd_user, $bdd_passe) or die('<br/>Connexion au serveur impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
  17. $choix_base = mysql_select_db($bdd_base, $connexion) or die('<br/>Sélection de la base de donnée echouée.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
  18. $requete = "INSERT INTO diag VALUES ('', '$id_agence', '$date_diag', '$nom', '$dossier', '$pour')";
  19. $resultat = mysql_query($requete) or die('<br/>Exécution de la requête impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
  20. mysql_close($connexion);
  21.  
  22. // insersion des donnée du client pour le diag
  23. // faire une boucle pour le transfere des fichier et insertion dans la base de donnée.
  24. foreach($_FILES as $fichier => $download)
  25. {
  26. move_uploaded_file($fichier['tmp_name'], '../diag/'.$fichier['name']);
  27.  
  28. // traitement d'ajout dans la base de donnée
  29. $values = array();
  30. include('../connection.inc.php');
  31. $connexion = mysql_connect($bdd_host, $bdd_user, $bdd_passe) or die('<br/>Connexion au serveur impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
  32. $choix_base = mysql_select_db($bdd_base, $connexion) or die('<br/>Sélection de la base de donnée echouée.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
  33. $values[] = "('".mysql_real_escape_string($dossier)."', '".mysql_real_escape_string($fichier['name'])."')";
  34. mysql_query("INSERT INTO download (dossier, fichier) VALUES ".implode(',', $values));
  35. }
  36.  
  37. foreach($_FILES as $fichier)
  38. print $fichier['name'] . "<br/>";
  39. echo $fichier;
  40. }
  41. }
  42. ?>
m
0
l
a c 145 L Programmation
2 Octobre 2010 12:14:57

Problème étrange, je n'avais jamais vu ça, je vais me renseigner.

Par contre, une petite question:
Pourquoi fais tu
  1. foreach($_FILES as $fichier => $download)

Tu ne te serts jamais de $download...
Tu peux très bien te limiter à:
  1. foreach($_FILES as $fichier)


Et un autre détail, moins anecdotique:
Tu inclues connection.inc.php je ne sais combien de fois (une fois pour la première insertion et pour chaque fichier) et chaque fois tu relances la connexion ? C'est un peu énorme.
Garde ta première inclusion et ne fais le mysql_close() qu'à la fin de ton if.

Surtout que je suis étonné que tu n'ais pas une erreur avec les includes successif, des include_once() me choqueraient moins.
m
0
l
2 Octobre 2010 13:02:49



Apres une nuit de prise de tête, et je te remercie ce bout de code qui m'a fait avancer sont mon problème.
tout fonctionne correctement.
par contre une chose que je ne comprend pas et que je voudrai résoudre, c'est que j'ai une double insertion dans la Base de donnée.

  1. <?php
  2. // verifier que le bouton ok est bien cliquer
  3. if (isset($_POST['ok']) && $_POST['ok'] == 'ok')
  4. {
  5. // verification que les champs sont bien remplis
  6. if (isset($_POST['date_diag']) && isset($_POST['nom_client']) && isset($_POST['dossier']) && isset($_POST['pour']))
  7. {
  8. $date_diag = $_POST['date_diag'];
  9. $nom = $_POST['nom_client'];
  10. $dossier = $_POST['dossier'];
  11. $pour = $_POST['pour'];
  12. $id_agence = $_POST['nom_agence'];
  13.  
  14. // Insertion dans la base de donnée
  15. include('../connection.inc.php');
  16. $connexion = mysql_connect($bdd_host, $bdd_user, $bdd_passe) or die('<br/>Connexion au serveur impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
  17. $choix_base = mysql_select_db($bdd_base, $connexion) or die('<br/>Sélection de la base de donnée echouée.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
  18.  
  19. $requete = "INSERT INTO diag VALUES ('', '$id_agence', '$date_diag', '$nom', '$dossier', '$pour')";
  20. $resultat = mysql_query($requete) or die('<br/>Exécution de la requête impossible.<br/>Contactez le webmaster si le problème n\'est pas résolu.<br/>');
  21.  
  22. // insersion des donnée du client pour le diag
  23. // faire une boucle pour le transfere des fichier et insertion dans la base de donnée.
  24. foreach($_FILES as $fichier)
  25. {
  26. move_uploaded_file($fichier['tmp_name'], '../diag/'.$fichier['name']);
  27.  
  28. // traitement d'ajout dans la base de donnée
  29. $values[] = "('".mysql_real_escape_string($dossier)."', '".mysql_real_escape_string($fichier['name'])."')";
  30. mysql_query("INSERT INTO download (dossier, fichier) VALUES ".implode(',', $values));
  31. }
  32.  
  33. foreach($_FILES as $fichier)
  34. print $fichier['name'] . "<br/>";
  35. echo $fichier;
  36. mysql_close($connexion);
  37.  
  38. }
  39. }
  40. ?>
m
0
l
a c 145 L Programmation
2 Octobre 2010 22:30:17

tu devrais faire un unset($values) avant la fin de ton foreach.
D'ailleurs, je ne comprends pas l'intérêt que tu as à passer par ce tableau dans ce cas là.
Ou bien tu as confondu avec la syntaxe des insertions multiples, et dans ce cas la ton mysql_query est mal placé et syntaxiquement faux.
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS