Garder en session la valeur d'un champ FILES

Avatar du membre
ViPHP
ViPHP | 3008 Messages

17 déc. 2006, 12:49

Bonjour !

J'ai fait un formulaire avec un upload. Il y a des tests dessus et je fais un retour sur le formulaire s'il y a une erreur quelconque.

Mais voila, mon souci c'est que je n'arrive pas à garder en mémoire grâce à une session la valeur d'un champ de type FILES.

Si par exemple dans ce champ il y a "C:\Documents and Settings\Admin\Bureau\1.txt", j'aimerais retrouver exactement ce lien lors de mon retour.

Est-ce possible ?

Merci !

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

17 déc. 2006, 12:57

As-tu des session_start() en haut de chaque page ?
Comment fais tu ta redirection ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

17 déc. 2006, 13:02

Oui oui session_start() est bien présent. En fait ce n'est pas un problème de session mais plutôt de récupération exact du lien.

Ma redirection c'est juste le message d'erreur avec un lien permettant de revenir sur le formulaire après initialisation des sessions.

J'arrive par exemple à récupérer "1.txt" mais pas entièrement "C:\Documents and Settings\Admin\Bureau\1.txt". Or il me faut ce lien exact pour que la personne n'ait pas à rechercher le fichier en question.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

18 déc. 2006, 11:43

J'utilise les :
$_FILES['uploadedfile']['name']
$_FILES['uploadedfile']['tmp_name']

Mais ce n'est pas le vrai chemin que l'on voit une fois le parcours sur la machine effectué. En cherchant sur google pas moyen de trouver :?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 déc. 2006, 11:48

Je trouve normal que quand un utilisateur pose un fichier sur une page web qu'il soit impossible de connaitre le chemin :?

Sinon il est possible de connaitre l'architecture des données ;)

Par contre, ce que je peut te proposer, c'est un système qui lui dit "J'ai bien uploadé ton fichier, est-ce que tu veux le conserver ou le remplacer" :D
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 déc. 2006, 11:53

Je ne suis pas sur que tu puisses le récupérer ainsi... En revanche, tu peux, je crois, lors de la validation du formulaire, copier la valeur du champ dans un champ hidden et ainsi la récupérer...

Ceci dit, je ne suis pas certain que tu puisses le remettre comme valeur par défaut... je vois là une grosse faille de sécurité puisqu'il suffirait de passer ce champ a hidden et de le pré-renseigner avec certains chemins pour récuperer des fichiers à l'insu de l'utilisateur :?

Edit : faudrait jeter un coup d'oeil aux uploaders de multiples fichiers en ajax.. chais pas comment ils fonctionnent pour le coup...
Modifié en dernier par Ryle le 18 déc. 2006, 11:55, modifié 1 fois.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
ViPHP
ViPHP | 3008 Messages

18 déc. 2006, 11:54

En fait mon souci se passe avant l'upload en question. C'est là le souci :)

Il s'agit en fait de gestion d'erreur. Si par exemple dans mon formulaire la personne a mis un mauvais login, une fois validé j'ai un message d'erreur et un retour au formulaire. Et c'est là que je voudrais que le champs FILES gardes en mémoire le chemin qui avait été choisi pour que la personne n'ai pas à aller le rechercher.

Donc dans mon étape aucun envoi n'est fait.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

18 déc. 2006, 11:55

Je ne suis pas sur que tu puisses le récupérer ainsi... En revanche, tu peux lors de la validation du formulaire, copier la valeur du champ dans un champ hidden et ainsi la récupérer...

Ceci dit, je ne suis pas certain que tu puisses le remettre comme valeur par défaut... je vois là une grosse faille de sécurité puisqu'il suffirait de passer ce champ a hidden et de le pré-renseigner avec certains chemins pour récuperer des fichiers à l'insu de l'utilisateur :?
Oui c'est vrai...donc en gros il vaut mieux qu'au retour du formulaire je laisse le soin au membre de rechercher son fichier ? Il n'y a pas d'autres solutions à votre avis ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 déc. 2006, 12:19

Justement, ce que je te propose, c'est d'uploader le fichier, de détecter les erreurs et, si erreur, de réafficher le formulaire avec les messages d'erreur et de lui dire "J'ai uplodé ton fichier, est-ce que tu veux le conserver ou le supprimer ?"

Tu peut uploder ce fichier dans un répertoire bien de chez toi, conserver son chemin en session, s'il le change, tu supprimes l'ancien fichier, sinon, tu conserves l'ancien fichier ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
ViPHP
ViPHP | 3008 Messages

18 déc. 2006, 12:21

Justement, ce que je te propose, c'est d'uploader le fichier, de détecter les erreurs et, si erreur, de réafficher le formulaire avec les messages d'erreur et de lui dire "J'ai uplodé ton fichier, est-ce que tu veux le conserver ou le supprimer ?"

Tu peut uploder ce fichier dans un répertoire bien de chez toi, conserver son chemin en session, s'il le change, tu supprimes l'ancien fichier, sinon, tu conserves l'ancien fichier ;)
Ah oui ! compris ;) C'est en effet une solution. Je vais voir ça merci !

Si quelqu'un a une autre idée je suis preneur ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 déc. 2006, 12:33

Ca reste je pense la meilleure solution (et puis ca éviter d'occuper le serveur avec un nouvel upload d'un fichier qui aura déjà été envoyé)

Sinon je l'avais ajouté en edit, mais je le relance, peut être que de disséquer les scripts d'upload de fichier avec ajax où l'on peut préparer 1 à n fichiers avant de les envoyer te donnerait quelques idées sur la façon de conserver l'info vu qu'ils arrivent bien à la récupérer et à la stocker... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 2144 Messages

18 déc. 2006, 14:22

Je trouve normal que quand un utilisateur pose un fichier sur une page web qu'il soit impossible de connaitre le chemin :?

Sinon il est possible de connaitre l'architecture des données ;)
Il y a un moyen, en enlevant l'enctype du formulaire, on récupera le chemin du fichier sur la machine client. (Découvert ça en debuggant un upload le jour où honte à moi j'avais oublier l'enctyp :D)

Sinon, en effet, impossible de donner une valeur par défaut à champ Files, pour raisons de sécurité.(sinon avec une validation js, on vole tous les fichiers qu'on veut