2016-05-15 44 views
-5

我工作的認證形式,這是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"; 
} 

這是我收到的錯誤:

注意:未定義指數:matriculeAgent在C:\用戶\ admin \ Dropbox \ EasyPHP-DevServer-14.1VC9 \ data \ localweb \ esmcm \ dossier \ makeLogin.php在線25

注意:未定義的索引:motdepasseAgent位於C:\ Users \ admin \ Dropbox \ EasyPHP-DevServer -14.1VC9 \ data \ localweb \ esmcm \ dossier \ makeLogin.php on line 27

+4

http://stackoverflow.com/questions/26339949/post-undefined-index-php-error?s=5|2.4276和許多可能的複製其他。 –

+1

[PHP:「Notice:Undefined variable」和「Notice:Undefined index」]的可能重複(http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-index) – Kara

回答

0

它看起來像$ row ['matriculeAgent']沒有設置。這可能是由多種原因造成的。我注意到你的代碼中有幾個問題,我在這裏試着解釋。

首先,如果你想給你prepared statements,不直接包含您的參數stmt-內部>準備()函數調用,使用綁定,而不是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();