[Formulaire] Problème de 2 submit

Résolu
crunchla Messages postés 7 Statut Membre -  
 Edouard -
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

1 réponse

  1. Edouard
     
    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
    1. crunchla Messages postés 7 Statut Membre
       
      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
    2. Edouard
       
      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
    3. crunchla Messages postés 7 Statut Membre > Edouard
       
      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
    4. crunchla Messages postés 7 Statut Membre > Edouard
       
      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
    5. Edouard > Edouard
       
      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