2012-03-07 56 views
0

所以在我的PHP代碼我試圖讓這個代碼檢查我的文本文件,看到它存在一個字符串。但是每次我把代碼放在字符串是否存在的時候,它都會迴應如果字符串存在的代碼。搜索文本文件的字符串不工作PHP

$addemail = $_POST["subemail"]; 
$searchfile = file_get_contents("emailist.txt"); 

if (!strpos($searchfile, "$addemail")) 
{ 
echo "Your email is already in our database."; 
} 
else 
    { 
code to be executed if string doesn't exist. 
    } 

提前感謝這真的有我難住了:\

+1

您應該_really_考慮使用數據庫。 – KingCrunch 2012-03-07 13:12:11

+0

我還沒有學到,但我...我專注於學習所有的基本知識之前sql – 2012-03-07 13:35:56

回答

4

當前的代碼做什麼是說「你的電子郵件已經在我們的數據庫。」如果數據庫中的電子郵件地址是而不是,或者它是第一封電子郵件(您應始終使用===或!==與strpos比較)。該代碼應該是:

$addemail = $_POST['subemail']; 
$searchfile = file_get_contents('emailist.txt'); 

if (strpos($searchfile, $addemail) === false) 
{ 
    //code to be executed if string doesn't exist. 
} 
else 
{ 
    echo "Your email is already in our database."; 
} 
+0

+ 1記住與false的比較,如果strpos返回一個有效的0 – 2012-03-07 13:12:23

+1

我要說的 - 但我也想已經添加了一個措辭嚴厲的警告,關於使用平面文本文件來存儲PHP的交易數據。 – symcbean 2012-03-07 13:13:49

1

你應該使用這個語法:

$pos = strpos($searchfile, $addemail); 
if ($pos === false) 
{ 
    .... 
} 

strpos()可能返回布爾值FALSE,但也可能返回的結果爲FALSE如果位置是第0非布爾值(第一個)字符。

看看@http://php.net/manual/en/function.strpos.php瞭解更多信息。

0
if (strpos($searchfile, "$addemail") === false) { 

使用條件是這樣的...

看到這個警告... HTTP://php.net/manual/en/function.strpos.php#refsect1-function.strpos-returnvalues

1

假設電子郵件不在搜索文件中。 T

如果您的strpos將返回false。當將表達式前面的否定值加入false時,它會將其變爲true。

因此,如果電子郵件不在文件中,則您在文件中搜索電子郵件地址將爲真。 您需要刪除條件的否定。

1

您正在檢查的$addemail的值是否可能位於文本文件的開頭?

strpos()返回一個字符串在另一個字符串中的偏移量。如果該字符串在另一個字符串的開頭,那麼該索引顯然應該是0。如果找不到字符串,strpos()將返回false。因爲0 == false但是0 !== false,您可能想要將您的條件更改爲if (strpos($searchfile, $addemail) !== false)

這就是說,你應該注意strpos()區分大小寫。這意味着在尋找[email protected]時找不到[email protected]。爲了克服這個問題,你可以使用不區分大小寫的兄弟stripos()