Page 1 sur 2

Récupération de fichier uploader

Posté : 02 juil. 2008, 10:21
par Romuald63
Bonjour;
Toujours dans la "galère" avec PHP et MySQL
J'ai un formulaire pour envoyer des fichiers images. Jusque là ça fonctionne c'est dans mon fameux fichier "upload".
Mais après je ne sais pas comment récupérer ces documents pour les insérer dans ma BDD
Est-ce que dans le formulaire (ex : upload.php) il faut que je me connecte à la base ou...!!??
Merci de votre aide, très précieuse jusqu'à aujourd'hui.

Posté : 02 juil. 2008, 10:46
par katagoto
Bah, tu peux toujours stocker leurs noms dans la BDD ainsi qued leur chemin, mais de là à les stocker entièrement...

On peut voir ton script ?

Posté : 02 juil. 2008, 10:56
par Romuald63
Voila ma page upload :
<?php

if( isset($_POST['upload']) ) // si formulaire soumis
{
    $content_dir = 'upload/'; // dossier où sera déplacé le fichier

    $tmp_file = $_FILES['fichier']['tmp_name'];

    if( !is_uploaded_file($tmp_file) )
    {
        exit("Le fichier est introuvable");
    }

    // on vérifie maintenant l'extension
    $type_file = $_FILES['fichier']['type'];

    if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'png') && !strstr($type_file, 'gif') )
    {
        exit("Cette extension n'est pas acceptée");
    }

    // on copie le fichier dans le dossier de destination
    $name_file = $_FILES['fichier']['name'];

    if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
    {
        exit("Impossible de copier le fichier dans $content_dir");
    }

    echo "Fichier envoyé avec succès";
}

?>
Ces images là il faut bien que je les mette dans ma base pour les afficher, non

Posté : 02 juil. 2008, 11:04
par guilt92
Ces images là il faut bien que je les mette dans ma base pour les afficher, non
Non, la fonction move_uploaded_file() que tu utilises copie les fichiers sur ton serveur, tu peux donc les utiliser, ils se trouvent dans ton dossier upload, donc avec un lien du style <img src="upload/nom_du_fichier.jpg" par exemple ca fonctionnera très bien (si tu es dans la bonne arborescence).

Par contre, comme le signalait katagoto il peut être très utile de stocker dans ta base de données les noms des fichiers pour savoir comme les retrouver, avec éventuellement d'autres infos pour savoir qui a uploadé le fichier...

Il faudra aussi que tu penses a renommer le fichier pour le rendre unique, car sinon cela posera un problème si plusieurs utilisateurs upload un fichier du même nom...

Je vais voir si je trouve un tuto pour t'aider...

Posté : 02 juil. 2008, 11:12
par Romuald63
Ce fichier va me servir à sur mon site http://video-on-line.fr, sur lequel j'ai une rubrique "Photos" dont le but est de découvrir le monde en images ou par le biais de webcam...
Actuellement tout est en html et je veux le mettre en php de façon à ce que les internautes puissent envoyer leur photos sans que je fasse quoi que se soit.
Effectivement il faudrait que le fichier envoyé prenne un autre nom pour éviter les doublons. Un truc du style FR020708-110025 (code paysJJMMAA-HHMMSS)
Avant ça il faut que je mette ça dans ma base je pense

Posté : 02 juil. 2008, 11:19
par guilt92
Encore une fois ça dépend...

Si ton but et d'avoir une page qui affiche toutes les images du dossier upload (par exemple) sans afficher de détails sur "qui l'a envoyé" ou autre, tu n'as pas besoin de base de données, tu peux faire en php une fonction qui fait ça.

Par contre si tu veux stocker des informations associées à l'image il te faut une base de données...

Dans quel cas es tu exactement ?

Posté : 02 juil. 2008, 11:25
par Romuald63
Je suis plutôt dans le cas où j'ai besoin de savoir ce que représente l'image, lui donner un titre en fait
Sur ce lien tu verras ce que je veux faire : http://www.video-on-line.fr/photos/photo_france.html

Posté : 02 juil. 2008, 11:41
par guilt92
Ok...

Dans ce cas il faut que dans ton formulaire tu fasse remplir ces valeurs par les internautes (titre et autres si besoin) et que au moment de traitement de ton formulaire tu fasses les choses suivantes :

- Tu vérifies l'image (taille, extension...) (conseillé)
- Tu renommes ton image en code paysJJMMAA-HHMMSS
- Tu inscris dans une base de donnée la valeur des champs "Titre" (et autres) et le nouveau nom de l'image
- Tu upload l'image dans ton dossier upload

Tu peux aussi avoir différents dossiers pour tes images, a ce moment la dans ta base il faudra stocker les chemin de l'image plutot que uniquement son nom.

Il te faut donc une base avec comme champ

"ID" : entier auto incrémenté, toujours utile et conseillé
"Titre" : chaine de caractères
"Nom_image" : chaine de caractères

Plus un champ par autre informations demandées.

Pour renommer l'image comme tu le veux tu as pas mal d'information sur ce topic

Pour la connexion et l'utilisation des bdd regarde les tutoriaux de php france :

http://www.phpfrance.com/tutoriaux/inde ... l-avec-php
http://www.phpfrance.com/tutoriaux/inde ... bles-mysql

Une fois que tout cela sera fait, dans ta page qui affiche les images il te suffira de parcourir l'ensemble des données de ta BDD, ainsi tu aura le nom (ou le chemin) vers toutes les images et le titre qui va bien. Si tu fais saisir un champ de titre, attention aux injections SQL.

Hésite pas à revenir si tu as des problèmes ou des questions spécifiques...

Posté : 02 juil. 2008, 16:53
par Invité
Je reviens vers vous parce que je n'arrive pas à uploder mes images sur le FTP, alors qu'en local c'est impecable
Voilà mon code :
<?php
// On commence par récupérer les champs 
if(isset($_POST['pays']))      $pays=$_POST['pays'];
else      $pays="";

if(isset($_POST['titre_image']))      $titre_image=$_POST['titre_image'];
else      $titre_image="";

if(isset($_POST['email']))      $email=$_POST['email'];
else      $email="";

if(isset($_POST['critere_photo']))      $critere_photo=$_POST['critere_photo'];
else      $critere_photo="";

#Enregistrement de la date et heure
$date  = date("ymd");
$heure = date("His");

#Ajout de la date et l'heure au nom de fichier
$nom= $date."-".$heure;
echo $nom;

if( isset($_POST['upload']) ) // si formulaire soumis
{
    $content_dir = 'upload/'; // dossier où sera déplacé le fichier

    $tmp_file = $_FILES['fichier']['tmp_name'];

    if( !is_uploaded_file($tmp_file) )
    {
        exit("Le fichier est introuvable");
    }

    // on vérifie maintenant l'extension
    $type_file = $_FILES['fichier']['type'];

    if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'png') && !strstr($type_file, 'gif') )
    {
        exit("Cette extension n'est pas acceptée");
    }
	
	$nom .= ".".pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION);

    // on copie le fichier dans le dossier de destination
    $name_file = $_FILES['fichier']['name'];

    if( !move_uploaded_file($tmp_file, $content_dir . $nom) )
    {
        exit("Impossible de copier le fichier dans $content_dir");
    }

    echo "Fichier envoyé avec succès";
}
// Aucun champ n'est vide, on peut enregistrer dans la table 
$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  

    mysql_select_db('vol',$db)  or die('Erreur de selection '.mysql_error()); 
     
    // on écrit la requête sql 
    $sql = "INSERT INTO photo (id_photo,pays,image,titre_image,email,critere_photo) VALUES('','$pays','$nom','$titre_image','$email','$critere_photo')"; 
     
    // on insère les informations du formulaire dans la table 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

    mysql_close();  // on ferme la connexion 
?>

Posté : 02 juil. 2008, 16:55
par Invité
A au fait le message d'erreur c'est le suivant :
Impossible de copier le fichier dans upload/

Posté : 02 juil. 2008, 17:14
par guilt92
Le dossier existe il sur le ftp ?
As t il les bons droit chmod pour pouvoir écrire dedans ?
(sur la plupart des logiciels ftp vous pouvez voir les autorisations d'un dossier avec le clic droit => propriétés, sinon voir chmod())

Posté : 02 juil. 2008, 17:24
par Invité
oui j'ai créé un fichier "upload". J'utilise FileZilla.
Avec le clic droit de la souris j'ai coché partout "ecriture" sur le dossier "upload"
Maintenat ça me met "Le fichier est introuvable" qui est dans mon code
Je pige pas

Posté : 02 juil. 2008, 17:30
par guilt92
Je ne sais plus quel est le chmod exact pour faire ca mais niveau sécurité je suis pas sur que ca soit optimal de cocher Ecriture partout.
    if( !is_uploaded_file($tmp_file) ) 
    { 
        exit("Le fichier est introuvable"); 
    } 
Le probleme vient de la. Il n'y a pas de destination... Mais pourquoi y a t il cette instruction alors que la copie est fait apres ? je pense qu'il faut effacer cette partie...

Posté : 02 juil. 2008, 17:42
par Invité
J'ai tjs la même ereur

Posté : 02 juil. 2008, 18:09
par Invité
Je cherche de mon côté aussi.
Ca évolue vers ça : 080702-210617 (c'est le nom de mon fichier) Fichier envoyé avec succès Erreur de connexion Access denied for user 'romuald'@'localhost' (using password: YES)