Page 1 sur 1

formulaire qui envoi fichiers sur serveur

Posté : 16 mai 2010, 16:58
par jimix
bonjour à tous,

je cherche à faire un formulaire qui permet d'envoyer un fichier dans un fichier ou serveur.

j'ai vu plein de topic à ce sujet mais comprend pas tout.


la question que je me pose : est il possible de gérer ces fichiers à partir de base de donnée??comme c'est le cas pour le nom et prénom par exemple.

et comment le rattache t on au serveur pour le moment je traveille en local.

ci-dessous le formulaire tiré du site php france :
<?php

if(isset($_FILES['photo']))
{
// params
unset($erreur);
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg','doc');
$taille_max = 100000;
$dest_dossier = 'c:/texte';
// vérifications
if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
{
$erreur = 'Veuillez sélectionner un fichier de type png, gif, jpg ou doc !';
}
elseif( file_exists($_FILES['photo']['tmp_name'])
and filesize($_FILES['photo']['tmp_name']) > $taille_max)
{
$erreur = 'Votre fichier doit faire moins de 100Ko !';
}
// copie du fichier
if(!isset($erreur))
{
$dest_fichier = basename($_FILES['photo']['name']);
// formatage nom fichier
// enlever les accents
$dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// remplacer les caracteres autres que lettres, chiffres et point par _
$dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_', $dest_fichier);
// copie du fichier
move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
}
}

?>
<html>
<body>
<!-- Erreur ? -->
<?php
if(isset($erreur)){
echo '<p>', $erreur ,'</p>';
}
?>
<!-- Formulaire -->
<!-- Attention, ne de ne pas oublier le enctype="multipart/form-data" -->
<form method="POST" action="30.php" enctype="multipart/form-data">
<!-- Limiter la taille des fichiers à 100Ko -->
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
<fieldset>
<legend>Envoi de fichiers</legend>
<!-- champs d'envoi de fichier, de type file -->
<p><label for="Fichier">Photo :</label><input type="file" name="photo" /></p>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</legend>
</fieldset>
</form>
</body>
</html>

par avnce merci pour votre aide 8-|

Re: formulaire qui envoi fichiers sur serveur

Posté : 16 mai 2010, 17:18
par jimix
ça avance un peu lorsque je met un fichier je le reçois sur c:.par contre je suis en local comment ça va se passer lorsque je v être en réseau et comment peut on rattacher un fichier à la bdd.

par avance merci

Re: formulaire qui envoi fichiers sur serveur

Posté : 16 mai 2010, 19:22
par Ryle
Alors pour répondre à ta question, tu peux effectivement gérer tes fichiers via ta base de données. Une fois le fichier envoyé sur ton serveur, tu peux soit :
- le stocker directement dans ta base de données dans les champs BLOB et compagnie, mais à moins que tu n'ais besoin de faire de la comparaison d'image, c'est pas recommandé (c'est lourd, c'est long, et c'est pas pratique ;))
- le stocker dans un dossier sur ton serveur (avec le move_uploaded_file()) et simplement enregistrer son nom (voire le chemin d'accès) dans un champ texte de ta base (comme pour tes noms et prénoms)

L'idée est tout simplement de récupérer le fichier sur ton serveur, et une fois que tu sais comment tu vas le nommer, enregistrer son nom dans ta base de données :)

Ce qui va changer par rapport à tes essais sur ton ordinateur, c'est le chemin de destination. En effet, chez ton hébergeur tu ne pourras probablement pas écrire sur C: (il est même probable que le serveur soit sous unix et ne dispose pas de disque C ;)). Le mieux, c'est d'utiliser un chemin relatif : c'est à dire qu'au lieu de dire que tu veux enregistrer le fichier dans un dossier qui se trouve dans c:\, tu vas donner le chemin du dossier à partir de ton script php.

Par exemple si tu as un dossier "scripts/" (dans lequel se trouve ton script "30.php") et un autre dossier "fichiers/" (dans lequel tu vas stocker les fichiers), tu peux indiquer comme dossier de destination "../fichiers/" ($dest_dossier). Ceci signifie qu'il faut remonter d'un niveau ("../") pour sortir du dossier "scripts", puis descendre dans le dossier "fichier".

En espérant que cela te permettra d'y voir plus clair :)

Re: formulaire qui envoi fichiers sur serveur

Posté : 17 mai 2010, 10:58
par jimix
merci tu as répondu à certaines de mes questions toutefois, tu dis que je v pouvoir enregistrer le nom du fichier sur la bdd, mais comment procéde t-on??
PAR AVANCE MERCI

Re: formulaire qui envoi fichiers sur serveur

Posté : 17 mai 2010, 23:42
par Ryle
Lorsque tu fais le move_uploaded_file(), tu as deux variables ($dest_dossier et $dest_fichier) qui contiennent respectivement le chemin du dossier et le nom de ton fichier. Il te suffit donc d'utiliser ces variables dans une requête, tout comme tu dois déjà le faire avec les infos de tes utilisateurs :)