Afficher et traiter un formulaire dans la même page php

Eléphanteau du PHP | 37 Messages

06 juil. 2011, 17:51

Bonjour,

Je voudrais afficher un formulaire et le traiter dans la même page php, le traitement ne devant être effectué que lorsque le formulaire a été rempli (bouton submit activé).

En cherchant, j'ai pu trouver à cette adresse http://www.commentcamarche.net/forum/af ... -meme-page une réponse qui me semblait séduisante.
<?php if($_POST['bouton'])
{
        code de traitement du formulaire
?>
bouton étant le nom du bouton submit du formulaire.

J'ai donc appliqué comme suit cette aproche:
$ask_for_file = '<form id="Input_file" method="post" action="Document generation.php" enctype="multipart/form-data">
		<p>Please, enter or select the html file to be processed:</p>
		<p><input type="file" name="file_name" /></p>
		<p><input type="submit" value="OK" name="OK_Input_File" /></p>
		</form>' ;	
echo $ask_for_file;
if ($_POST['OK_Input_File'])
{
code de traitement du formulaire
}
Quand je lance le programme, j'obtiens un message d'erreur m'indiquant que l'index OK_Input_File est inconnu. Le traitement s'effectue par contre normalement une fois que je clique sur le bouton OK.
Comment éviter ce message sous le formulaire ?

Merci d'avance

Eléphanteau du PHP | 37 Messages

06 juil. 2011, 18:51

Question induite par mon post, plus importante en fait que celui-ci :

Le programme ouvre et traite bien le fichier sélectionné dans le formulaire.
$input_file_name = $_FILES['file_name']['tmp_name'];
$document = file_get_contents($input_file_name); 

Par contre, lorsque j'affiche la variable $input_file_name, j'obtiens le chemin suivant :

C:\Program Files\wamp\tmp\php3FD.tmp

Comment obtenir le chemin effectif du fichier ? (J'en ai besoin pour enregistrer le document traité dans le même répertoire que le fichier sélectionné.)

Merci de votre aide

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

06 juil. 2011, 20:01

Pour ta première question, il manque effectivement un contrôle pour vérifier si la variable (ou plus précisément l'index) généré par l'envoi de ton formulaire, existe bien :
if ( isSet($_POST['bouton']) )
Si tu appelles cette variable directement alors qu'elle n'est pas définie (car le formulaire n'a pas été envoyé), php génère un avertissement :)

Concernant ta seconde question, les fichiers uploadés sont stockés temporairement par php en attendant de savoir ce que tu veux en faire. Pour conserver ce fichier, il te faut utiliser la fonction move_uploaded_file() qui va te permettre de déplacer le fichier du répertoire temporaire vers le répertoire où tu souhaites le stocker :) (et tu pourras donc lui spécifier toi même le chemin de ce répertoire, cf. la doc de la fonction)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 37 Messages

07 juil. 2011, 11:18

Concernant ta seconde question, les fichiers uploadés sont stockés temporairement par php en attendant de savoir ce que tu veux en faire. Pour conserver ce fichier, il te faut utiliser la fonction move_uploaded_file() qui va te permettre de déplacer le fichier du répertoire temporaire vers le répertoire où tu souhaites le stocker :) (et tu pourras donc lui spécifier toi même le chemin de ce répertoire, cf. la doc de la fonction)
Merci de tes réponses à mes deux questions. (La première a effectivement débloqué mon petit problème.)

Concernant le répertoire dans lequel enregistrer le fichier traité par la routine php, je veux l'enregistrer dans le même répertoire que celui du ficher sélectionné par l'utilisateur. (Je ne connais évidemment pas à l'avance le répertoire en question.) Comment faire pour connaître ce répertoire ?

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

07 juil. 2011, 12:53

Hmm... c'est quoi le répertoire sélectionné par l'utilisateur ?

S'il s'agit de l'emplacement du fichier sur son disque dur perso, tu ne pourras pas le reproduire car tu ne récupères pas cette information lors de l'envoi de fichier (tu reçois juste le fichier sans savoir d'où il provient, pour des questions de sécurité)

S'il s'agir d'un répertoire choisit par l'utilisateur pour déposer le fichier sur le serveur, ben.. dans la mesure où l'utilisateur doit le choisir au préalable, tu dois pouvoir récupérer l'info et l'utiliser :)

Mais en règle générale, à moins que tu ne lui mette à disposition une arborescence (du type gestionnaire de fichier) ce n'est pas à l'utilisateur de décider où sera stocké son fichier :) Tu le récupères, tu le stockes là où toi tu veux le stocker en le nommant comme tu l'entends (ça évite que l'utilisateur n'upload et exécute un script php par exemple :)), et tu vois ensuite si tu as besoin de consigner l'information du chemin quelque part (genre base de données) pour pouvoir le retrouver par la suite :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 37 Messages

07 juil. 2011, 13:17

Merci de ta réponse

En fait, le programme php en question ne servira qu'en localhost sur la machine de l'utilisateur.

J'ai contourné la difficulté en affichant un formulaire simple où le chemin du fichier est saisisi dans un champ input en mode text.
pathinfo me permet alors de connaîtrre le répertoire du fichier initial. :)