2011-08-02 69 views
2

我有以下代碼:PHP的strcmp功能

if(strcmp($_POST['password'], $_POST['password-rpt']) == 0) { 
    $password_field = $_POST['password']; 
    echo "Password created" . "<br />"; 
} else { 
    echo "blarg! Password mismatch!!!"; 
} 

我知道,像C/C++的strcmp應該返回0,當兩個字符串是相同的,但是當我與一個HTML文件來測試它,進入兩個相同的字符串或兩個不同的字符串,兩種情況都會發生錯誤,我的輸出是「blarg!Password mismatch !!!」。

這裏是我使用的表格:

<form method="post" action="register.php"> 
     Name: <input type="text" name = "name" id="name" /><br /> 
     Password: <input type="password" name ="password" id = "password" /> <br /> 
     Confirm Password: <input type="password" name="password_rpt" id="password_rpt" /> <br /> 
     email: <input type="text" name = "remail" id = "remail" /><br /> 

     <input type = "submit" name="register" id="register" value = "Sign Up" /> 
    </form> 

我缺少什麼?


更新: 我改變了條件if($_POST['password'] == $_POST['password-rpt'])。沒有幫助。

+0

首先,你的代碼缺少')' – Dogbert

+0

大概在表單一個錯字,我們不能看到。這不是您的實際代碼,因爲它不會執行缺少的括號。 –

回答

4

您可以簡單地使用:

$_POST['password'] === $_POST['password-rpt'] 

此外,在您的表單,您使用的名稱password_rpt,而在你的代碼,你參考一下password-rpt。您需要更改其中的一個,以便名稱匹配。

查看Strings手冊頁以瞭解關於PHP中字符串處理的更多信息。我也建議看看Language Reference的一般指導。

請記住,PHP是一種高層次腳本語言,距離C++非常不同的,即使他們可能相同。有些東西在C++中非常可行,但在PHP中不可行,反之亦然。

+0

謝謝。我不知道。 C++不能這樣做,我的書沒有提到它。 – Yitzchak

+0

@Yitzchak,更新了答案以反映問題的變化。 – rid

+0

是的。我意識到,當我在保存前查看我的編輯時。我正式是一個白癡。 – Yitzchak

-1

你爲什麼用strcmp()?如果你沒有

if ($_POST['password'] == $_POST['password-rpt']) 
+0

這是因爲他可能習慣了C中的==不能在字符串上工作,因爲如果char指針相等,它只返回true。 –

+0

錯誤的答案。 '1e3'=='1000'返回true,其意圖不是 – AndreL

2

口令你會得到期望的結果你真的想使用===(相同)爲==(等於),即使情況不匹配,將返回true ...

if($_POST['password'] === $_POST['password-rpt']) { 
    $password_field = $_POST['password']; 
    echo "Password created" . "<br />"; 
} else { 
    echo "blarg! Password mismatch!!!"; 
} 
+0

感謝您的建議。我在哪裏可以閱讀更多關於PHP字符串操作? – Yitzchak

+1

我的立場糾正我的案件評論是不正確的。然而,我也支持使用===運算符,因爲諸如$ pass1 = true,$ pass2 =「mypassword」,($ pass1 == $ pass2)將評估爲true。基本上,由於php的鬆散和動態輸入,有很多方法可以產生不受歡迎的結果。 –

+0

+1作爲答案。你不應該使用等於運算符的字符串。正確的awenser是相同的運算符'==='。 – AndreL

0

記住strcmp()回報:

  • -1,如果str1小於str2;
  • 1如果str1大於str2;
  • 0如果they相等;

strcmp('1e3', '1000')(返回值0),或'1e3'=='1000'(真)類似於==(等於操作者)。

筆記,PHP 7具有相似的操作者,飛船操作者(< =>),並具有比strcmp()相同的行爲。

在你的情況,你應該使用:

所有的

if ($_POST['password'] === $_POST['password-rpt'])