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?
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
@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
et comment je dois faire pour donner un nom à ma form? car je lui est déclaré name="login"
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.
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
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é.