2011-10-17 31 views
22

我有一個需要導入到數據庫的文件。 (我的數據庫很好,我可以連接,我可以添加)。現在我的問題是由於某種原因沒有插入。在php中讀取文本文件時出錯

我有一個文件schooldatabase.txt用戶/密碼我需要添加到數據庫。該文件有200行。

這裏有一個例子:

test|098f6bcd4621d373cade4e832627b4f6 
test2|ad0234829205b9033196ba818f7a872b 

現在對於每個行(學生用戶名和密碼),我將其插入到數據庫中。

這裏是我的代碼:

function addUser($user,$pass) { 
// this code is good 
} 

function processUser($user,$pass) { 
    $pass=md5($pass); 
    $myFile = "schooldatabase.txt"; 
    $fh = fopen($myFile, 'r'); 
    $theData = fread($fh, 5); 
    $login = "$user|$pass"; 
    if(stristr($theData,$login) !== false){ 
     $result = "rejected"; 
    } 
    elseif(stristr($theData,$login) !== true){ 
     addUser($user,$pass); // this work I manuall tested 
     $result = "accepted"; 
    } 
    fclose($fh); 
    return $result; 
} 
var_dump(processUser('invaliduser','test2')); 

爲什麼它返回「接受」,如果該用戶是不是在文件中?

+3

究竟是什麼你試圖使用'schooldatabase.txt'文件是什麼?另外,我懷疑你只想每次讀5個字節(參見['fread()'](http://php.net/manual/en/function.fread.php)) – Phil

+5

stristr永遠不會返回TRUE。事實上,如果找不到針,則stristr會返回匹配的子字符串或FALSE。 –

+0

schooldatabase.txt文件有多大? –

回答

25

我想在這裏你應該重新考慮你的過程。我假設你多次使用「processUser」,因此你會反覆打開/讀取/關閉同一文件而不更改該文件。

因爲文件並不是很大(並且我認爲它是一次性腳本),所以只需在啓動腳本時打開內存中的文件,然後就可以將您正在測試的所有值與該文件進行比較。

您可以使用功能file來這樣做。然後你可以使用in_array來檢查用戶是否存在。

這裏的腳本:

function addUser($user,$pass) { 
// this code is good 
} 

$file = file("schooldatabase.txt", FILE_IGNORE_NEW_LINES^FILE_SKIP_EMPTY_LINES); 

function processUser($user,$pass, array &$file) { 
    $pass = md5($pass); 
    if(in_array("$user|$pass", $file)) { 
    addUser($user,$pass); // do you check if the query is good? 
    return 'accepted'; 
    } 
    return "rejected"; 
} 

var_dump(processUser('invaliduser','test2', $file)); 
+0

我不得不更改代碼,FILE_IGNORE_NEW_LINES^FILE_SKIP_EMPTY_LINES是我的新代碼的解決方案謝謝 –

20

我認爲你有點過於複雜if - 這是真的或假的,所以沒有必要檢查兩次stristr!另外,你可能會混淆你的真實/錯誤。

編輯此外,它應該可能是stripos,它將返回位置或錯誤。

嘗試...

if(stripos($theData,$login) === false){ 
    $result = "rejected"; 
} else { 
    addUser($user,$pass); // this work I manuall tested 
    $result = "accepted"; 
} 

...運作的?

+0

剛做了一個更改(感謝@AurelioDeRosa),所以您可能需要更新它!此外,@Phil說應該檢查,增加你fread的長度。 – JoLoCo