未定义的偏移和数组比较PHP

时间:2012-08-04 17:07:37

标签: php arrays comparison undefined equality

嘿大家我已经完成了我的研究,我发现我仍然卡住很多人说在变量之前放@符号但它似乎没有用,所以我的代码给了我这个错误

                 Notice: Undefined index: 2 in login.php on line 20

我的代码是

          if( isset($_REQUEST['email']) || isset($_REQUEST['pwd']) || $_REQUEST['email'] != "" || $_REQUEST['pwd'] != "" )
                    {

                          $inputFile = fopen("members.txt", "r");  
                          $found = false;
                          $i =0;
                          //read the read.txt until the end of file
                          while(!feof($inputFile) && $found == false)  
                          {

                            $line = fgets($inputFile);  
                            // replace the special charater within the lines by there proper entity code
                            $lineArray = preg_split("/\,/", (string)$line);


                            if ($_REQUEST['email'] === $lineArray['2'] && $_REQUEST['pwd'] === $lineArray['4']) 
                            {
                                        session_start();
                                        $found = true;
                                        $useremail=$_REQUEST['email'];
                                        $password= $_REQUEST['pwd'];
                                        //time to set sessions and stuff
                                        $_SESSION['useremail'] = $useremail;
                                        $_SESSION['password'] = $password;
                                        //send the redirect header
                                        header('Location: index.php');
                                        exit();
                            }
                          }
                          fclose($inputFile);

                    }

所以它所指的行是

                            if ($_REQUEST['email'] === $lineArray['2'] && $_REQUEST['pwd'] === $lineArray['4']) 

我已尝试过许多其他变体,例如在$ lineArray前面删除单引号添加@并同时执行这两项操作,任何人都可以帮助我将值打印出来当我打印出来但是当它到达此if语句时它没有转向相等,它给了我这个错误。

如果也尝试了

           if ($_REQUEST['email'] === $lineArray[2] && $_REQUEST['pwd'] === $lineArray[4]) 

        if ($_REQUEST['email'] === @$lineArray[2] && $_REQUEST['pwd'] === @$lineArray[4]) 

3 个答案:

答案 0 :(得分:2)

您需要$lineArray[2]。数组的索引是整数,而不是字符串。并且还要确保相同的数组是否至少包含3个元素。


这就是问题所在:

$lineArray = preg_split("/\,/", (string)$line);

它应该是(因为你似乎在,分裂):

$lineArray = preg_split("/,/", (string)$line);

PS:考虑使用更简单的$array = explode(",",$yourString)

答案 1 :(得分:1)

您需要为数组键使用数字(无引号),但在比较之前,您还需要检查这些数组值是否与isset()一起存在。

if (isset($lineArray[2]) && $_REQUEST['email'] === $lineArray[2] ...

答案 2 :(得分:1)

错误意味着您的代码中使用了未定义的var。在你的情况下,它正在讨论$lineArray['2']。这不是一个严重的错误,所以你可以懒惰并改变你的错误设置来摆脱它:

error_reporting(E_ERROR | E_WARNING | E_PARSE);

但你真的应该修改它。

正如Devnate建议的那样,你需要使用int来指定数组的索引键,而不是字符串(所以这个$lineArray[2]而不是$lineArray['2'])。为什么?因为之前使用的密钥('2')从未设置过,导致错误。

您说当您尝试上述操作时,比较失败。在看到print_r($lineArray);的结果之前,我无法帮助你。

这是您上一个问题的代码。很遗憾你没有接受我的建议并且使用我的代码。如果你这样做,你就不会遇到这个问题。但那是另一回事。发布print_r($lineArray);以便我可以看到比较的问题。