Notice: Undefined index: pass in C:\wamp\www\modele01\inscriptio

Fermé
@ndiaye322 - 12 mai 2017 à 04:44
 Utilisateur anonyme - 12 mai 2017 à 07:59
Bonjour,

je suis entrain de faire un travail sur les formulaires et je veux juste inserer des donnees dans ma basses
en voici le code
<!DOCTYPE hmtl/>
<meta charset="UTF-8"/>
<head>
<h1> formulaire d'inscription </h1>
</head>
<html>


<p>
<form method="post" action="">
<label for="pseudonyme">pseudonyme:</label>
<input type="pseudo"name="pseudo" id="pseudo"/></br>
<label for="mot de passe">mot de passe:</label>
<input type="password"name="pass"id="password"/></br>
<label for="confirmation">confirmation:</label>
<input type="password"name="pass" id="password"/></br>
<label for="email"> addres email:</label>
<input type="email"name="email"id="email"/></br>
<input type="submit" value="envoyer" />
<input type="reset" value="cancel"/>
</form>
</p>

<?php
{

try
{
$bdd = new pdo('mysql:host=localhost;dbname=forum','root','');
}
catch(Exception $e)
{
die('Erreur:' .$e->getMessage());
}
//hachage de mot de pass
$pass_hache = sha1($_POST['pass']);
//insertion
$req = $bdd->prepare('INSERT INTO membres(pseudo, pass, email, date_inscription) VALUES(:pseudo, :pass, :email, CURDATE())');
$req->execute(array('pseudo'=> $pseudo, 'pass'=> $pass_hache,'email' => $email));
}
?>
</body>
</html>

1 réponse

Utilisateur anonyme
12 mai 2017 à 07:59
Bonjour

D'abord, ta balise <html> devrait être avant la balise <head>, mais ça n'est pas ça qui provoque ton erreur.

Il ne faut pas croire que ton script, après avoir affiché le formulaire, attend qu'il soit rempli et que l'utilisateur clique sur "envoyer" pour passer à la suite.
Non, le script continue jusqu'à la fin. Et comme l'utilisateur ne l'a pas encore rempli, $_POST['pass'] n'est pas encore défini, ce que te dit ton message d'erreur.
C'est seulement quand l'utilisateur cliquera sur "envoyer" que ton script sera à nouveau appelé, et s'exécutera à nouveau depuis le début. C'est ce que signifie le action="" dans ta balise form.

Il ne faut donc exécuter la partie du php qui traite le formulaire que si le formulaire a été envoyé. En général, on teste l'existence d'un des champs du formulaire pour ça, par exemple :
if (isset($_POST['envoyer'])) {
  try ...
...
}


Normalement, on met ce traitement php AVANT l'envoi du formulaire. Comme ça, si le formulaire est bien rempli, on peut rediriger vers une autre page avant d'avoir renvoyé le formulaire.

Tu peux aussi faire le traitement dans un autre fichier (il faut alors changer : action="autre fichier.php").
0