Formulaire : champ de type file

Eléphanteau du PHP | 20 Messages

08 janv. 2009, 11:33

Bonjour à toutes et tous et BONNE ANNEE 2009

Voici une petite incompréhension.

Dans un formulaire de upload de fichier, je récupère la valeur du nom du fichier à uploader (ici fichier1) dans une variable (ici $fic1) pour pouvoir réafficher le nom du fichier dans le formulaire après les vérifications du formulaire.

LE PROBLEME ==> le champ input ne tient pas compte de la variable $fic1 et ne la réaffiche pas.
Pourtant je suis certain qu'elle est bien renseignée car je la vérifie via un table de debbogage (ici la requete sur debug)

SAVEZ VOUS si les champs de type file accepte bien une value en initialisation ? Si oui que pensez vous de mon code ci dessous. OU EST L'ERREUR ?

Merci et meilleurs voeux 2009 encore.

if (!empty($_FILES['fichier1']['name'])) { $fic1=$_FILES['fichier1']['name'] ; }
	
$sql_temp="INSERT into debug (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10) VALUES (NULL, 'bd126','fichier 1 nom =','$fic1','', '', '', '', '','')";
mysql_query($sql_temp);

echo "<input type='file' name = 'fichier1' size='50'  value=$fic1 >";
:) :fete:

ViPHP
ViPHP | 2287 Messages

08 janv. 2009, 11:50

echo "<input type='file' name = 'fichier1' size='50'  value=$fic1 >";
Hello,

Ton code est correct mais ne cherche pas plus loin, il ne va pas fonctionner. Pour des raisons de sécurité et de séparation des rôles entre client et serveur, on ne peut pas agir dans la valeur d'un input type file (qui ne sort jamais du client, seul le contenu du fichier peut être transmis).
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 20 Messages

08 janv. 2009, 12:14

Merci bien.

C'est dommage car cela oblige le client à recharger à nouveau le fichier tant que toutes les erreurs du formulaire ne sont pas corrigées.

Mais bon, faisons avec.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

08 janv. 2009, 12:23

Merci bien.

C'est dommage car cela oblige le client à recharger à nouveau le fichier tant que toutes les erreurs du formulaire ne sont pas corrigées.

Mais bon, faisons avec.
Non pas forcément.
Quand ton visiteur soumet son formulaire pour la 1ère fois, le fichier qu'il a sélectionné va t'être envoyé.
Si il existe des erreurs dans les autres champs de formulaire, il te suffit d'enregistrer temporairement le fichier qu'il t'a envoyé et dans le formulaire que tu réaffiches avec les erreurs au lieu de mettre un champ <input type='file'> tu mets juste le nom du fichier temporairement stocké pour bien montré que le fichier a déjà été chargé (et éventuellement une case à décocher et un nouveau <input type='file'> si tu veux lui proposer d'uploader un autre fichier)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 20 Messages

08 janv. 2009, 12:35

Cette solution ne me parait pas possible car je verifie le formulaire chez le client AVANT d'uploader le fichier.

Merci quand même
----------------------------------------------------
Voici la structure de mon script
NB ce n'est pas du code mais uns transcription allégée du code


si isset FILE[fichier][name] alors $fic= FILE[fichier][name]

FORM action= $_SERVEUR['PHP_SELF']
input type =file name=fichier value=$fic
input type=text name=titre
input type=submit name=ok
/FORM

vérification du formulaire

si !empty POST OK
si empty titre
affichage message d'erreur
fin si
fin si

:P

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

08 janv. 2009, 13:19

Cette solution ne me parait pas possible car je verifie le formulaire chez le client AVANT d'uploader le fichier.

Merci quand même
:-k

Il y a deux possibilités (qui peuvent se combiner) pour vérifier un formulaire:
- soit en javascript côté client et à ce moment là le formulaire n'est pas envoyé donc ton champ file n'est pas remis à zéro et tu n'as plus de problème
- soit en PHP côté serveur et alors le fichier est uploadé sur ton serveur au moment où le visiteur clique sur le bouton "envoyer", donc quoiqu'il arrive le fichier est uploadé avec les autres informations du formulaire et donc forcément avant que tu ne vérifies quoique ce soit...
Toutefois il est possible que ton traitement du fichier uploadé se fasse après la vérification des autres champs de formulaire => si c'est le cas, il suffit de traiter le fichier avant de réafficher le formulaire avec les erreurs...
Quand tout le reste a échoué, lisez le mode d'emploi...