upload de fichier .pdf

Béka
Invité n'ayant pas de compte PHPfrance

05 mai 2006, 17:00

Bonjour a tous,

je suis actuellement en train de réaliser un site Internet et j'aimerais offrir la possibilité aux internautes de déposer des fichiers .pdf sur le serveur (là ou sera hébergé le site) à l'aide d'un formulaire. Seulement voila, je suis novice en php et je ne sais pas du tout comment faire. J'ai lu la doc, mais je ne comprends pas beaucoup.
Quelqu'un pourrait-il m'aider ?

Eléphant du PHP | 451 Messages

05 mai 2006, 17:38

Salut,

Quand on ne sait pas comment faire, il faut découper le problème.
J'imagine que les fichiers pdf existent déjà (pusique tu veux offrir aux intenautes la possibilité de les déposer).
Dans ce cas, le fait que les fichiers soient pdf ou pas a peu d'importance.

Si tu arrives à mettre un fichier pdf sur un serveur et qu'il est accessible par un lien, le navigateur du visiteur devrait faire le reste pour afficher ce fichier.

Ton problème se résume alors à :
1) faire un 'upload' de fichier sur le serveur. (Il y a plusieurs tuto sur le sujet.)
2) détecter les fichiers dans un script php qui te permettra de générer une page avec les liens vers les fichiers déposés.

A ta place je commencerais par mettre en place le script qui va permettre de déposer (uploader) les fichiers.
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 254 Messages

05 mai 2006, 20:18

oui tu commences par créer ton formulaire avec la balise

Code : Tout sélectionner

<input name="fichier" type="file" id="fichier" />
par exemple.
Et ensuite, dans la page de traitement du formulaire, après avoir initialisé les variables :
if(!isset($_FILES['fichier'])) $fichier['fichier']=""; else $fichier=array('fichier'=>$_FILES['fichier']);
Ensuite, pour insérer ou mettre à jour ta base, tu définieras ton répertoire par $répertoire : ...
et ensuite tu utilises la fonction : move_uploaded_file(string filename, string destination);
Voilà en espérant t'avoir aidé !

beka
Invité n'ayant pas de compte PHPfrance

07 mai 2006, 13:43

merci à tous les deux, je vais essayer de faire ça...
en espérant que j'y arriverais et que cela marchera

Eléphant du PHP | 254 Messages

07 mai 2006, 14:23

N"hésite pas à revenir avec ton code si tu rencontres des diffucultés !
:)

Béka
Invité n'ayant pas de compte PHPfrance

09 mai 2006, 08:09

bonjour tout le monde, alors j'ai fais mon formulaire (bouton parcourir) comme il faut. Les valeurs du formulaire son t renvoyées vers la page upload.php qui contient le code suivant :
<?
if ($file_name == "none")
	{
	print "Spécifier un fichier à envoyer.";
	}

else
	{	
	/* répertoire de destination */
	$dest_file="pdf/";

	/* enlève un "\"  */
	$source_file=stripslashes($file_name);
	
	/* copie du fichier */
	$res_copy=copy($source_file , $dest_file);
	
	print "Fichier envoyé.";
	}
?>
mais ca ne marche toujours pas. Pourquoi?
Merci

Eléphant du PHP | 254 Messages

09 mai 2006, 09:35

Bonjour
As-tu initialisé ta variable ?
if(!isset($_FILES['fichier'])) $file_name['fichier']=""; else $file_name=array('fichier'=>$_FILES['fichier']); // tu initalises la variable, et tu la mets dans un tableau virtuel
ensuite il me semble que tu as oublié la fonction : move_uploaded_file() :?:

J'aurais tendance à vérifier qu'il y a un nom de fichier, que je copie dans la base dans le champ prévu à cet effet (d'ailleurs comment ta base est-elle construite ?) et ensuite faire le move_uploaded_file pour copier le fichier dans la base.
if ($file_name['fichier']['size']!=0) 
			{ //---s'il y a une fichier à mettre à jour, alors son nom est inséré dans la base.
			$fichier_name=$_FILES['fichier']['name']; 
			$updateTable = "UPDATE table SET fichier='$fichier_name'";
            $repertoire="../pdf/";
			move_uploaded_file($fichier['fichier']['tmp_name'],$repertoire.$fichier['fichier']['name']);
			}
			mysql_query($updateTable, $connexion) or die(mysql_error());
C'est la méthode que j'utilise quand je veux mettre à jour une photo dans ma base. Donc peut-être que la fonction UPDATE n'est pas appropriée pour toi, mais plutôt INSERT....
bon, je suis encore novice, donc je ne sais pas si cette méthode est clean, mais c'est ce que je fais.

béka
Invité n'ayant pas de compte PHPfrance

09 mai 2006, 09:47

ok bé je vais essayer dans la matinée de corriger mon script avec ton aide. Je tiendrais au courant si je rencontre des difficultés.
Merci

Eléphant du PHP | 254 Messages

09 mai 2006, 10:06

ok et regarde bien la doc sur les fichiers....ici
Car si ton hébergeur n'accepte pas de fichier temporaire....ça coincera mon script

béka
Invité n'ayant pas de compte PHPfrance

09 mai 2006, 14:04

voila, c'est fini, j'ai réussi à faire cet upload. Ca marche !! 8)
Merci coxine.
Ca me donne presque envie de t'offrir un verre..

Eléphant du PHP | 254 Messages

09 mai 2006, 14:29

De rien !
Je suis ravie que ça fonctionne...on trinque alors ! :wink: :boire9:

béka
Invité n'ayant pas de compte PHPfrance

09 mai 2006, 16:08

mais j'étais sérieux quand je disais que je t'offrais un verre..
Si un jour tu es sur dijon, n'hésite à me le faire savoir

Eléphant du PHP | 254 Messages

09 mai 2006, 16:24

:) hehe pas trop souvent en fait !
N'oublie pas de mettre [résolu] ou d'éditer ton post en le mettant !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 mai 2006, 16:38

N'oublie pas de mettre [résolu] ou d'éditer ton post en le mettant !
Non, pour tagger un post [RESOLU], il faut utiliser le bouton [RESOLU] qui se trouve en haut à gauche de post pour le créateur du thread.
Il ne faut surtout pas editer le nom du sujet

Mais comme béka ne s'est pas enregistré, il ne peut pas tagger le sujet. Je le fait donc pour lui ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 254 Messages

09 mai 2006, 17:53

voila, c'est pour ça que je parlais d'éditer le post ! car j'avais vu qu'il n'était pas enregistré !
Merci de l'info :wink: