0

嘿,每个人都完成了我的研究,我发现我仍然坚持很多人说要在变量前加上 @ 符号,但它似乎不起作用,所以我的代码给了我这个错误

                 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]) 
4

3 回答 3

2

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


该行是问题:

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

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

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

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

于 2012-08-04T17:12:15.223 回答
1

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

if (isset($lineArray[2]) && $_REQUEST['email'] === $lineArray[2] ...
于 2012-08-04T17:24:33.950 回答
1

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

error_reporting(E_ERROR | E_WARNING | E_PARSE);

但你真的应该修复它。

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

当您尝试上述操作时,您说比较失败。在我看到print_r($lineArray);.

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

于 2012-08-05T00:28:35.443 回答