0

さて、私のタイトルは少し紛らわしいかもしれませんが、私の状況を説明させてください:

私はかなり大きなフォームを持っており、フィールドがたくさんあり、必須のものとそうでないものがあります。私はJSを使用して検証を行っていますが、PHPを使用してサーバー側でも検証を行っています。

私がユーザーに求めているものの1つは、「ヘッダー名」です。これで、ヘッダー名の名前属性は「header1」になります。ユーザーは、フォームにヘッダーフィールドを追加するオプションがあります。したがって、ボタンをクリックすると、名前属性「headerx」を持つ別の「HeaderNameX」が追加されます。

とった?ここで問題となるのは、一般にこれらのヘッダーフィールドは必須ではありませんが、少なくとも1つのヘッダーフィールドを提供する必要があるという条件があります。したがって、100を供給でき、2を供給でき、1を供給できますが、何も供給しない場合、検証は失敗するはずです。

しかし、PHPでこれをチェックする良い方法は考えられません。私はあなたの最初の考えが$_POSTに何かが含まれているかどうかをチェックすることだと知っています。ただし、これらはこれらのヘッダーとは関係のない必須のこのフォームの他の複数のフィールドであるため、機能しません。したがって、$ _ POSTに何かが含まれているかどうかを単純に確認することはできません。これは、常に含まれているためです。

isset()を正規表現と組み合わせる方法はありますか?isset($ _ POST ['header {\ d +}']のようになります。これは、少なくとも1桁の数字が続くヘッダーのようになります。

助けてくれてありがとう!

編集:ああ、これがまだ十分に難しいものではなかった場合、ヘッダーフィールドの量は無制限です。したがって、考えられるすべての「headerx」をループすることはできません。これは明らかに無限ループになるためです。

4

4 に答える 4

5

[]を使用してフィールド名を設定できます。

<input type="text" name="foo[]" value="x" />
<input type="text" name="foo[]" value="y" />

その場合、$_POSTは次のようになります。

array('foo' => array('x', 'y'));

連想配列を持つこともできます:

<input type="text" name="foo[bar][first]" value="x" />
<input type="text" name="foo[bar][second]" value="y" />

次のようになります:

array('foo' => array('bar' => array('first' => 'x', 'second' => 'y')))
于 2012-09-12T01:01:19.430 に答える
1

次のように要素をループできます。

$i = 1;
while($row = $_POST['header' . $i++]){
    //do stuff
}

これは、シーケンシャル要素がなくなるまで続行されます。

于 2012-09-12T01:01:06.020 に答える
1

単純にこのように見てみませんか:もう一方のJSで、検証を行っているときに、最後のチェックでヘッダーが送信されていることを確認してください。ヘッダーが送信されたら、フォームの非表示フィールドを次のように設定します。真の値-PHPでは、送信される可能性のあるすべてのヘッダーについて心配することなく、その特定の要素をチェックできます。

于 2012-09-12T01:02:38.667 に答える
0
if(!count(preg_grep('@^header\d+$@',array_keys($_POST))))
{
  //no header submitted
}

これにより、要求に応じてRegExpを使用できるようになりますが、jpicによるソリューションも希望します。

于 2012-09-12T01:05:34.083 に答える