Récupération de fichier uploader

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Récupération de fichier uploader

par guilt92 » 03 juil. 2008, 09:59

Ok donc à présent le fichier est bien envoyé.

Le message que tu as la vient du mysql_connect() : il n'arrive pas à se connecter à la base de données, il faudrait vérifier les paramêtres au niveau de mysql...

par Invité » 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)

par Invité » 02 juil. 2008, 17:42

J'ai tjs la même ereur

par guilt92 » 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...

par Invité » 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

par guilt92 » 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())

par Invité » 02 juil. 2008, 16:55

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

par Invité » 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 
?>

par guilt92 » 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...

par Romuald63 » 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

par guilt92 » 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 ?

par Romuald63 » 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

par guilt92 » 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...

par Romuald63 » 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

par katagoto » 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 ?