Bonjour, je voudrais mettre en place plusieurs formulaire sur une seule page mais quand je veux mettre un form name="nom" puis que je fais un var_dump($_POST['nom]) il me retourne

Notice: Undefined index: login in XXXXXXX on line 16

mon formulaire

  <form class="form-signin" method="POST" name="login" accept-charset="UTF-8">
      <h2 class="form-signin-heading">Connexion à <?= $SITE_NAME; ?></h2>
      <div class="login-wrap">
          <div class="user-login-info">
              <input type="text" class="form-control" name="username" placeholder="Identifiant" autofocus>
              <input type="password" class="form-control" name="password" placeholder="Mot de passe">
          </div>
          <label class="checkbox">
              <input type="checkbox" value="remember-me"> Rester connecté
              <span class="pull-right">
                  <a data-toggle="modal" href="#myModal"> Mot de passe oublié?</a>

              </span>
          </label>
          <button class="btn btn-lg btn-login btn-block" type="submit">Connexion</button>

          <div class="registration">
              Vous n'avez pas de compte?
              <a href="<?= $SITE_URL; ?>/register">
                  Créer un compte
              </a>
          </div>

      </div>
      </form>

avez-vous une idée?

14 réponses


Lartak
Réponse acceptée

Bonsoir.
Il n'y a pas d'attribut name dans la création d'un formulaire, c'est uniquement pour les éléments de celui-ci.
Si tu veux différencier les formulaires qui sont sur la même page et qui ont la même page de traitement, tu fais avec un input caché, exemple :

<input type="hidden" name="method" value="signup">
// Puis dans un autre formulaire :
<input type="hidden" name="method" value="login">

Et dans la partie traitement :

if (isset($_POST)):
    switch ($_POST['method']){
        case 'login':
            // Traitement du formulaire (login)
        break;
        case 'signup':
            // Traitement du formulaire (signup)
        break;
    }
endif;

Bonjour Yubo,

D'une part, dans le $_POST de ton var_dump(), il faut les doubles quotes pour donner $_POST['nom'],

D'autre part la super-global $_POST récupère uniquement les champs de ton formulaire en l’occurrence tes champs username et password. L'erreur retournée par PHP est donc tout à fait normale à partir du moment où ton formulaire ne contient pas de champ dont l'attribut est nom.

Vous avez oublié d'ajouter l'attribut action="{le lien du fichier php ici}" dans la balise form

Yubo
Auteur

@akhouad, non pas besoin car je fais le traitement sur la même page
@shadow49, je n'est pas très bien compris

l'erreur que te retourne php indique simplement que ton formulaire n'a pas de champ nommé login. fait un var_dump() de $_POST et tu verras ce que tu as inseré dans tes inputs

Yubo
Auteur

et comment je dois faire pour donner un nom à ma form? car je lui est déclaré name="login"

Je ne vois pas où est ton problème. Soit plus explicite.

Yubo
Auteur

ok... en gros j'ai un formulaire nommé "login" que voici:

<form class="form-signin" method="POST" name="login" accept-charset="UTF-8">
      <h2 class="form-signin-heading">Connexion à <?= $SITE_NAME; ?></h2>
      <div class="login-wrap">
          <div class="user-login-info">
              <input type="text" class="form-control" name="username" placeholder="Identifiant" autofocus>
              <input type="password" class="form-control" name="password" placeholder="Mot de passe">
          </div>
          <label class="checkbox">
              <input type="checkbox" value="remember-me"> Rester connecté
              <span class="pull-right">
                  <a data-toggle="modal" href="#forget"> Mot de passe oublié?</a>

              </span>
          </label>
          <button class="btn btn-lg btn-login btn-block" type="submit">Connexion</button>

          <div class="registration">
              Vous n'avez pas de compte?
              <a data-toggle="modal" href="#register">
                  Créer un compte
              </a>
          </div>

      </div>
      </form>

sur la partie php de ma page quand je fais un var_dump

var_dump($_POST["login"]);

il me retourne


Notice: Undefined index: login in ******** on line 9
NULL

Normal la variable $_POST est un tableau associatif qui contient comme index le nom de ton champ associé à la valeur soumise.
Par exemple, si tu soumets ce formulaire avec comme username= toto et password= 1234, et que tu fais le var_dump($_POST), tu obtiens ceci:
array(
'username' => 'toto',
'password' => '1234'
)

Comme ton formulaire n'a pas de champ nommé "login", normal qu'il te retourne cette erreur.

Yubo
Auteur

donc je dois faire comment?

pourquoi vouloir retourner l'attribut name du formulaire ?

Yubo
Auteur

pour pouvoir le récupéré sur le php, car j'aurais 3 form sur la page

Pour ma part tu n'en a pas besoin car un bouton submit soumet uniquement son formulaire parent.

Après tu peux toujours essayer en mettant un champ caché qui contiendra le nom du formulaire

Yubo
Auteur

non, je ne peut pas procédé comme ceci, car dans mon php j'ai besoin de savoir quel formulaire est envoyé pour savoir quel traitement lui attribuer.
Et non, pas besoin d'un champ caché j'avais réussis à le faire en mettant juste un name à la form et ça avait fonctionné.