[Formulaire] Problème de 2 submit

Résolu/Fermé
crunchla Messages postés 7 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 6 juin 2007 - 5 juin 2007 à 11:31
 Edouard - 6 juin 2007 à 11:17
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.
A voir également:

1 réponse

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.
1
crunchla Messages postés 7 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 6 juin 2007
5 juin 2007 à 12:15
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.
0
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
0
crunchla Messages postés 7 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 6 juin 2007 > Edouard
5 juin 2007 à 15:45
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!
0
crunchla Messages postés 7 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 6 juin 2007 > Edouard
5 juin 2007 à 17:11
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<-
0
Edouard > Edouard
5 juin 2007 à 17:41
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
0