[résolu] traiter 2 formulaires imbriqués

Eléphant du PHP | 343 Messages

28 sept. 2011, 02:19

Bonjour à tous,

Je souhaite après qu'un upload de fichier soit effectué, afficher un formulaire (une sorte de fiche de renseignements). Le probleme est que ce formulaire est dans le isset du $_FILES.
En gros voici le code:
if(isset($_FILES['monfichier']))
{
....

if(!(in_array($extensionFichier, $extensionsAutorisees)))
					{
						echo "<br/>Le fichier n'a pas l'extension attendue";
					}
		
					elseif ($tailleFichier > $maxTaille)
					{
						echo " <br />Le fichier est trop gros";
					}
		
		
					else
					{
					echo "Votre fichier a été uploadé avec succès. Merci de remplir ce formulaire.";	
						      ?>
<form>....</form>

<?php } } ?>
Je passe les détails. Donc le formulaire étant imbriqué dans le $_FILES, je ne peux pas le traiter.
Avez-vous une solution ou plutôt une alternative à mon probleme?

Merci.
Modifié en dernier par sam12 le 29 sept. 2011, 02:09, modifié 1 fois.
Développeur web

ViPHP
ViPHP | 2577 Messages

28 sept. 2011, 11:36

Dans le nouveau formulaire, tu dois préciser le parametre action et traiter le formulaire dans la page PHP associée.

Le plus simple est d'ajouter un input caché "OPERATION" dans tes formulaires et de faire le traitement en fonction de sa valeur.

Eléphant du PHP | 343 Messages

28 sept. 2011, 13:00

Tout d'abord, merci pour ta réponse.

Si je comprends bien, tu veux me faire traiter sur la même page (ou une autre). Je n'ai par contre pas compris le pourquoi de l'input caché.
Si j'ai bien compris, ta solution n'est pas envisageable vu que le form est dans le if(isset($_FILES['monfichier'])) donc pour atteindre le formulaire, il faudrait renvoyer un fichier et en même temps appuyer sur le submit du formulaire (si tu vois ce que je veux dire), solution déjà impossible mais ne marchera pas vu qu'il faut valider toutes les étapes précédentes (fichier existant, taille etc...).
Comme tu peux le voir, le form est dans un else qui vérifie l'extension du fichier.
Développeur web

Mammouth du PHP | 19672 Messages

28 sept. 2011, 20:56

En HTML, l'imbrication de formulaire est interdite.

La solution serait que le formulaire imbriqué se trouve dans un iframe à l'intérieur de l'autre formulaire, autrement, c'est invalide. Mais de cette manière, le formulaire « imbriqué » serait traité indépendamment.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 343 Messages

29 sept. 2011, 02:09

On s'est mal compris, ce ne sont pas les formulaires qui sont imbriqués mais leur traitement.
Je pensais que le bout de code était assez explicite :?

Sinon probleme résolu.
Merci pour vos réponses.
Développeur web

ViPHP
ViPHP | 2577 Messages

30 sept. 2011, 10:00

La variable cachée permet de savoir ce que tu dois faire pour traiter la réponse de l'utilisateur.

Si la variable caché n'est pas défini : affichage du premier formulaire vide ou avec les valeurs par défaut

Si la variable cachés est "traitement formulaire 1" tu controles la saisie, fait le traitement et réaffiche le formulaire 1 en cas de problème ou si c'est ok, affiche le formulaire 2

Si la variable cachés est "traitement formulaire 2" tu controles la saisie, fait le traitement et affiche le formulaire 2 si problème ou ce que tu veux si tout est ok.

Eléphant du PHP | 343 Messages

30 sept. 2011, 12:49

Au fait j'ai vu le probleme autrement.
Vu que le second formulaire apparait que si l'upload réussit, j'ai décidé de traiter le 2nd formulaire sur une autre page, tout en gardant les valeurs entrées par le membre en post.
Donc soit il a tout bon du 1er coup et je rentre les infos dans la bdd, soit je reaffiche les valeurs déjà indiquées et je traite sur la 2nde page.
Le seul inconvénient avec cette méthode est que je suis "obligé" de passer le nom du fichier en hidden.

Sinon je comprends ta solution, merci pour l'explication ;)
Je pense que cette solution n'était pas envisageable dans ma situation. Si je comprends bien cette solution est plutôt pour un traitement sur la même page.
Développeur web

ViPHP
ViPHP | 2577 Messages

30 sept. 2011, 15:40

Pas sur une même page html, mais par un même script php.

Eléphant du PHP | 343 Messages

30 sept. 2011, 16:22

Si tu peux me montrer un exemple, je serais intéressé.
Je ne vois pas comment tu peux rappeler le 2e form si certains champs sont faux, sur la même page. Normalement tu seras bloqué par le fait que tu n'as pas rappelé le 1er form avant.
Peux-tu me mettre un petit bout de code pour que je comprenne mieux? Tu m'intrigues :D

Merci ;)
Développeur web