PHP数组错误显示变量不是未定义

时间:2014-01-02 19:25:45

标签: php

此代码仅供说明之用:

如果密码正确,我有这个代码,它输出电子邮件地址,密码和密码有效。

当我将$ inputpass更改为任何值时,例如xyz代码输出电子邮件地址和'Passoword is INVALID'应该是,但它不输出错误的passoword并给我以下内容:注意:未定义的变量:C:\ xampp \ htdocs \ login.php中的密码第36行

我无法理解的是,当密码不正确时,它并没有给我同样的信息。我不明白为什么passkey在不正确时没有被定义。

正如我之前提到的,代码仅用于说明目的 - 因此忽略范围,我知道可以使用MySQL完成。

<?php
$profile["joseph"] = array(
  "email" => "joseph@gmail.com",
  "pass" => "xeta",
  );

$profile["mary"] = array(
  "email" => "mary@yahoo.com",
  "pass" => "byess",
  );

$profile["mario"] = array(
  "email" => "mario@yz.com",
    "pass" => "bye",
  );

$inputemail = "joseph@gmail.com";
$inputpass = "xeta";

//Check email vs username
foreach ($profile as $profilekey => $profileval) {
       if ($profileval["email"] === $inputemail) {
         $emailkey =  $inputemail;
         echo $emailkey; 
       }
}

//Check password vs username
foreach ($profile as $profilekey => $profileval) {
       if ($profileval["pass"] === $inputpass){
         $passkey =  $inputpass;
         echo $passkey; 
       }
}

if(($inputemail == $emailkey) AND ($inputpass == $passkey)){
  echo "Password is valid";
}
else {
  echo "Password is invalid";
}


?>

2 个答案:

答案 0 :(得分:2)

尝试:

$passkey = '';
foreach ($profile as $profilekey => $profileval) {
   if ($profileval["pass"] == $inputpass){
     $passkey =  $inputpass;
     echo $passkey; 
   }
}

同样地:

$emailkey = '';
foreach ($profile as $profilekey => $profileval) {
   if ($profileval["email"] == $inputemail) {
     $emailkey =  $inputemail;
     echo $emailkey; 
   }
}

答案 1 :(得分:1)

因为只有在密码正确时才定义$passkey,所以在if语句中包含:

if ($profileval["pass"] === $inputpass){
         $passkey =  $inputpass;
         echo $passkey; 
       }

如果没有匹配,代码永远不会进入上面的if语句,并且永远不会定义$passkey,所以当它到达这一点时:

if(($inputemail == $emailkey) AND ($inputpass == $passkey)){
  echo "Password is valid";
}
else {
  echo "Password is invalid";
}

$passkey未定义。

所以你需要在代码中的某个地方定义$passkey,可能是一个空字符串来开始。