[PHP] Formulaire avec 2 boutons de validation ?

Formulaire avec 2 boutons de validation ? [PHP] - PHP - Programmation

Marsh Posté le 29-08-2005 à 19:21:05    

Bonjour, et merci de votre aide.  
 
Je cherche à créer un formulaire de saisie dont l'apparence et le nombre de champs  
sont dynamiques, et pour déclencher le réaffichage j'utilise le bouton submit, qui  
pointe vers l'url de la même page.  
 
Mais une fois la saisie terminée je dois aussi enregistrer les informations saisies  
et pour cela il faut que j'envoie les données du formulaire à une page d'enregistrement.  
 
J'ai donc besoin de 2 boutons submit !  :??:  
 
Comment faire ?  :(  
 
 
PS: un peu de code illustratif de ce que je fais:  

Code :
  1. <?php // -- SAISIE.PHP = formulaire de saisie --  
  2. include_once "utils.php";
  3. // -- récupération des valeurs $_GET et $_POST:  
  4. $action  = Get_Param ("action",  "" );
  5. $timestamp = date("Y-m-d H:i:s", time());
  6. $form_horodate = Get_Param ("form_horodate", $timestamp);
  7. $form_objet = Get_Param ("form_objet", "" );
  8. $form_modalites = Get_Tab_Params ("form_modalites", "" );
  9. // -- Formulaire --
  10. ?>
  11. <html><head><title>Saisie</title></head>
  12. <body>
  13.   <div align="center">Saisie des donn&eacute;es</div>
  14.   <table>
  15. <form method="post" name="form1" action="saisie.php">
  16. <?php // -- Champs de saisie --  
  17.     if ($action <> "" )
  18. { echo "  <tr><td> action </td>\n";
  19.   echo "    <td><input disabled type='text' name='action' size = '30' value='$action' title='non modifiable'>\n";
  20.   echo "  </td></tr>\n";
  21. }
  22. editfield ("form_horodate", "date et heure", form_horodate, " " );
  23. editfield ("form_objet",  "objet",  $form_objet,  " (appareil)" );
  24. editfield ("form_modalites",  "modalit&eacute;s", $form_modalites, "(modalités)" );
  25. ?> 
  26.   </table>
  27.   <table>
  28. <?php // -- Boutons de validation --  
  29. ?>
  30. <tr>
  31. <td align="center">
  32.   <input type="submit" action="saisie.php?action=redraw" value="Champ suivant" title="Valider la saisie de ce champ">
  33. </td>
  34. <td align="center">
  35. <!--   j'ai aussi essayé sans succès :   --
  36.   <a href="enreg.php?action=enreg"><button id="id" name="name" title="Enregistrer la saisie" onClick="saisie.php?action=enreg">Enregistrer</button></a>
  37.   -->  
  38.   <input type="submit" action="saisie.php?action=enreg"  onClick="enreg.php?action=enreg" value="Enregistrer" title="Enregistrer la saisie">
  39. </td>
  40. </tr>
  41. </form>
  42. </table>
  43. </body>
  44. </html>


 
 
et le fichier UTILS.PHP:  

Code :
  1. <?php // -- utils.PHP -- fonctions utiles --  
  2. //_______________________________________________________________
  3. // Get_Param ($name, $value)
  4. //  retrouve la valeur d'un paramètre d'appel de la page  
  5. function Get_Param ($name, $value="" )
  6. {  if   (isset($_POST[$name]))  { return UnQuote ($_POST[$name]); }
  7. else if (isset($_GET [$name]))  { return UnQuote ($_GET [$name]); }
  8. else        { return $value; }
  9. } // Get_Param ($name, $value)
  10. //_______________________________________________________________
  11. // Get_Tab_Params ($name, $value)
  12. //  retrouve la valeur d'un tableau de paramètres d'appel de la page  
  13. function Get_Tab_Params ($name, $value="" )
  14. {  $i = 0;
  15. $j = 20;
  16. while ($j > $i)
  17. { $p = Get_Param ("$name$i", $value);
  18.  $resultat[$i] = $p;
  19.  // -- autorise la suppression de valeurs nulles   
  20.  if (isset($_POST [$name.$i]) OR isset($_GET [$name.$i]))
  21.    $i++;
  22.  else $j = $i;
  23. } // while  
  24. return $resultat;
  25. } // Get_Tab_Params ($name, $value)
  26. //---------------------------------------
  27. // editfield ($nom, $invite, $valeur, $commentaire)
  28. //  Permet la modification d'une variable chaine ou tableau de chaines  
  29. function editfield ($nom, $invite, $valeur, $commentaire)
  30. { // --  
  31. $multiple = is_array ($valeur);
  32. echo "  <tr>\n";
  33.     echo "    <td>".$invite." &nbsp;</td>\n";
  34. echo "    <td>\n";
  35. if ($multiple)
  36. { $i=0;
  37.  foreach ($valeur as $key => $value)
  38.  if ($value <> "" )
  39.  { echo "      <input type='text' name='".$nom.$key."' size = '30' value=\"".htmlspecialchars($value)."\" ".
  40.     " title='(effacer cette valeur pour la supprimer de la liste)' > <br/>\n";
  41.   $i++;
  42.  }
  43.  echo "      <input type='text' name='".$nom."$i' size = '30' value=\"".htmlspecialchars($value)."\" ".
  44.     " title=\"".htmlspecialchars($commentaire)."\">";
  45. }
  46. else
  47. { echo "      <input type='text' name='".$nom."' size = '30' value=\"".htmlspecialchars($valeur)."\" ".
  48.     " title=\"".htmlspecialchars($commentaire)."\">";
  49. }
  50. echo "    </td>\n"; ;
  51.     echo "  </tr>\n";
  52. } // editfield ($nom, $invite, $valeur, $commentaire)  
  53. ?>

Reply

Marsh Posté le 29-08-2005 à 19:21:05   

Reply

Marsh Posté le 29-08-2005 à 21:44:01    

Bah sinon tu met un champ type hidden que tu nome action, ensuite tu créé un second bouton qui change la valeur du champ action et qui envoit le formulaire. Ca implique un peu de js.
 
Ensuite tu enregistre les données si $_POST["action"] == "save" et avec un header() tu peu envoyer le visiteur vers une autre page.


Message édité par dwogsi le 29-08-2005 à 21:45:05

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 29-08-2005 à 22:23:21    

@dwogsi, ta solution est à chier, mais bien à chier.
si tu traitais le formulaire avec la même page et en fonction du submit envoyé
 
ton HTML :  
<input type="submit" value="supprimer" name="action">
<input type="submit value="ajouter" name="action">
 
et en PHP :
$action = ((isset($_POST['action']) ? $_POST['action'] : '';
 
et ensuite avec un swith
switch($action){
case 'supprimer':
 action1;
action2;
break;
case 'modifier':
.....
break;
}
 
edit: merci pà sielfried je suis allé un pru trop vite


Message édité par gatsusat le 29-08-2005 à 23:00:41
Reply

Marsh Posté le 29-08-2005 à 22:43:01    

(value, pas action, l'attribut)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 29-08-2005 à 23:49:55    

gatsusat a écrit :

@dwogsi, ta solution est à chier, mais bien à chier.
si tu traitais le formulaire avec la même page et en fonction du submit envoyé
 
ton HTML :  
<input type="submit" value="supprimer" name="action">
<input type="submit value="ajouter" name="action">


 
Euh oui la je reconnais mon erreur, mille pardons vraiment, y avais quand même mieux et nous en avons la preuve....
 
Alez-y, envoyez moi des pierres je suis pret.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 30-08-2005 à 10:19:17    

nan pas besoin, du moment que tu appliques la bonne méthode c'est tout ce qui compte

Reply

Marsh Posté le 30-08-2005 à 12:16:12    

Pour ma part je trouve cette méthode encore mauvaise ;)
 
Je m'explique : Le problème de cette méthode vient du fait que le test est effectuer sur la valeur du submit. En gros, si on a envie de changer le texte du bouton (par exemple "ajouter" => "Ajouter l'enregistrement" ), le test n'est plus bon.
 
C'est pourquoi je préfère changer le nom du submit.
Exemple :

Code :
  1. <input type="submit" name="submit_add" value="Ajouter" />
  2. <input type="submit" name="submit_reload" value="Recharger" />


 
Et ensuite définir l'action à effectuer suivant le submit employé :

Code :
  1. if( isset($_POST['submit_add']) ) $action = 'add';
  2. else if( isset($_POST['submit_reload']) ) $action = 'reload';


---------------
France Hardware | Degroup Test | Degroup News
Reply

Marsh Posté le 30-08-2005 à 13:31:46    

ben ouais, mais nan, tu te galère plus qu'il ne le faut.
 
LE mieux encore c'est de définir des variable en entête de ta page correspondants aux submit :  
 
$submit_add = "Ajouter";
$submit_reload = "Recharger";
 
et dans le code tu fais juste des echo et ou tu te sers de ces variables pour le traitement, c'est plus souple que de faire ton traitement à la con

Reply

Marsh Posté le 30-08-2005 à 18:21:26    

En quoi est-ce plus souple ? En rien...
 
Et même si tu parles de "traitement à la con", je vais prendre la peine de t'expliquer.
 
 
Lorsqu'un site est "bien fait", le code php est séparé du code html, pour qu'un designer, sans connaissance en php, puisse modifier l'apparence du site.
 
Avec ta méthode, le designer doit aller dans le code source pour changer la valeur du submit. Avec la mienne, il peut le faire dans son code html, sans perturber le code php.
 
 
 
Donc la prochaine fois merci d'argumenter pour ton code "plus souple" par rapport à mon "traitement à la con".


---------------
France Hardware | Degroup Test | Degroup News
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed