2011-08-02 8 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!!!"; 
} 

を私は2つの文字列が同じである場合が、私はhtmlファイルでそれをテストするとき、入力するようなC/C++のstrcmpは0を返すようになっていることを知っています2つの同一の文字列または2つの異なる文字列の場合、どちらの場合もエラーの場合、出力は「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

あなたは、単に使用することができます:あなたのコードでは、あなたがpassword-rptを参照しながら

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

また、フォームで、あなたは、名前password_rptを使用しました。名前が一致するようにそれらの1つを変更する必要があります。

PHPの文字列処理の詳細については、Stringsのマニュアルページをご覧ください。一般的なガイダンスについては、Language Referenceをご覧ください。彼らは同じに見えるかもしれない場合でも、

は、PHPがハイレベルスクリプト言語で、C++とは非常に異なっていることにご注意ください。 C++では非常に実行可能ですが、PHPではそうでないものもあります。逆もまた同様です。

+0

ありがとうございます。私はそれを知らなかった。 C + +はそれを行うことはできませんし、私の本はそれを言及していませんでした。 – Yitzchak

+0

@ Yitzchak、質問の変更を反映するように更新された回答。 – rid

+0

はい。保存する前に私の編集内容を見ている間に気づいた。私は公式にはばかだ。 – Yitzchak

-1

なぜあなたはstrcmp()を使用していますか?あなたがパスワードの

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

これは、charポインタが等しい場合にのみ真を返すので、おそらく==が文字列に対して機能しないCに使用されているからです。 –

+0

が間違っています。 '1e3' == '1000'は真を返し、その意図はない – 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)のようなものとして使用すると、真であると評価されます。基本的にphpの緩やかで動的な型付けのために、==が不愉快な結果を生むことができる多くの方法があります。答えは –

+0

+1です。文字列にequal演算子を使用しないでください。正しいawenserは同じ演算子 '==='です。 – AndreL

0

strcmp()戻っていることに注意してください:str1未満str2であれば

  • -1;
  • str1str2より大きい場合1、
  • theyが等しい場合は0、
strcmp('1e3', '1000')のよう ==(等しい演算子)(戻り値0)と同様に

、または'1e3'=='1000'(真)。

注、PHP 7は、宇宙船オペレータ(< =>)同様のオペレータを有し、strcmp()と同じ挙動を有します。あなたが使用する必要がありますあなたの場合は

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