2014-03-28 151 views
-1

我正在編寫一個小腳本,當用戶輸入他們的ID號時,它將驗證外部csv文件以檢查用戶是否存在。PHP比較CSV和用戶輸入

$errortext=' '; 

$sfile = fopen("compch.csv","r"); 
    rewind($sfile); 
    while (!feof($sfile)) { 
    $data2 = fgets($sfile); 
    $splitter2 = explode("|", $data2); 

    if(!in_array($reference,$splitter2)) 
    { 
    $errortext = "Invalid proposal number"; 
    return $errortext; 
    } 

} 

問題的這個代碼是,如果所述第一ID不是用戶ID,環路將被打破,而不是正被讀取的下一個條目。 有沒有辦法編輯循環,以便它可以持續讀取ID,如果當前用戶ID不存在,那麼只顯示錯誤消息?

+0

您可以繼續使用;在一個循環中...這將跳過記錄並繼續到下一個...只需檢查ID是否不存在。 http://www.php.net/manual/en/control-structures.continue.php –

+0

我其實也是這麼做的。但是,結果如下。它拒絕所有條目或接受所有條目。 – YongJ

回答

0

您可以使用一個突破,如果你找到合適的元素,否則你繼續:

$errortext = ' '; 
$bool = false; 
$sfile = fopen("compch.csv","r"); 
    rewind($sfile); 
    while (!feof($sfile)) { 
    $data2 = fgets($sfile); 
    $splitter2 = explode("|", $data2); 

    if(in_array($reference,$splitter2)) 
    { 
    $bool = true; 
    break; //YOu exit the while loop 
    } 

}//End of while loop 
if ($bool){ 
    //ID is inside 
}else{ 
    $errortext = "Invalid proposal number"; 
} 
+0

對不起,我試過了,它拒絕了所有信息「Invalid proposal number」 我的數據是這樣構造的,如果有幫助 User1 | 100000 User2 | 100001 Theres在2個數據之間換行。 – YongJ

+0

這可能是因爲你在每個數據之間有一條斷線:breakline是一個char'\ n',它可能會干擾你的代碼的行爲:explode('|',$ data2)= explode('|','User1 | 100000 \ n')= array(0 =>'User1',1 =>'100000 \ n')和'100000 \ n'!='100000'。嘗試在每行的ID後添加分隔符 – Gwenc37

+0

此解決方案解決了您的問題? – Gwenc37