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

iveは、一重引用符を削除して$ 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

このエラーは、コードで未定義の変数が使用されていることを意味します。あなたの場合、それはについて話している$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 に答える
1

配列キーには数字(引用符なし)を使用する必要がありますが、それらをisset()比較する前に、それらの配列値が存在することも確認する必要があります。

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