我試圖比較存儲在一個平面文件中的幾個數組值(我知道,mysql更好,但它的分配,所以請忍受過時的方法)與一些形式發送從$ _POST變量的用戶憑據,儘管僅存在是一個數據行的文件中我不斷收到以下錯誤:PHP字符串比較結果未定義偏移3錯誤
注意:未定義抵消:3 ./login.php線70
我已經在下面列出了一些有問題的代碼行,其中包括一些序言和從瀏覽器打印出來的結果(在進行故障排除的基本嘗試中,我運行了一個print_r命令,並清楚地得到了2個返回的數組,但無法計算出結果在外面HY ...?)。
如果我可以添加任何有助於解決問題的其他信息,請讓我知道 - 我只願意承擔義務。
用戶註冊數據在這個代碼片段從register.php文件
<?php
$filename = '../../private_data/filewriting.php';
if (isset($_POST['register']) && count($errors)==0) {
// Submission was OK, so display thank-you message
$output .= '<p><strong>Thanks for registering with us! Please click <a href="index.php">here</a> to login to the site using your Username and Password</strong></p>';
$handle = fopen($filename, 'a');
fwrite($handle, "\n".$clean['fullname']."|".$clean['address']."|".$clean['postcode']."|".$clean['username']."|".$clean['password']);
fclose($handle);
}
?>
然後用戶輸入登錄詳細信息檢查在該片段發生從login.php中文件中捕獲
<?php
$output = '';
$filename = '../../private_data/filewriting.php';
if (isset($_POST['submit']) && count($errors)==0) {
$lines = file($filename);
foreach ($lines as $line) {
$arr = explode('|', $line);
print_r($arr);
echo '<br />';
// The next line is the problematic line 70
if ($arr[3]==$clean['username'] && $arr[4]==$clean['password']) {
$_SESSION['username'] = $clean['username'];
$_SESSION['password'] = $clean['password'];
$output .= '<p><strong>Password and Username match - Thank you for logging in. Please continue to browse the site using the links above.</strong></p>';
}
}
}
?>
從該文件提交登錄詳細信息後的輸出如下所示:
陣列([0] =>)
注意:未定義偏移量:3 ./login.php線70上
陣列([0] =>測試用戶[1] => 123蔥街,大洋蔥[2] => BN21 0LK [3] => testuser的[4] =>密碼)
用戶名和密碼匹配 - 感謝您記錄
沒有改變我害怕 - 仍然得到同樣的錯誤。我不明白爲什麼如果該文件只包含一行數據,我會從print_r中獲取2個輸出,儘管這是非常不完整的第一行。 – 2012-01-10 00:28:21
我更新了我的答案。它看起來像在分隔字符串之前添加一個新行。 「\ n」我認爲這是爲了防止有多條線路將它們添加到自己的線路中。你可以在字符串末尾拋出它,然後忽略爆炸沒有返回大於1的數組的情況,或者在關閉之前補償尾部的\ n ...像一個基本的substr的任何數量的更好的方法文件...等多種方式來做到這一點。 – 2012-01-10 00:34:37
畢竟在http://php.net/manual/en/function.file.php頁面上找到了答案。 它出現是因爲我使用'\ n'方法輸入每一個新的數據行,我還需要添加以下內容到我的文件命令來忽略任何空行,這將解釋print_r輸出中的空數組。 $ lines = file($ filename,FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 感謝您在正確的方向推動。 – 2012-01-10 00:39:26