2013-10-30 52 views
0

我有一個php腳本,它檢查用戶信息,看看是否已經進行了考試。檢查文件中的發生不起作用

的引擎收錄的腳本:http://pastebin.com/z8fsrakw

其實際執行處理的代碼是從這裏開始的:

$type = "Clinical"; 
$writeSuccess = ""; 
$path_to_names_file = 'storenamecli.txt'; 
$theemails = file($path_to_names_file); 

if (strtolower($theemail) == "nurse") { 
     $theemail .= rand(); 
} 

if($fname <> "" && $lname <> "" && $theemail <> "" && $empid <> "" && $doh <> "" && (!empty($ydept) && $ydept <> "#")) { 
     if(file_exists($path_to_names_file) && in_array(strtolower($theemail), $theemails)) { 

這是工作,如果用戶需要考試,通過它,可以追溯到試圖再次採取它不會讓他們。但我不確定發生了什麼,它允許同一用戶在不停止用戶的情況下參加多項考試。

我知道腳本可能沒有那麼有效,但我想知道阻止「防止兩次考試」的問題在哪裏可以正常工作。

+1

你似乎是使用'然後$ theemails''$ theemail'。沒有代碼顯示'$ theemail'的來源。你放棄了嗎? – Popnoodles

+0

閱讀[PHP的'文件功能](http://php.net/file)的文檔 - 它返回一個數組,而不是一個字符串。請嘗試['file_get_contents'](http://php.net/file_get_contents)。 – zamnuts

+0

'$ theemail = trim(strip_tags(stripslashes($ _ POST ['theEmail'])));'取自表單。 – Si8

回答

1

file函數正在創建具有尾隨換行符的數組值。刪除:

$theemails = array_map('chop', file($path_to_names_file)); 

即:

<?php 
    $name = tempnam(sys_get_temp_dir(), ""); 
    file_put_contents($name, "1\n2"); 
    var_dump(file($name), array_map('chop', file($name))); 
?> 

輸出:

array(2) { 
    [0] => 
    string(2) "1\n" 
    [1] => 
    string(1) "2" 
} 
array(2) { 
    [0] => 
    string(1) "1" 
    [1] => 
    string(1) "2" 
} 
+0

想你可能是英雄! – Si8