[Résolu] Fonction php déclencé par un bouton

Fonction php déclencé par un bouton [Résolu] - PHP - Programmation

Marsh Posté le 14-05-2008 à 11:25:56    

Bonjour,
Voilà tout est dans le titre, j'aurais aimé savoir comment déclencher une fonction php à l'aide d'un bouton ?
Voici une partie de mon code :
 

Code :
  1. <form name="form_associatif" id="form_associatif" method="post" action="index.php?index.php?recuperation_formulaire">
  2. <table>
  3. <th>Information g&eacute;n&eacute;rale :</th>
  4. <tr>
  5.         ...
  6.         </tr>
  7. </table>
  8. <p id="boutons">
  9.  <input type="submit" value="Valider" onClick="Controle()">
  10.  <input name="effacer" type="reset" id="effacer" value="Effacer">
  11. </p>
  12. </form>


 
 
Ceci est la base de mon formulaire, ce que je voudrais faire c'est que lorsque je clique sur "Valider" ma fonction php permettant de valider mon formulaire s'exécute.

Code :
  1. function Controle()
  2. {
  3.    ...
  4. }


 
recuperation_formulaire.php étant l'affichage de mes variables du formulaire, qui lui est bien renvoyer lors du submit mais pas ma fonction Controle() !
 
Merci d'avance pour vos réponses !


Message édité par wifsimster le 15-05-2008 à 09:14:03
Reply

Marsh Posté le 14-05-2008 à 11:25:56   

Reply

Marsh Posté le 14-05-2008 à 11:30:11    

Ben y'a rien à faire. Tu mets dans le paramètre action du form le script PHP à exécuté, avec dedans le contrôle à faire.

Reply

Marsh Posté le 14-05-2008 à 11:37:40    

Si je suis ce que tu me dis :

Code :
  1. <form name="form_associatif" id="form_associatif" method="post" action="Controle()">
  2. <table>


Ca ne marche pas et ça ne doit pas être cela, soit plus précis, merci !

Reply

Marsh Posté le 14-05-2008 à 11:41:48    

Nanan, ça marche pas comme ça. Pour toute interaction faut passer par le serveur. Pour envoyer le formulaire, le navigateur a besoin d'une URL, donc tu lui files l'url d'un script, genre :
 

Code :
  1. <form method="post" action="controle.php">


 
Et après sur ton serveur, t'as un fichier controle.php où tu mets ce qu'il faut.
 
Dis-toi bien qu'il n'y a aucune liaison entre l'HTML et le PHP comme ça, il faut tout passer par des requêtes

Reply

Marsh Posté le 14-05-2008 à 11:42:07    

Tu confonds javascript et php (langage serveur <> langage client => http://forum.hardware.fr/hfr/Progr [...] 526_1.htm)
 
Bref, quant tu fais onClick="Controle()", le navigateur comprend que sur un clic, il va chercher la fonction javascript Controle et non la fonction php
 
Et puis ca : action="index.php?index.php?recuperation_formulaire", c'est du n'importe quoi, ce serait plutot action="index.php?page=recuperation_formulaire" ou action="recuperation_formulaire.php"
 
edit : bon ben, méga  [:benou_grilled]


Message édité par babasss le 14-05-2008 à 11:43:13

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 14-05-2008 à 11:55:18    

Tout d'abord merci pour la précision sur l'action et le onClick !
Pour ce qui est du coté serveur-client je l'avais en tête mais ça se mélange à force :s
 
Mon problème est que si je revois mon form vers une page Controle.php j'ai un soucis au niveau de ce que me retourne ma controle car il affiche les erreurs directement ! et non plus sur ma page du formulaire !

Code :
  1. function Controle()
  2. {
  3.    $erreurs=array(); //tableau qui stocke les erreurs.
  4.    ...
  5.     // Je fais mes contrôles
  6.    ...
  7.    if(count($erreurs)==0)
  8.    {
  9.        //Je travail sur ma DB
  10.    }
  11.     // Ici on affiches toutes les erreurs retournées
  12.     else
  13.     {
  14.       echo "<p class='erreur'>";
  15.        for($i=0;$i<count($erreurs);$i++)
  16.        {
  17.            echo "- ".$erreurs[$i]."<br />";
  18.        }
  19.       echo "</p>";
  20.       }
  21. }
  22. ?>


 
C'est pour cela qu'il faudrait que je garde mon script php sur la même page que mon formulaire pour pouvoir rester sur le formulaire et afficher les erreurs.
Et lorsque je n'ai plus d'erreurs être redirigé vers le résultat de ce formulaire(tableau avec les valeurs des variables)
 
Meci pour votre aide mais je suis pas sortit encore ... :pfff:


Message édité par wifsimster le 14-05-2008 à 12:03:39
Reply

Marsh Posté le 14-05-2008 à 12:01:23    

Ouais, le navigateur n'affiche que ce qu'on lui donne. Donc à toi de regénérer le formulaire avec les erreurs et valeurs déjà saisies. Faut tout faire à la patte.

Reply

Marsh Posté le 14-05-2008 à 13:57:45    

Uhm ... de l'aide s'il vous plait !!!!

Reply

Marsh Posté le 14-05-2008 à 14:37:27    

alors une solution serait de :

  • envoyer le formulaire valider sur formulaire.php?action=controle
  • Avant le code du formulaire, tu mets if ($_GET['action'] == 'controle') { le code du controle directement (sans function Controle() ) }


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 14-05-2008 à 15:26:57    

Je tente le coups dessuite ... merci
 
Edit : alors je vais de mettre ton idée en place et elle fonctionne parfaitement pour l'exécution de mon script de contrôle, merci !
Maintenant il ne me manque plus que à faire une redirection quand mon contrôle et bon ...  :sweat:

Message cité 1 fois
Message édité par wifsimster le 14-05-2008 à 15:58:28
Reply

Marsh Posté le 14-05-2008 à 15:26:57   

Reply

Marsh Posté le 14-05-2008 à 16:02:57    

wifsimster a écrit :

Maintenant il ne me manque plus que à faire une redirection quand mon contrôle et bon ...  :sweat:


include ou location (ca dépend de ce que tu veux à la fin)


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 14-05-2008 à 16:06:37    

Après avoir fait le contrôle, j'aimerais aller sur une page qui reprend toute les informations rentrées.
Je ne vois pas comment faire avec un include ou tu veux dire un require ?

 
Code :
  1. header("location:../recuperation_formulaire.php" )


Quelque chose dans le genre peut être ...?

Message cité 1 fois
Message édité par wifsimster le 14-05-2008 à 16:10:44
Reply

Marsh Posté le 14-05-2008 à 16:11:58    

wifsimster a écrit :

avec un include ou tu veux dire un require ?


 
REquire et include font en gros la même chose.... :D


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 14-05-2008 à 16:14:17    

Je sais, je sais  :)
Mais au vu de mes résultats  :sweat:

 
Code :
  1. require ("recuperation_formulaire.php" );


Ne fait strictement rien !

 
Code :
  1. header("location: recuperation_formulaire.php" );


Me produit ce code d'erreur :
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\...\formulaire.php:8) in C:\xampp\...\formulaire.php on line 527

 

C'est surement une très grosse erreur de ma part mais je doit être aveugle ou ne pas avoir assez de connaissances  :whistle:

 

A ce que j'ai compris header c'est ce que renvoie le serveur au navigateur.

 

Je veut juste une redirection php ='(

 

Edit :

 

Les redirections sont des en-têtes HTTP. Or, selon le protocole HTTP, le en-têtes HTTP doivent être envoyés avant tout autre type de contenu, ce qui signifie qu'aucun caractère ne doit être envoyé avant l'appel de la fonction header, pas même un espace !

 

En d'autre termes, la fonction header() doit impérativement être utilisée avant tout code HTML.

 

Je crois avoir compris, mais comment alors faire une redirection dans un script php !
Logiquement mon script est interprété lors du chargement et donc il ne devrait pas avoir de header sur ma page...
Je suis perdu  :heink:


Message édité par wifsimster le 14-05-2008 à 16:42:43
Reply

Marsh Posté le 14-05-2008 à 16:58:47    

Help !!!!!  :ouch:

Message cité 1 fois
Message édité par wifsimster le 14-05-2008 à 16:59:01
Reply

Marsh Posté le 14-05-2008 à 17:06:07    

wifsimster a écrit :

Help !!!!!  :ouch:


Issu de la FAQ php (http://forum.hardware.fr/hfr/Programmation/BiblioLinks/faq-php-update-sujet_16526_1.htm) : "La fonction header doit être placée avant tout sortie  (code HTML, msg d'erreur PHP etc...) vous pouvez avoir 20 Mo de code php avant, du moment que ça n'affiche rien."
Donc vérifie que tu n'envoies pas de HTML avant d'utiliser le location....


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 14-05-2008 à 17:13:32    

Code :
  1. // Si aucune erreur n'est retournée...
  2. if(count($erreurs)==0)
  3. {
  4. //Récupérer et stoquer les valeurs des cases dans des variables.
  5. $form_nom_assoc = $_POST['nom_assoc'];
  6.  ...
  7. $form_site_internet = $_POST['site_internet'];
  8.          //On se connecte sur le serveur
  9.          //On séléctionne la DB
  10.          // on insère les informations du formulaire dans la table
  11.          ...
  12. mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
  13. // On  ferme la connexion à la DB
  14. mysql_close(); // Déconnexion de MySQL
  15. // Redirection vers la recuperation du formulaire
  16. header("location: recuperation_formulaire.php" );
  17. }


 
Voici la condition dans laquelle rentre le script si il n'y a aucune erreur, donc soit je ne vois pas le problème dans mon script soit j'ai du code qui se balade avant, mais le script n'est t'il pas traité en premier lors du contrôle ?
 
Edit:
 
Je viens de mettre mon script en premier même avant mon :

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">


 
J'ai le même problème de cette manière, j'en conclu donc que c'est mon script php qui doit me sortir un echo quelque par  :pfff:
 
Voici ce que se passe en détail dans le contrôle :
 

Code :
  1. <?php
  2. if ($_GET['action'] == 'controle') // Si la variable existe, on affiche le code dans l'index
  3. {
  4. //----------------------------------------------------------------------------------------------------------------------------------------------------------------------
  5. //  Bloc php permettant la vérification du formulaire
  6. //----------------------------------------------------------------------------------------------------------------------------------------------------------------------
  7. $erreurs=array(); //tableau qui stocke les erreurs.
  8. // Vérification du nom de l'association
  9. if (isset($_POST['nom_assoc']))
  10. {
  11. $_POST['nom_assoc'] = htmlspecialchars($_POST['nom_assoc']); // On rend inoffensives les balises HTML que le visiteur a pu rentrer
  12. // Permet les caractères alphanumériques ainsi que le "-" et l'espace
  13. if (preg_match("#^[a-zA-Z0-9- ]{2,20}$#", $_POST['nom_assoc']))
  14.     {
  15.        // echo $_POST['nom_assoc'].' est un nom d\'association <strong>valide</strong> !';
  16.     }
  17.     else
  18.     {
  19.         $erreurs[]= 'Le nom de l\'association n\'est pas valide !(sans accent)';
  20.     }
  21. }


 
J'ai tout une liste de contrôle (if) de ce type dans mon script, je ne vois pas du tout où j'écrirais un quelconque code avant le header !


Message édité par wifsimster le 14-05-2008 à 17:34:27
Reply

Marsh Posté le 14-05-2008 à 19:01:29    

Bon bon bon, en cherchant j'en suis arrivé au point où il faut absolument que mon header de redirection soit situé au début de mon code pour que cella fonctionne correctement.
 
Or pour le bon fonctionnement de mon programme je ne peut pas insérer tout mon script au début du code !
 
-.- Encore de nouveau un problème ...

Reply

Marsh Posté le 14-05-2008 à 19:03:20    

wifsimster a écrit :

Or pour le bon fonctionnement de mon programme je ne peut pas insérer tout mon script au début du code !


Il le faut. C'est un problème d'organisation. Beaucoup de gens programment la validation d'un formulaire au milieu du code HTML. Faut un peu séparer tout ça

Reply

Marsh Posté le 15-05-2008 à 09:10:16    

J'ai réussis hier soir, c'est bon la partie de mon script qui ne pouvais pas bouger, n'a pas bougé  :ange:  
Avec une petite variable qui déclenche mes echo, le tour est joué  :jap:  
 
Merci pour tout surtout babasss qui m'a bien aidé  ;)


Message édité par wifsimster le 15-05-2008 à 09:11:32
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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