未定义的索引$ _POST

时间:2016-05-15 01:04:15

标签: php mysql session authentication pdo

我正在处理身份验证表单,这是HTML代码:

<input type="text" class="form-control" name="matriculeAgent" placeholder="Compte matriculaire">

<input type="password" class="form-control password" name="motdepasseAgent" placeholder="mot de passe">

这是PHP代码,我将matriculeAgentmotdepasseAgent与数据库的信息进行比较:

$matricule_verif = $_POST["matriculeAgent"] ; 
//password: 
$motdepasse_verif = $_POST["motdepasseAgent"] ; 
if ((isset($_POST["matriculeAgent"])==true) && (isset($_POST["motdepasseAgent"])==true)){
$req = $bdd->prepare("SELECT `matriculeAgent`, `motdepasseAgent` FROM `utilisateurs` WHERE `matriculeAgent` ='".$matricule_verif.'"AND `motdepasseAgent` = "'.$motdepasse_verif."'");
  // SI AUCUN ENREGISTREMENT NE CORRESPOND 
if(mysql_num_rows($req)==0) 
{ 
echo "Aucun utilisateurs ayant le mot de passe saisi existe. Reéssayer"; 
} 


// SI LE LOGIN ET MOT DE PASSE SONT EXACTES 
else 
{ 
    $_SESSION['matriculeAgent'] = $row['matriculeAgent'];
    $_SESSION['motdepasseAgent'] = $row['motdepasseAgent'];
// REDIRECTION VERS UNE PAGE PROTEGEE 
header("Location:accueil.php");
// selection de lenregistrement saisie a la page login.php 
}

}
else{

    echo "veuillez saisir le motdpass";
}

这是我得到的错误:

  

注意:未定义的索引:第25行的C:\ Users \ admin \ Dropbox \ EasyPHP-DevServer-14.1VC9 \ data \ localweb \ esmcm \ dossier \ makeLogin.php中的matriculeAgent

     

注意:未定义的索引:第27行的C:\ Users \ admin \ Dropbox \ EasyPHP-DevServer-14.1VC9 \ data \ localweb \ esmcm \ dossier \ makeLogin.php中的motdepasseAgent

1 个答案:

答案 0 :(得分:0)

看起来好像没有设置$ row ['matriculeAgent']。这可能是由多种原因引起的。我注意到你的代码中有几个问题,我试着在这里解释一下。

首先,如果你想要prepared statements,不要直接在stmt-&gt; prepare()函数调用中包含你的参数,请改用bind-param:

$stmt = $bdd->prepare("SELECT `matriculeAgent`, `motdepasseAgent` FROM `utilisateurs` WHERE `matriculeAgent` = ? AND `motdepasseAgent` = ?");
$stmt->bind_param("ss", $matricule_verif, $motdepasse_verif);

然后,另一个问题可能是你没有执行该声明,或者你没有在帖子中显示它。

$stmt->execute();

之后,您可以简单地获取结果,然后应该正确填充:

$result = $stmt->get_result();

执行()之后的另一种方式:因为你已经在使用预准备语句,所以你也可以在这里使用bind_result(),它将填充你想要的变量:

$varA = '';
$varB = '';
$stmt->bind_result($varA, $varB);
$stmt->fetch();