4

私はphpが初めてで、このフォームがすべての状況で送信される理由がよくわかりません...私の質問は次のとおりです。

ユーザーがすべてのフィールドに入力したときにのみフォームが送信されるようにするにはどうすればよいですか?

if (!$_POST['username'] && !$_POST['password'] && !$_POST['repassword'] 
&& !$_POST['user_firstname'] && !$_POST['user_lastname'] ){
header('Location: register.php?msg=You did not complete all of the required fields');
}

&&と演算子の両方を使用||しましたが、入力したフィールドに関係なく、常に送信されます。

<form action="createuser.php" method="post" name="registration_form" id="registration_form">
<label>Email</label>
<input name="username" type="text" id="username" size="50" maxlength="50" /><br />
<label>First Name</label>
<input name="user_firstname" type="text" id="user_firstname" size="50" maxlength="50" /><br />
<label>Last Name</label>
<input name="user_lastname" type="text" id="user_lastname" size="50" maxlength="50" /><br />
<label>Password</label>
<input name="password" type="password" id="password" size="50" maxlength="100" /><br />
<label>Re-type Password</label>
<input name="repassword" type="password" id="repassword" size="50" maxlength="100" /><br />


<input type="submit" value="Register" name="submit" />

助けてくれてありがとう、これは参加する素晴らしいコミュニティのようです!

4

6 に答える 6

3
if (empty($_POST['username'])
    || empty($_POST['password'])
    || empty($_POST['repassword'])
    || empty($_POST['user_firstname'])
    || empty($_POST['user_lastname'])
    ){
header('Location: register.php?msg=You did not complete all of the required fields');
}

編集:コメントが示唆するように、検証はこれよりも実質的なものである必要があります。チェック後にリダイレクトするのは良い考えではありません。代わりに、フォームをそれ自体に投稿してみてください。エラーがない場合は、フォーム データの処理を続行します。エラーがある場合は、それらを変数/オブジェクト/配列に設定し、フォームに表示するか、フォームに投稿データを再入力します。

于 2012-10-10T21:19:11.850 に答える
3

( !not) 演算子はブール値で最適に機能しますが、値はすべて文字列です。それ以外の:

!$_POST['username']

試す:

!empty($_POST['username'])

これは、すべてのフィールドがいっぱいになったときに何かを実行したい場合の codi です。

if (!empty($_POST['username']) && 
   !empty($_POST['password']) && 
   !empty($_POST['repassword']) && 
   !empty($_POST['user_firstname']) &&
   !empty($_POST['user_lastname']) ){
    header('Location: register.php?msg=You completed all of the required fields');
}

少なくとも 1 つのフィールドが空のときに何かを実行したい場合は、次を試してください。

if (empty($_POST['username']) || 
       empty($_POST['password']) || 
       empty($_POST['repassword']) || 
       empty($_POST['user_firstname']) ||
       empty($_POST['user_lastname']) ){
        header('Location: register.php?msg=You did not complete all of the required fields');
    }
于 2012-10-10T21:21:14.063 に答える
0

&&(and) を使用しているため、すべての条件が真でなければなりません。||(または) を使用すると、これが機能します。

于 2012-10-10T21:19:53.127 に答える
0

&& を使用しています。これは、すべての条件が true の場合にのみ true です。つまり、値が設定されていない場合にのみリダイレクトを行います。それらのいずれかが設定されていない場合にそれを元に戻したい場合は、!A || !B || !C ||...または!(A && B && C && ...).

于 2012-10-10T21:23:28.760 に答える
-1

フォームは、設計どおりに動作しています。

フォームを検証するには、JavaScript を使用する必要があります。

<input type="button" onclick="val()" value="Register" name="submit" />

JS:

function val() {
    ///your validation code.

}

多くのフォーム検証スクリプトとプラグインが世の中に出回っています。

于 2012-10-10T21:16:10.433 に答える
-1

試す

if(empty($_POST['item'])) && ...
于 2012-10-10T21:17:30.903 に答える