0

いくつかの入力フィールドがあり、値が入力されたフィールドが 1 つしかなく、他のフィールドが空の場合 (ユーザー データの更新) に送信する必要があります。私は今までに isset() で作業しましたが、これはすべてのフィールドが入力されたときにのみフォームを送信します:

if (isset
   ($_POST['submit']) AND 
   ($_POST['firstname']) AND 
   ($_POST['lastname']) AND 
   ($_POST['address']) AND 
   ($_POST['ZIP']) AND 
   ($_POST['phonenumber']) AND 
   ($_POST['mail']) AND 
   ($_POST['group'])
)

後でメール テンプレート (別のファイル) をチェックインして、値が存在するかどうかと、それをメールに表示するかどうかを確認します。

{if !empty($firstname)}{translate text='First Name'}: {$firstname|escape} {/if}

私の考えは大丈夫ですか、それともこれを解決する簡単な方法はありますか?

4

4 に答える 4

1

最初のifステートメントは要件と矛盾しています。AND演算を使用してすべてのフィールドに入力する必要があります。OR を使用すると、単一のフィールド値で機能します。

Matt が推奨するように、javascript を使用して、ページ自体で検証を実行する必要があります。

1 つのフィールドのみが設定されるようにするには、次の手順を実行します。_POST のエントリ数をカウントできます。

if(count($_POST) == 1 AND 
   (isset($_POST['submit']) OR 
    isset($_POST['firstname']) OR 
    isset($_POST['lastname']) OR 
    isset($_POST['address']) OR 
    isset($_POST['ZIP']) OR 
    isset($_POST['phonenumber']) OR 
    isset($_POST['mail']) OR 
    isset($_POST['group'])
   ))

いずれにせよ、これは非常にエレガントな方法ではありませんが、うまくいきます。

于 2013-01-03T08:23:34.753 に答える
0

1 つの提案は、サーバー側のチェックに加えて、フォーム上で関数を使用javascriptすることです。onSubmitそれを使用して、すべてのフィールドをチェックし、サーバーに送信される前にユーザーにいくつか入力するように警告できます。

JavaScript関数で、すべての入力が正しいかどうかをチェックし、すべてが正しく入力されている場合はデータをサーバーに送信できるようにするか、送信する前に他に何をする必要があるかを示すアラートをポップアップします.

このチェックをサーバー側で厳密に行うと、クライアントが入力をチェックし、すべてが正しい場合にのみ送信するのではなく、毎回入力をチェックするサーバー要求が必要になります。

于 2013-01-03T08:20:24.837 に答える
0

少なくとも 1 つのフィールドが入力されている場合にフォームを送信すると仮定すると、次の if ステートメントを使用できます。

if(count($_POST) > 1)

これにより、フォームを送信して少なくとも 1 つのフィールドに入力することができますが、さらに多くのフィールドに入力することもできます。

入力されたフィールドが 1 つある場合にのみフォームを送信する場合は、上記の if ステートメントを次のように変更できます。

if(count($_POST) == 2)

これにより、入力できるフィールドは 1 つだけになります。「== 2」を使用する理由は、送信ボタンも送信されるものだからです。

すべてのフィールドを空にしたい場合は、次の if ステートメントを使用できます。

if(count($_POST) > 0)

これにより、ボタンを送信し、他のすべてのフィールドを空のままにすることができます。

これが機能する理由は、$_POST が定義済みの配列変数であるためです。

ユーザーが使用してほしいフィールドのみを使用し、コードをきれいに保つために、配列を使用できます。

以下をせよ:

$allowed_fields = array('firstname','lastname','address','ZIP','phonenumber','mail','group');

次に、if ステートメントに次の行を追加します。

if(count($_POST) == 2 AND in_array($allowed_fields, $_POST))
于 2013-01-03T08:24:36.110 に答える
0

必須に設定されているフィールドから 1 つの値のみが必要な場合 (可能であれば、javascript を使用するか、HTML5 にそのrequired属性があります)、他のフィールドからの他の値を単に無視します。

<?php
     if ( isset( $_POST['submit'] ) ) {
         $wanted_value = addslashes( strip_tags( $_POST['input_name'] ) ); 
         // preventing from sql injection
         // ignore other values
         // and start manipulating it
     }
?>
于 2013-01-03T08:24:42.140 に答える