Récupération de fichier uploader

Eléphanteau du PHP | 21 Messages

02 juil. 2008, 10:21

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.

Mammouth du PHP | 1668 Messages

02 juil. 2008, 10:46

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 ?
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphanteau du PHP | 21 Messages

02 juil. 2008, 10:56

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

Mammouth du PHP | 1353 Messages

02 juil. 2008, 11:04

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...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 21 Messages

02 juil. 2008, 11:12

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

Mammouth du PHP | 1353 Messages

02 juil. 2008, 11:19

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 ?
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 21 Messages

02 juil. 2008, 11:25

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

Mammouth du PHP | 1353 Messages

02 juil. 2008, 11:41

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...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

02 juil. 2008, 16:53

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 
?>

Invité
Invité n'ayant pas de compte PHPfrance

02 juil. 2008, 16:55

A au fait le message d'erreur c'est le suivant :
Impossible de copier le fichier dans upload/

Mammouth du PHP | 1353 Messages

02 juil. 2008, 17:14

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())
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

02 juil. 2008, 17:24

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

Mammouth du PHP | 1353 Messages

02 juil. 2008, 17:30

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...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

02 juil. 2008, 17:42

J'ai tjs la même ereur

Invité
Invité n'ayant pas de compte PHPfrance

02 juil. 2008, 18:09

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)