IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Variable unique pour plusieurs formulaires


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Developpeur amateur
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Points : 26
    Points
    26
    Par défaut Variable unique pour plusieurs formulaires
    Bonsoir,

    Je viens vers vous car je bloque sur des formulaires.
    J'ai un tableau généré lors de l'ouverture de la page avec les valeurs de ma BDD, donc avec un nombre de ligne variable. Pour chaque ligne, la dernière colonne contient un bouton "valider", et un bouton "Rejeter".
    Admettons qu'il y ai 5 lignes à mon tableau. J'aimerai pouvoir valider/rejeter une des lignes en cliquant sur le bouton correspondant.

    Voici le code pour construire le tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while ($uneligne = mysqli_fetch_row($result))
    {
    	print("<form action=protection.php method=post>");
    	print("<TR><TD>".$uneligne[0]."</TD><TD>".$uneligne[1]."</TD><TD>".$uneligne[2]."</TD><TD><input name=ident type=text value=".$uneligne[3]."></TD><TD><input type=submit name=valid".$uneligne[3]." value=Valider>------<input type=submit name=reject".$uneligne[3]." value=Rejeter></TD></TR>");
    	print("</form"); 
    }
    Et plus loin une fois que j'ai cliqué sur un des boutons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //validation ou rejet de l'inscription
    @$ident = $_POST[ident];
    echo $ident
    J'ai mis les".$uneligne[3]." dans les noms car j’espérai pouvoir récupérer ainsi le nom du bouton sur lequel j'ai cliqué. Mais je doute que ce soit la bonne méthode.
    Pouvez-vous m'aider svp?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu oublies de mettre des guillemets sur tes attributs.
    Tu peux utiliser une notation en tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<input type="submit" name="reject['.$uneligne[3].']" value="Rejeter">';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($_POST['reject'] as $key=>$value) {
       echo $key;
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Developpeur amateur
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Points : 26
    Points
    26
    Par défaut
    Merci, mais ça ne fonctionne pas en l'état.
    Mettre les guillemets est-il vraiment utile ? Vu que ma page se génère correctement avec mon code, et les bouton prennent bien les noms "valid102" et "reject102" par exemple.

    Ensuite voici le message d'erreur obtenu pour le foreach :
    Warning: Invalid argument supplied for foreach() in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\projects\Loto\scripts\protection.php on line 63
    J'avoue que je n'ai pas bien compris l'utilisation du foreach. Il va parcourir chaque case du tableau ? Dans quel but ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Mettre les guillemets est-il vraiment utile ?
    oui

    Si tu fais
    tu obtiens quoi ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Developpeur amateur
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Points : 26
    Points
    26
    Par défaut
    Voici ce que j'obtiens comme nom de bouton avec les guillemets :
    Alors qu'avec mon code initial j'obtiens pour la même ligne :
    Avec :
    J'ai :
    .array(2) { ["ident"]=> string(3) "108" ["reject"]=> array(1) { ["'.104.'"]=> string(7) "Rejeter" } }

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as mal intégré mon code.
    J'ai utilisé des guillemets simples pour le echo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<input type="submit" name="reject['.$uneligne[3].']" value="Rejeter">';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    Bonjour à tous.
    @TabbHonmin
    Il me semble que tu n'utilises pas la bonne méthode. Pour chaque ligne du tableau, tu dois avoir deux formulaires. Un pour le bouton "Valider" et un autre pour le bouton "Rejete"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    while ($uneligne = mysqli_fetch_row($result)) {
            print('<tr>');
            print('<TD>' . $uneligne[0]. '</TD>');
            print('<TD>' . $uneligne[1]. '</TD>');
            print('<TD>' . $uneligne[2]. '</TD>');
     
            /* Formulaire pour valider */
            print('<TD>';
    	print('<form action="protection.php" method="post">');
            print('<input type="hidden" name="do" value="valider"/>');
            print('<input type="hidden" name="key" value="' . $uneligne[3]. '"/>');
            print('<input type="submit" name="valider"/>');
    	print("</form");
            print('</TD>');
     
            /* Formulaire pour rejeter */
            print('<TD>';
    	print('<form action="protection.php" method="post">');
            print('<input type="hidden" name="do" value="rejeter"/>');
            print('<input type="hidden" name="key" value="' . $uneligne[3]. '"/>');
            print('<input type="submit" name="valider"/>');
    	print("</form");
            print('</TD>');
            print('</tr>');
    	}
    Sur la page protection.php, il te suffit de tester la valeur de $_POST['do'] et selon sa valeur tu valideras ou tu rejeteras la demande d'identifiant $_POST['key'];

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Non. Il est tout aussi correct d'avoir un seul formulaire avec deux boutons submit dont tu testes la valeur pour connaitre l'action souhaitée.

    La solution au problème est celle décrite par sabotage.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    @Bovino : Vous avez raison.
    Néamoins il me semble que utiliser une methode comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<input type="submit" name="reject['.$uneligne[3].']" value="Rejeter">';
    n'est pas très éfficace. Elle implique (si je ne me trompe pas) un traitement supplémentaire pour avoir l'id de la demande à traiter; alors qu'en utilisant un champ de formulaire caché ou encore les cookies (plus sécurisé) est mieux.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Developpeur amateur
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Points : 26
    Points
    26
    Par défaut
    Merci pour vos réponse.
    J'approche du but puisque le me donne ceci :
    .array(2) { ["ident"]=> string(3) "108" ["reject"]=> array(1) { ["'.104.'"]=> string(7) "Rejeter" } }
    Et les valeurs en rouges correspondent bien au bouton cliqué.

    J'ai donc une question de débutant : Quel est le nom de la variable qu'il me faut tester pour la suite ?

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    alors qu'en utilisant un champ de formulaire caché ou encore les cookies (plus sécurisé) est mieux
    Je ne vois pas ce que viennent faire les cookies la dedans.
    Un cookie n'est pas plus sécurisé qu'un formulaire ou que tout élément qui est géré par le navigateur.

    Pour le côté HTML, l'écriture en tableau correspond plus au cas ou on veut transmettre plusieurs éléments.
    Dans le cas présent, on pourrait avoir effectivement un champ caché mais un seul formulaire suffit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<input type="hidden" name="id" value="'. $uneligne[3] . '"><input type="submit" name="action" value="Accepter"><input type="submit" name="action" value="Rejeter">
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo $_POST['id'];
    if ($_POST['action'] == "Rejeter") {
     ....
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Developpeur amateur
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Points : 26
    Points
    26
    Par défaut
    Merci encore pour votre patience. Je découvre le php depuis quelques jours seulement

    La ça fonctionne et j'utilise donc le code ci-dessous pour traiter les rejet/validation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach ($_POST['reject'] as $key=>$value) {
       	echo $key;
    	//la suite de mes requêtes pour rejeter
    }
    foreach ($_POST['valid'] as $key=>$value) {
    	echo $key;
    	//la suite de mes requêtes pour valider
    }
    Par contre si je rejette, j'obtiens :
    Notice: Undefined index: valid in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\projects\Loto\scripts\protection.php on line 86

    Warning: Invalid argument supplied for foreach() in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\projects\Loto\scripts\protection.php on line 86
    Ceci correspond au foreach de la validation, et inversement si je valide, j'ai le même message d'erreur pour le foreach du rejet. Ca fait pas propre.

    J'ai essayé de mettre chacun des foreach dans des if pour n'en exécuter qu'un, mais ça n'a rien changé...


    EDIT : C'est bon j'avais juste oublié le isset.

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 96
    Points : 140
    Points
    140
    Par défaut
    Salut TabbHonmin,

    Dit moi ce que tu en penses :

    1) tu pourrait n'avoir q'une seule balise form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    print("<form action=protection.php method=post>");
    while ($uneligne = mysqli_fetch_row($result))
    {
     
    	print("<TR><TD>".$uneligne[0]."</TD><TD>".$uneligne[1]."</TD><TD>".$uneligne[2]."</TD><TD><input name=ident type=text value=".$uneligne[3]."></TD><TD><input type=submit name=valid".$uneligne[3]." value=Valider>------<input type=submit name=reject".$uneligne[3]." value=Rejeter></TD></TR>");
     
    }
     
    print("</form>");
    2) Change tes input submit pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <input type=submit name=action[valid][".$uneligne[3]."] value=Valider>
    <input type=submit name='action[reject][".$uneligne[3]."]' value=Rejeter>
    Comme tu peux voir:
    a) J'ai utiliser une notation array, du fait qu'il ny a plus qune seule balise formulaire, il faut classer tout ca
    b) Jai changer le name pour "action". Cest une mauvaise pratique de reposer une logique php sur la valeur de value dans un bouton submit, imagine que tu doit mettre ton site anglais un jour, en changeant la valeur de value, ton code qui reposait dessus va planter et tu devras le modifier
    c) a la place jai incorporer dans le nom du submit "valid" et "reject"


    3) Si une foi ton formulaire envoyer tu print la variable $_POST, tu auras ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Array
    (
        [ident] => 3
        [action] => Array
            (
                [reject] => Array
                    (
                        [3] => Rejeter
                    )
     
            )
     
    )
    4) Pour aller chercher les info que tu a besoins :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $action = current(array_keys($_POST['action'])); // ex : reject
    $ident  = current(array_keys($_POST['action'][$action])); // ex : 55

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Déclaration de variable pour plusieurs formulaires
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 24/07/2014, 10h38
  2. [VBA-E]une macro unique pour plusieurs fichiers excel
    Par fanchic29 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/04/2006, 16h20
  3. Un submit pour plusieurs formulaires
    Par beufa dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/11/2005, 15h51
  4. Comment utiliser la meme table pour plusieurs formulaires
    Par pacodelareunion dans le forum Access
    Réponses: 5
    Dernier message: 26/10/2005, 15h17
  5. variable globale pour plusieurs Form
    Par ced2004 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/04/2005, 08h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo