ユーザーが登録フォームに入力したパスワードの長さを確認しようとしています。しかし、予期しない出力が得られます。これが私のスクリプトです。
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(strlen(trim($password)) > 8)
{
echo"Password must be 8characters";
}
}
?>
ユーザーが登録フォームに入力したパスワードの長さを確認しようとしています。しかし、予期しない出力が得られます。これが私のスクリプトです。
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(strlen(trim($password)) > 8)
{
echo"Password must be 8characters";
}
}
?>
変数$password
に値が割り当てられていないため、コードは失敗します。次に、パスワードが8 文字を超えているかどうかを確認しています。つまり、小なり記号ではなく大なり記号を使用しています。変数$password
が空であるため、8 より大きい長さのチェックは常に false です。
これを試して:
if(!array_key_exists('password', $_POST))
die('no password specified');
$password = trim($_POST['password']); // <--- this is not a good idea!
if(strlen($password) < 8)
die('Password must be at least 8 characters');
要約すると、予期しない出力は次の 2 つの要因によって発生します。
die
プロダクション コードでは、よりユーザー フレンドリーなことを行う必要があります。
ドキュメンテーション
$_POST
- http://php.net/manual/en/reserved.variables.post.phpstrlen
- http://php.net/manual/en/function.strlen.phparray_key_exists
- http://php.net/manual/en/function.array-key-exists.php自動グローバルを使用する$_POST['password']
のは間違っています (そして、多くのホスティングで無効になっていることを願っています)。
また、パスワードを 8 文字に制限するのは悪い考えのように思えます。とにかくハッシュ化する必要があり、長さは問題ではありません。