Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1519 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Formulaire avec 2 boutons de validation ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Formulaire avec 2 boutons de validation ?

n°1187363
kirtap01
Posté le 29-08-2005 à 19:21:05  profilanswer
 

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. ?>

mood
Publicité
Posté le 29-08-2005 à 19:21:05  profilanswer
 

n°1187413
dwogsi
Défaillance cérébrale...
Posté le 29-08-2005 à 21:44:01  profilanswer
 

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})/
n°1187424
gatsusat
Posté le 29-08-2005 à 22:23:21  profilanswer
 

@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
n°1187437
sielfried
Posté le 29-08-2005 à 22:43:01  profilanswer
 

(value, pas action, l'attribut)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1187456
dwogsi
Défaillance cérébrale...
Posté le 29-08-2005 à 23:49:55  profilanswer
 

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})/
n°1187577
gatsusat
Posté le 30-08-2005 à 10:19:17  profilanswer
 

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

n°1187681
erel69
Posté le 30-08-2005 à 12:16:12  profilanswer
 

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
n°1187732
gatsusat
Posté le 30-08-2005 à 13:31:46  profilanswer
 

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

n°1188095
erel69
Posté le 30-08-2005 à 18:21:26  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Formulaire avec 2 boutons de validation ?

 

Sujets relatifs
[PHP] la variable environnement $REMOTE_USERImages survolées en PHP, est-ce possible?
Problème d'espacement entre les tableaux en PHPPHP et WAP
validation w3c et javascript: erreur?Date du jour en PHP (oui oui je sais ...)
[AJAX] Les boutons ne sont pas cliquables dans firefox[PHP] Problème de parser
PHP et tiers[PHP]Sessions supprimées immédiatement
Plus de sujets relatifs à : [PHP] Formulaire avec 2 boutons de validation ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR