Le form name ne fonctionne pas

Par Yubo, il y a 10 ans


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, il y a 10 ans

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;
shadow49, il y a 10 ans

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.

akhouad, il y a 10 ans

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

Yubo, il y a 10 ans

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

shadow49, il y a 10 ans

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, il y a 10 ans

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

shadow49, il y a 10 ans

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

Yubo, il y a 10 ans

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
shadow49, il y a 10 ans

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, il y a 10 ans

donc je dois faire comment?

shadow49, il y a 10 ans

pourquoi vouloir retourner l'attribut name du formulaire ?

Yubo, il y a 10 ans

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

shadow49, il y a 10 ans

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, il y a 10 ans

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