Rechercher : dans
Par :

[Formulaire] Problème de 2 submit

Dernière réponse le 6 jun 2007 à 11:17:03 crunchla, le 5 jun 2007 à 11:31:15 
 Signaler ce message aux modérateurs

Bonjour,

Je suis en train de créer un formulaire pour poster un article mais aussi une image :
Le problème c'est que j'ai un conflit avec 2 submit, je sais que c'est impossible d'en mettre dans un seul formulaire, c'est pourquoi je cherche une alternative.
Pourriez-vous m'aider svp??

<form method="post" action="{script}?writer">
<input type="hidden" name="{action}" value="1"/>
<input type="hidden" name="filename" value="{filename}"/>
<input type="text" name="title"/> Title&nbsp;&nbsp;
<input type="text" name="namea"/> Name<br />
Content<br/>
<textarea name="content" cols="60" rows="10"></textarea><br />
<b>Browse your computer to add an image </b><em>(.jpg/jpeg, .gif, .png only - 1Mo max.)</em><br/>
<input type="file" name="fichier_upload" size="37" />
<input type="submit" name="add_file" value="add image" />
	
<--Je veux que l'image uploadée s'affiche ici-->	
	
<img src="verif.php" alt="[confirmation code]" align="top"/>&nbsp;&nbsp;
<input type="text" name="verif_code" /> Enter the code <br/><br/>
	
<--Je met un submit qui permettra d'envoyer tout le formulaire ainsi que l'image uploadée-->
<input type="submit" name="submit" value="add"/>
</form>

Je n'ai pas de contraintes au niveau du langage et j'accepte toute proposition de solution.
Merci à tous.
Configuration: Windows XP
Firefox 2.0.0.4

Meilleures réponses pour « [Formulaire] Problème de 2 submit » dans :
Les formulaires HTML VoirIntérêt d'un formulaire Les formulaires interactifs permettent aux auteurs de pages Web de doter leur page web d'éléments interactifs permettant par exemple un dialogue avec les internaute, à la manière des coupons-réponse présents dans certains...
Servlets - Gestion des formulaires VoirIntroduction aux formulaires Les servlets rendent très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML, c'est-à-dire une interface graphique permettant à l'utilisateur de saisir des données. Grâce à la balise...

1

Edouard, le 5 jun 2007 à 11:48:30

Je te proposerais la solution suivante :

ton script est rechargé après le upload de l'image si je ne me trompe pas puisque tu affiche l'image uploadée.

Dans ce cas, pourquoi tu ne fonctionne pas avec un test if pour afficher l'un ou l'autre des boutons submit.

Il te faut également récupérer les valeurs postées le premier coup et les réinjectées dans les input.

Confirme moi pour le rechargement et on verra si ca répond à ta question.

Répondre à Edouard

2

crunchla, le 5 jun 2007 à 12:15:18

Rebonjour,

En effet, mon script doit être rechargé mais l'image ne s'affiche pas.
Pour le test avec le if c'est en gros ce genre de script?

<INPUT TYPE="file" NAME="action" VALUE="envoi_image" OnClick=" this.form.submit();">.
<INPUT TYPE="submit" NAME="action" VALUE="envoi_form" OnClick="this.form.submit();">.

Traitement php :
if($_POST['action'] == "envoi_image") {
...
if($_POST['action'] == "envoi_form") {


Si j'ai compris, il faut que je récupère le chemin de l'image uploadée pour le mettre dans une variable et le mettre dans le input :
<input type="file" value="$variable">

J'ai cru comprendre qu'on ne pouvait attribuait une variable à un input type=file.

Répondre à crunchla

3

Edouard, le 5 jun 2007 à 15:27:09

En effet c'est à ce genre de chose que je pensais, je ferai ce genre de truc :

si action==envoi_image
alors
modifier la baliser form ou le champs hidden action pour faire une troisième étape (traitement du second form)
affecter le chemin et le nom de l'image à deux variables ($chemin et $image)
utiliser echo pour mettre un champs hidden avec ces variables (tu n'as plus besoin du champs file;
utiliser echo pour afficher l'image echo"<img src=$chemin/$image>"
utiliser echo pour mettre le second bouton submit

sinon
afficher le premier formulaire

je suis peut être pas assez clair, essaie de voir sinon poste tout ton script (cette partie) et je le ferai à temps perdu

Edouard

Répondre à Edouard

4

crunchla, le 5 jun 2007 à 15:45:00

Merci pour tes pistes...

J'essaie ce que tu m'as recommandé et si je n'y arrive pas je posterai ce que j'aurai essayé de réaliser.

A bientot!

Répondre à crunchla

5

crunchla, le 5 jun 2007 à 17:11:07

Salut!

Comme je ne suis pas encore rodée au php, j'ai évidemment pas réussi à faire ce que Edouard m'a suggéré.
Donc peux tu m'aider sur ce coup?
Attention je vais mettre du code!! ^^Le script de l'upload que j'ai récupéré est OK, ça peut tjrs servir pour tester ce qui cloche.

Voici le script de mon formulaire:

<html>
	<body>
<FORM ID="" METHOD="POST" ENCTYPE="multipart/form-data" name="action"> 
	<INPUT TYPE=FILE NAME="fichier_upload" value="envoi_image" size="33" />
	<INPUT TYPE=SUBMIT name="add_file" value="Add a file" /><br />
	<b>Browse your computer to add an image. <em>(2Mo max.)</em></b>
</FORM><br />

	<?php	
// UPLOAD D'IMAGES !
//***************************************
// on récupère les infos du fichier à uploader
// nom du champ
$fichier_temp = $_FILES['fichier_upload']['tmp_name'];
$fichier_nom = $_FILES['fichier_upload']['name'];
// on défini les dimensions et le type du fichier
list($fichier_larg, $fichier_haut, $fichier_type, $fichier_attr)=getimagesize($fichier_temp);
// infos de contrôle du fichier
$fichier_poids_max = 2097152;
$fichier_h_max = 1600;
$fichier_l_max = 1600;
// dossier de destination
$fichier_dossier = 'upload/';
// extension du fichier
$fichier_ext = substr($fichier_nom,strrpos( $fichier_nom, '.')+1);
// on renomme le fichier
$fichier_date = date("dmY-H:i:s");
$fichier_n_nom = $fichier_date.".".$fichier_ext;
	// on vérifie s'il y a bien un fichier à uploader
	if (!empty($fichier_temp) && is_uploaded_file($fichier_temp)) {
		// on vérifie le poids du fichier
		if (filesize($fichier_temp)<$fichier_poids_max) {
			// types de fichiers autorises 1=gif / 2=jpg / 3=png
			if (($fichier_type===1) || ($fichier_type===2) || ($fichier_type===3)) {
				// on vérifie si l'image n'est pas trop grande
				if (($fichier_larg<=$fichier_l_max) && ($fichier_haut<=$fichier_h_max)) {
					if (move_uploaded_file($fichier_temp, $fichier_dossier.$fichier_n_nom)) {
					// si le fichier est ok, on l'upload sur le serveur
							/*
							création de la miniature
							*/		
							// dimension maximale largeur et hauteur comprise
							$taille_max = 300;
							// si le fichier est plus grand que $taille_max on le miniaturise
							if (($fichier_larg > $taille_max) || ($fichier_haut > $taille_max)) {
								// définition des dimensions 
								if (($fichier_haut > $taille_max) && ($fichier_haut >> $fichier_larg)) {
								$mini_haut = $fichier_haut / ($fichier_larg / $taille_max);
								$mini_larg = $taille_max;
								}
								else {
								$mini_haut = $taille_max;
								$mini_larg = $fichier_larg / ($fichier_haut / $taille_max);
								}
								// si le fichier est un .gif
								if ($fichier_type === 1){
								// definition de l'image dont on va faire une miniature
								$fichier_source = imagecreatefromgif($fichier_dossier.$fichier_n_nom);
								// on prépare le fichier miniature qui accueillera l'image réduite
								$fichier_reduit = imagecreate($mini_larg, $mini_haut);	
								// fond blanc pour l'image
								$fond_blanc = imagecolorallocate($fichier_reduit, 255, 255, 255);
								// dimensions x et y à donner au fichier
								$fichier_larg_red = imagesx($fichier_reduit);
								$fichier_haut_red = imagesy($fichier_reduit);
								// on rajoute un mini_ defant le nom du fichier
								$nom_fichier_reduit = 'mini_'.$fichier_n_nom;
								// on redimensionne l'image de base dans le fichier $fichier_reduit
								imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut);
								// on rend transparent le fond blanc
								imagecolortransparent($fichier_reduit, $fond_blanc);
								// crée le fichier réduit définitif
								imagegif($fichier_reduit, $fichier_dossier."mini/".$nom_fichier_reduit);
								}
								
								// si le fichier est un .jpg / .jpeg
								if ($fichier_type===2){
								// définition de la qualité
								$qualite=80;
								// definition de l'image dont on va faire une miniature
								$fichier_source = imagecreatefromjpeg($fichier_dossier.$fichier_n_nom);
								// on prépare le fichier miniature qui accueillera l'image réduite	
								$fichier_reduit = imagecreatetruecolor($mini_larg, $mini_haut);
								// dimensions x et y à donner au fichier
								$fichier_larg_red = imagesx($fichier_reduit);
								$fichier_haut_red = imagesy($fichier_reduit);
								// on rajoute un mini_ defant le nom du fichier
								$nom_fichier_reduit = 'mini_'.$fichier_n_nom;
								// on redimensionne l'image de base dans le fichier $fichier_reduit
								imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut);
								// crée le fichier réduit définitif
								imagejpeg($fichier_reduit, $fichier_dossier."mini/".$nom_fichier_reduit, $qualite);
								}
								
								// si le fichier est un .png
								if ($fichier_type===3){
								// definition de l'image dont on va faire une miniature
								$fichier_source = imagecreatefrompng($fichier_dossier.$fichier_n_nom);
								// on prépare le fichier miniature qui accueillera l'image réduite
								$fichier_reduit = imagecreatetruecolor($mini_larg, $mini_haut);
								// dimensions x et y à donner au fichier
								$fichier_larg_red = imagesx($fichier_reduit);
								$fichier_haut_red = imagesy($fichier_reduit);
								// on rajoute un mini_ defant le nom du fichier
								$nom_fichier_reduit = 'mini_'.$fichier_n_nom;
								// on redimensionne l'image de base dans le fichier $fichier_reduit
								imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut);
								// crée le fichier réduit définitif
								imagepng($fichier_reduit, $fichier_dossier."mini/".$nom_fichier_reduit);
								}
						
							// si le fichier est plus petit que $taille_max pas besoin de le miniaturiser
							}
							else {
							$nom_fichier_reduit = $fichier_n_nom;
							}
							// transfert ok	
							echo "You well add your image.<br />";
					}
					// erreur
					else {
						echo "Uploading failed.<br />";
					}
				}
				// erreur
				else {
					echo "The image is too big. ( width and height : 1600px max.)<br />";
				}
			}
			// erreur
			else {
				echo "You must choose the right type of file : jpg or jpeg, gif, png. <br />";
			}
		}
		// erreur
		else {
			echo "Too big file, 2Mo maximum.<br />";
		}
	}
	// erreur
	else {
		echo "Choose the right type of file.<br />";
	}
//*********************************************
//fin script UPLOAD D'IMAGES	


if ( (isset($_POST["add_file"])) && ($_POST["add_file"]=="Add a file") ) {
	
	/*modifier la balise form
	...
	*/
	
	//affichage de l'image selon la présence de miniatures
	$chemin="upload/".$fichier_n_nom;
	if(is_file("upload/mini/mini_".$fichier_n_nom))
		$image="upload/mini/mini_".$fichier_n_nom;
	else $image="upload/".$fichier_n_nom;
	$lienimg="<a href=\"$chemin\" target=\"_blank\"><img src=\"$image\" alt=\"no image\" border=0/></a>";
	echo $lienimg;
	
	//bouton submit
	echo '<input type="submit" value="envoi tt!" />';
}
?>
<br/>	
<FORM METHOD="POST" name="action" value="envoi_form">
	<input type="text" name="title"/> Title&nbsp;&nbsp;
	<input type="text" name="namea"/> Your name<br />
	Content<br/>
	<textarea name="content" cols="60" rows="10"></textarea><br />
</FORM><br/>
	</body>
</html>


Et ici le script pour récupérer les variables et enregistrer l'article :
if(isset($_POST["title"])&&isset($_POST["namea"])&&isset($_POST["content"])) {
// ajouter article		
			$title=stripslashes(str_replace("|","",$_POST["title"]));
			$namea=str_replace("|","",$_POST["namea"]);
			$content=str_replace("|","",$_POST["content"]);
			$content=str_replace("\n","<br/>",$content);
			$content=stripslashes($content);
			$data="{$title}|{$namea}|{$content}";
			$timestamp=time();
			$date=date("d.m.y");
			if($fp=fopen("logs/{$timestamp}.{$date}.txt","w")) {
				fwrite($fp,$data);
				fclose($fp);
				$f->flatFileHandle();
			} else {
				$d->msg("could not write data");
				}
}

Comment pourrai-je rajouter l'image?
Comme ceci ? ->
echo "<a href=\"$chemin\" target=\"_blank\"><img src=\"$image\" alt=\"no image\" border=0/></a>";


Récapitulons :
- à ce stade, l'upload de l'image est OK;
- il me manque la modification du formulaire pour permettre de l'envoyer avec l'image uploadée.

J'attends avec impatience vos éclaircissements.

Merci. A bientot!
Crunchla<-

Répondre à crunchla

6

Edouard, le 5 jun 2007 à 17:41:24

Salut, je vais essayer de te faire ça vite fait, mais il faut clarifier les trois étapes de ton scripts (je pense que toi même tu y verras plus clair ainsi).
Si j'ai bien compris :
1 il upload l'image,
2 il complète avec 3 champs input (title, namea, content) un fichier log
3 il reçoit un message de félicitation.

Je n'ai pas lu le script d'upload (trop long) puisque tu dit qu'il marche.

Confirme moi déjà ça.

Edouard

Répondre à Edouard

7

crunchla, le 5 jun 2007 à 17:46:26

Resalut!

Oui en effet, il y a 3 étapes :
- upload de l'image;
- envoi du formulaire avec les autres input et textearea
- affichage du message de confirmation

Merci à toi de m'aider.

Répondre à crunchla

8

Edouard, le 5 jun 2007 à 18:08:09

Salut, le formulaire d'ajout de CCM déconne, à cause du boutton submit dans mon code.
Une adresse mail stp.
Edouard

Répondre à Edouard

9

Edouard, le 5 jun 2007 à 18:19:04

Trop cool tu fais le boulôt et le mec se casse, fonctionnaire !

Bon je poste quand même tant pis si y'a des manques

<?php
// on réorient vers l'étape par défaut
if (!isset($_POST['action'])){$action="etape1";} else{$action=$_POST['action'];}
// on récupère les variables si elles sont postées
if (!isset($_POST['fichier_upload'])){$fichier_upload="";} else{$fichier_upload=$_POST['fichier_upload'];}
// il y a peut être d'autres variables à récupérer pour ton upload (n'ai pas lu) notamment le chemin de destination sur ton serveur ?
if (!isset($_POST['title'])){$title="";} else{$title=$_POST['title'];}
if (!isset($_POST['namea'])){$namea="";} else{$namea=$_POST['namea'];}
if (!isset($_POST['content'])){$content="";} else{$content=$_POST['content'];}

// on entre dans la bonne étape de notre processus
if ($action=="etape1"){
// maintenant on va faire l'upload
// pour éviter d'utiliser tout le temps echo on va sortir du script php et utiliser de l'html
?>
<FORM action="tapage.php" ENCTYPE="multipart/form-data" METHOD="POST" name="formetape1">
<!-- ici tu gère vers quelle étape renvoie ce formulaire -->
<INPUT TYPE=HIDDEN NAME="action" value="etape2" />
<!-- fin gestion de l'action -->
<INPUT TYPE=FILE NAME="fichier_upload" value="envoi_image" size="33" />
<INPUT TYPE=SUBMIT name="add_file" value="Add a file" /><br />
<b>Browse your computer to add an image. <em>(2Mo max.)</em></b>
</FORM>
<? // on rerentre dans le script php de l'étape 1
}// fin de l'étape 1

if ($action=="etape2"){
// si tu entre ici c'est que tu a posté le formetape1
// tu peux tester tes variables en mettant des commandes echo de ce type
// echo"$fichier_upload";
// ici tu place ton script d'upload puisqu'il fonctionne
//*********************************************
//************* TRES LONG ******************
//*********************************************
// pour éviter d'utiliser tout le temps echo on va sortir du script php et utiliser de l'html
?>
<FORM action="tapage.php" METHOD="POST" name="formetape2">
<!-- ici tu gère vers quelle étape renvoie ce formulaire -->
<INPUT TYPE=HIDDEN NAME="action" value="etape3" />
<!-- fin gestion de l'action -->
<?
// affichage de l'image avec quelquechose de ce type
echo"<img src=$chemin/$image>" ;
?>
<input type="text" name="title" value=""/><br />
<input type="text" name="namea" value=""/><br />
<textarea name="content" cols="60" rows="10">

Répondre à Edouard

10

Edouard, le 5 jun 2007 à 18:20:24

Voilà la fin du script; putain de faille de sécurité, il est où l'admin ?

<input type="submit" value="ecrire le log" />
</FORM>
<? // on rerentre dans le script php de l'étape 2
}// fin de l'étape 2

if ($action=="etape3"){
// ici on complète le fichier log
//***************************************************************
//************* LA TU METS LE CODE POUR LE LOG ******************
//***************************************************************

// là tu le remercies
echo "l\'upload a été réalisé avec succès!";
}// fin de l'étape 3

Répondre à Edouard

11

crunchla, le 5 jun 2007 à 21:14:46

MDR!
Merci pour t'être penché sur mon problème.
Je ne suis pas connectée tout le temps sur CCM, désolée de ne pas avoir répondu plus tôt.
Je verrai ça demain au boulot. (jsuis en stage, donc encore un peu novice dans ce domaine)

Pour la sécurité, c'est un autre problème.J'ai une partie admin mais je ne l'ai pas mis ici car le code est déjà TRES LONG, je sais!

Merci en tout cas pour ton investissement!!

Bonne soirée.
Crunchla<-

Répondre à crunchla

12

crunchla, le 6 jun 2007 à 09:46:34

Bonjour!

Voilà, j'ai recodé tout mon code avec la méthode d'Edouard (c'est vrai que c'est plus facile avec des étapes!) et ça marche nickel!
Merci pour ton aide!

Je récapitule en gros :

	<?
	// on réoriente vers l'étape par défaut
	if (!isset($_POST['action']))
		{$action="etape1";} 
	else{$action=$_POST['action'];}

	// on récupère les variables si elles sont postées
	//fichier upload
	if (!isset($_POST['fichier_upload'])){$fichier_upload="";}else{$fichier_upload=$_POST['fichier_upload'];}
	//autres variables
	if (!isset($_POST['***'])){$***="";} else{$***=$_POST['***'];}
	...
	
// on entre dans la bonne étape de notre processus
	if ($action=="etape1"){
	// maintenant on va faire l'upload
	// pour éviter d'utiliser tout le temps echo on va sortir du script php et utiliser de l'html
	?>
	<FORM action="index.php?writer" ENCTYPE="multipart/form-data" METHOD="POST" name="formetape1">
	<INPUT TYPE=HIDDEN NAME="action" value="etape2" />
	<INPUT TYPE=FILE NAME="fichier_upload" value="envoi_image" size="33" />
	<INPUT TYPE=SUBMIT name="add_file" value="Add a file" />
	</FORM>;
	<?
	// on rerentre dans le script php de l'étape 1
	}// fin de l'étape 1
Partie 2
	if ($action=="etape2"){
	// si tu entre ici c'est que tu a posté le formetape1
	// tu peux tester tes variables en mettant des commandes echo de ce type
	// echo"$fichier_upload";
	
	/*
	//SCRIPT UPLOAD D'IMAGES !
	*/

	// pour éviter d'utiliser tout le temps echo on va sortir du script php et utiliser de l'html
	//affichage de l'image où vous voulez dans le formulaire
	?><FORM action="index.php?writer" METHOD="POST" name="formetape2">
	<INPUT TYPE=HIDDEN NAME="action" value="etape3" /><br/>
	<input type="text" name="title" value=""/> Title
	<input type="text" name="namea" value=""/> Your Name<br />
	Content<br/>
	<textarea name="content" cols="60" rows="10"><?/*moi j'ai mis le chemin dans le content*/ echo $lienimg?></textarea><br/>
	<input type="submit" value="ajouter article (log)" />
	</FORM>
	<?
	// on rerentre dans le script php de l'étape 2
	}// fin de l'étape 2
Partie 3
	if ($action=="etape3"){
	// ici on complète le fichier log
		if(isset($_POST["title"])&&isset($_POST["namea"])&&isset($_POST["content"])) {
		// enregistrer votre formulaire
		/*
		CODE POUR LOG
		*/
		// là tu le remercies
		echo "Ajouté, BRAVO!";
		}
	}// fin de l'étape 3
	?>


Voilà, envore merci à Edouard.

A bientot! Crunchla<-

Répondre à crunchla

13

 Edouard, le 6 jun 2007 à 11:17:03

Algorithme quand tu nous tiens, l'essentiel c'est que tu ai compris la technique.
A+

Répondre à Edouard
Collection CommentÇaMarche.net