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

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 : Afficher et traiter un formulaire dans la même page php

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

par Bosyphe » 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. :)

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

par Ryle » 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 :)

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

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

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

par Ryle » 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)

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

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

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

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