Enpecher de poster un formulaire lors de la reactualisation

Eléphant du PHP | 56 Messages

11 juin 2007, 13:05

Bonjour à tous voilla j'ai un formulaire avec deux champ qui ce reactualise par la metode $_post
 if ( ($_POST["mensualite"] && $_POST["mensualite"] == $row["valeur_mens"])  
    || (!$_POST["mensualite"] && $i==0) ){ 
        $montants_array = array();  
        $montants = explode(";" , $row["montants"]); //récup des montants séparés par ;  
        //construction du tableau source de la liste déroulante  
        foreach ($montants as $un_montant){  
            $montants_array[] = array('id' => $un_montant, 'text' => $un_montant);   
        }  
mais le probleme c'est que lors de la reactualisation de la page les erreur des autre champ du type nom prenom etc.. aparaise vu qu'elle ne sont pas remplis donc je voudrais

Sois cacher les erreur comme cela
if ($_POST) $error = false; 
mais ca ne marche pas

Sois enpècher le script d'aller plus loin
if ( isset($_POST["x"]) ) { 
mais ca aussi ca ne marche pas

Merci d'avance de votre aide

ViPHP
ViPHP | 5924 Messages

11 juin 2007, 14:02

if ($_POST) $error = false; 
Cette ligne sera toujours vraie. Le tableau _POST est automatiquement créé par PHP, qu'il soit vide ou non.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

11 juin 2007, 14:02

Le problème est mal posé. En fait, badibad a un formulaire dans lequel il y'a plusieurs champs de saisie comme: nom, prénom etc...
et parmis eux il y'a 2 listes déroulantes dont une première présente un ensemble de mensualités relatives à un crédit et la seconde liste des montants relatifs à la mensualité choisie dans la promière liste.
Et finalement un bouton "submit" de validation du formulaire.

Le problème qui se pose est le suivant:
Quand la liste déroulante des mensualités change, un envoi (submit) est déclenché par l'évenement "onChange" et le programme doit donc se contenter de remplir la deuxième liste des montants sans vérifier tous les champs du formulaire, ce qui est malheusement le cas actuellement.

Pour information, le bouton submit de validation du formulaire est une image et quand il est appuyé il envoi le formulaire par la méthode POST. Il envoi son nom dans le postage sous la forme $_POST["x"] et $_POST["y"].

Conclusion: On veut que si le client clique sur le bouton de validation tous les champs du formulaire soit traités par le programme mais si c'est la liste mensualité qui en changeant envoi le submit, le programme ne doit pas valider tous les champs mais se contente de charger la deuxième liste selon le choix dans la première.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 56 Messages

11 juin 2007, 14:06

:D merci c'est vrai qu'avec toi c'est netement plus clair :) :D :D

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

12 juin 2007, 00:04

En fait j'ai trouvé ça au début de ton code (que tu as posté ici http://www.phpfrance.com/forums/voir_sujet-29896-75.php):
...
// needs to be included earlier to set the success message in the messageStack
require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CREATEPOACCOUNT);

$process = false;
if (isset($HTTP_POST_VARS['action']) && ($HTTP_POST_VARS['action'] == 'process')) {
$process = true;
....
J'en ai compris qu'en fait ton programme valide les champs du formulaire si ce dernier lui envoi un champ caché nommé "action" qui vaut la valeur "process"
Alors, si tu veux résoudre ton problème de postage c'est dans cette partie du code qu'il faut agir. Et il faut vider le contenu du champ "action" si ce n'est pas le bouton submit qui a été le déclencheur du postage.
On peut faire ça car on sait que $_POST["x"] et $_POST["y"] sont les noms du bouton submit.

Voici donc ma proposition de changement :
// needs to be included earlier to set the success message in the messageStack
require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CREATEPOACCOUNT);

$process = false;

  //annuler l'action de validation si le bouton/image submit n'a pas été cliqué
  if (!$_POST["x"] && !$_POST["y"]) $HTTP_POST_VARS['action'] = null;

  if (isset($HTTP_POST_VARS['action']) && ($HTTP_POST_VARS['action'] == 'process')) {
    $process = true;

Apporte ces changements et vérifie si ça marche.

Je te rappelle que tu dois réviser ton code et éliminer les changements qui ne marchent pas et que tu as fait auparavant.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 56 Messages

12 juin 2007, 00:21

:D :D :D :D :D :D
t'est un genie ca marche je sais pas comment te remercier et n'oublie pas si tu passe vers chez moi je te payerai le reo avec plaisir je te doi au moins ca


merci mille et mille et mille foid j'ai enfin fini :D :D

a plus

Eléphant du PHP | 56 Messages

12 juin 2007, 15:24

bonjour à tous je suis desoler je croit que j'ai crier victoire trop vite


je vient de m'apercevoir quand rajoutant
if (!$_POST["x"] && !$_POST["y"]) $HTTP_POST_VARS['action'] = null; 
ca me marquer plus les erreur d accors mais malheureusement en plus il m'accepte n'inporte quoi meme si les champ ne son pas remplis il sont accepter .

merci

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

12 juin 2007, 23:22

Même si tu valides par le bouton submit ?
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 56 Messages

14 juin 2007, 15:26

oupps desoler c'est de ma faut je viens de m'apercevoir que j'ai oublier d'enlever un ancien code


desoler de t'avoir deranger

et n'oublie pas le repas

a plus :D