Envoie fichier + changer nom

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 : Envoie fichier + changer nom

par Ryle » 05 juin 2009, 14:49

S'pas bien les upla... :evil:

Pour le 'upload' c'est pas la valeur, mais le nom du bouton submit (ou de n'importe quel autre champ qu'est envoyé). Donc normalement, ton "moncv" doit faire l'affaire si le fichier est envoyé :)

T'as quoi comme message d'erreur ? T'as quoi qui s'affiche à l'écran ? T'as bien un enctype dans ton formulaire ?

par User007 » 05 juin 2009, 12:26

UP LA !!

par sliderskillers » 03 juin 2009, 10:25

Je te remercie pour la rapidité de la réponse, et pour l'explication .Donc 'upload' est la valeur de mon bouton submit, j'ai bien compris .Mais le problème est que mon code n'affiche pas d'erreur, il m'affiche le nom du nouveau fichier(avec la date ect ...)mais ne s'enregistre pas sur le serveur .
Voici le code :
<?php

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

#Ajout de la date et l'heure au nom de fichier
$nom= "FR".$date."-".$heure;
$nom .= ".".pathinfo($_FILES['moncv']['name'], PATHINFO_EXTENSION); 
echo $nom;

	if( isset($_POST['moncv']) ) // si formulaire soumis
	{
		$content_dir = 'C:\wamp\www\Fichiers\\'; // dossier où sera déplacé le fichier

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

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

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

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

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

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

		echo "Fichier envoyé avec succès";
	}
?>
et la partie html, au cas ou :

Code : Tout sélectionner

<tr><td>Faire parvenir CV :</td><td><input type=file name='moncv' size='30' /></textarea></td></tr> <tr><td>Lettre de motivation :</td><td><input type=file name='motivation' size='30' /></textarea></td></tr> </table> <br> <br> <br> <input type=submit name="envoi" value='Envoyer' /> <input type=reset value='Effacer' />

Je ne me consacre pour l'instant qu'a l'envoie du cv, je verrais quand ça fonctionnera pour l'affecter a la lettre de motivation ... Je vous remercie !

par Ryle » 02 juin 2009, 15:13

En fait, cette ligne permet de tester si le formulaire a bien été soumit, et si tel est le cas, d'enregistrer les données qu'il contient. Pour cela, on vérifie avec isSet() que l'un des éléments du formulaire a bien été envoyé (via la méthode post dans ce cas ci).

En général, c'est le nom du bouton submit qui est utilisé, puisque lorsque celui-ci est cliqué, le formulaire envoi la variable "nom_du_bouton_submit" avec pour valeur "valeur_du_bouton_submit". Donc si côté php cette valeur est présente, c'est que le formulaire vient d'être envoyé :)
Mais tu peux tester la présence de n'importe quel champ de ton formulaire à condition que celui-ci soit envoyé au serveur (cela ne fonctionnera par exemple pas avec un bouton radio ou une case a cocher : si ceux-ci ne sont pas cochés ils ne sont pas envoyés :)), ça aura le même effet :)

help

par sliderskillers » 02 juin 2009, 14:53

bonjour, voila ce code est très bien, mais j'ai un petit probleme, je ne comprends pas la ligne :

if( isset($_POST['upload']) ) // si formulaire soumis

Par quoi faut il remplacer 'upload' ??merci

par Romuald63 » 02 juil. 2008, 12:15

Merci ça marche parfaitement

par guilt92 » 02 juil. 2008, 12:03

    if( !move_uploaded_file($tmp_file, $content_dir . $name_file) ) 
Tu prend toujours l'ancien nom qui est $name_file.

Il faut écrire :
if( !move_uploaded_file($tmp_file, $content_dir . $nom))
Mais attention ca ne marchera pas sans l'extension du fichier.

Il faut que tu ajoutes après avoir crée $nom :
$nom .= ".".pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION);
pour concaténer l'extension et le . au nom du fichier...

par Romuald63 » 02 juil. 2008, 11:55

J'ai copier le code comme ça :
<?php
#Enregistrement de la date et heure
$date  = date("mdy");
$heure = date("His");

#Ajout de la date et l'heure au nom de fichier
$nom= "FR".$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");
    }

    // 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";
}
?>
Effectivement quand je clique sur envoyer j'ai bien le FRJJMMAA-HHMMSS qui s'affiche, mais dans le dossier upload l'image a le nom d'origine

par dunbar » 01 juil. 2008, 17:24

A l'heure actuelle j'upload mes fichiers sans problème.
Seul hic c'est qu'il prend toujours le même nom cad FR010708-1602
Oui alors comme c'est ce que lui demande c'est normal :wink:
$nom= "FR010708-1602"; 
Maintenant tu pourrais facilement rajouter la date et l'heure comme ceci par exemple :!:
$date = date("Hismdy");
$nom= "FR".$date."-1602";
//Se qui va afficher un truc du genre
FR172628070108-1602 
Se qui va faire qu'a chaque enregistrement tu aura un nom différent puis qu'il contient le date et l'heure qui elle change chaque seconde

Dans cette exemple il faudrait un enregistrement dans la même seconde pour avoir un nom identique (c'est ce qui s'appelle avoir pas de chance :wink: )
Donc pour évitre ça tu pourrais rajouter un nombre aléatoire de deux chiffres par exemple
comme ceci :?:
<?php
#Création d'un nombre aléatoire de 2 chiffre entre 0 et 99
$nombre_aleatoire = rand(0, 99);

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

#Ajout du chiffre aléatoire et la date au nom de fichier
$nom= "FR".$nombre_aleatoire.$date."-1602";

//Affiche
FR37174057070108-1602 

?>
Ceci dit pour avoir exactement ce que tu demande je ferais ceci
<?php

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

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

echo $nom;
?>
Affichera ceci:
FR070108-204549
FRdate-heure

par guilt92 » 01 juil. 2008, 17:04

Ok donc tu arrives à changer le nom mais pas à récupérer la date et l heure ?

Dans ce cas regarde du coté de la fonction date() ou de strftime() comme conseillé plus tôt...
Fais par exemple un
echo strftime("%d%m%y-%H%M");
ou
echo date("dmy-Hi");
Cela devrait t'inspirer pour nommer tes fichiers...

Attention tout de même, si deux utilisateurs upload à la meme minute tes fichiers auront le même nom...

par Romuald63 » 01 juil. 2008, 16:54

A l'heure actuelle j'upload mes fichiers sans problème.
Seul hic c'est qu'il prend toujours le même nom cad FR010708-1602

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par guilt92 » 01 juil. 2008, 16:47

Pour le moment tu en es ou dans ton code ?

Tu arrives a uploader le fichier mais pas a changer son nom ? ou tu as pas encore commencé ?

par Romuald63 » 01 juil. 2008, 16:26

J'ai regardé les différents liens et j'ai pas tout compris !!

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par guilt92 » 01 juil. 2008, 16:04

Dans tous les cas tu peux choisir le nom du fichier de destination...

Après avoir récupéré le fichier que l'utilisateur veut uploadé il te faudra faire un move_uploaded_file pour mettre ce fichier sur ton serveur... Hors dans cette fonction c'est toi qui choisit le nom de destination du fichier, donc tu pourras mettre ce que tu veux.... De meme en BDD si tu associes ce fichier à des informations il te suffira de mettre le même nom...

Exemple :

formulaire :

Code : Tout sélectionner

<form action="upload.php" method="post"> <input type="file" name="uploadFile"> <input type="submit" value="Upload File"> </form>
Dans ta page de traitement upload.php :
$nom= "FR010708-1602";
move_uploaded_file ($_FILES['uploadFile'] ['tmp_name'], "mes_images/".$nom.".jpg");
Bon évidemment il te faudra utiliser les fonctions adaptées pour générer le nom (voir date() ou strftime()) et il faudra récupérer l'extension du fichier dans le nom original pour mettre la même (voir substr() et strrchr())... Mais dans l'idée c'est complètement faisable.

Envoie fichier + changer nom

par Romuald63 » 01 juil. 2008, 15:52

Bonjour à tous !
Voilà j'ai créé un formulaire pour envoyer des photos sur mon site.
Est-il possible de modifier dans la BDD le nom du fichier envoyé, car bien souvent avec les appareils photos numériques ont se retrouve avec des "P1010232", d'où le risque d'avoir des doublons.
Je voudrais mettre un référence du style "FR010708-1602" (JJMMAA-HHMM)
Comment faire ?
Merci

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]