web-dev-qa-db-ja.com

方法POST PHPの連想配列

私は次のフォームを持っています:

<form action="options.php" method="post">
    <input type="text" name="deptid" id="deptid" />
    <input type="text" name="deptname" id="deptname" />
    <input type="submit" name="submit" id="submit" value="save" />
</form>

[〜#〜]編集[〜#〜]

2つの値を1つの連想配列に渡すことは可能ですか[〜#〜] before [〜#〜]送信?私はそれをこの形で渡したいと思います:

array('deptid'=>'deptname')

宛先phpファイル(options.php)のスクリプトを変更することを避けるため、これが必要です

ありがとう。

12
user1134475

これは、純粋なHTMLを使用して、目的の場所にほぼ正確に到達し、HTMLのみを使用するメソッドです。

<form action="options.php" method="post">
    <input type="text" name="options[deptid]" id="deptid" />
    <input type="text" name="options[deptname]" id="deptname" />
    <input type="submit" name="submit" id="submit" value="save" />
</form>

これはPHPであなたに与えるでしょう:

$post_options = array(
    'options' => array(
        'deptid '=> '[that input element value]',
        'deptname' => '[that input element value]'
    )
);

次に、次のようなアクセス(サニタイズを含む)が可能です。

$post_options = array('options');

if (is_numeric($post_options['deptid'] && $post_options['deptid'] > 0) {
    // Do whatever 
}

if (is_string($post_options['deptname'] && strlen($post_options['deptname'] > 2)) {
    // Do whatever 
}

[〜#〜]編集[〜#〜]

または...input name属性のdeptidを参照し、それを使用して部門名の行を変更しますか?これは次のようなことを示しているようです:

<?php

$deptid = 1;
$deptname = 'Department of Silly Walks';

?><input type="hidden" name="options[<?=$deptid?>]" value="<?=$deptname?>">

どの出力:

<input type="hidden" name="options[1]" value="Department of Silly Walks">

http://codepad.org/DtgoZGe7

これに伴う問題は、$deptid値が、実際には直接名前が付けられたり参照されたりしない値になることです。サーバーからクライアントへ、そしてその逆の値のこの抽象化のために、これを実装するのは潜在的に問題があると思うので、代わりに私が一番上にあるものをお勧めします。実際にはそれほど違いはありませんが、多かれ少なかれ自己文書化されています。

部門のリストをシリアル化したい場合は、少し注意が必要です。たとえば、次のことを試してみてください。

<input type="text" name="options[][deptid]" id="deptid" />
<input type="text" name="options[][deptname]" id="deptname" />

これにより、すべてのinputにインデックス値が追加されます。しかし...それらは直接関連付けられていませんでした。したがって、代わりに、キーごとに2つのゼロインデックス配列を取得します。

この場合に提案するのは、Javascriptを使用して、新しい各部門のinput要素を追加することです。これにより、それぞれに次のような番号を付けることができます。

<input type="text" name="options[0][deptid]" id="deptid" />
<input type="text" name="options[0][deptname]" id="deptname" />
<br/>
<input type="text" name="options[1][deptid]" id="deptid" />
<input type="text" name="options[1][deptname]" id="deptname" />
<br/>
<input type="text" name="options[2][deptid]" id="deptid" />
<input type="text" name="options[2][deptname]" id="deptname" />
<br/>
<input type="text" name="options[3][deptid]" id="deptid" />
<input type="text" name="options[3][deptname]" id="deptname" />

または、旧式のPOSTBACKメソッドを実行し、PHPを使用して$POST['options']をカウントし、同じインデックスを持つ入力の新しい「行」を「手動で」追加します。これは一般的なトラップです。これがあなたがどこかの時点で求めているものであるかどうかを考える必要があります。

23
Jared Farrish

$_POSTはすでに連想配列ですおよびそれ以上のことを複雑にしないことをお勧めします$_POSTはすでにフォームからのデータを保持しています

$myassoc = $_POST;
print_r($myassoc);

そして、受け取る連想配列は、フォームの入力要素(textareaを含む)のname属性で編成され、同じ名前が付けられます。

その他の洞察

私があなたのコードを見ると、あなたはdeptnameデータをdeptidに置きたいと思っています。それはPHPサーバーサイドコードです。あなたができることはキーに割り当てるだけですdeptid

$_POST['deptid'] = $_POST['deptname'];
$myassoc = $_POST;
print_r($myassoc);
6
Mp de la Vega
<form method="post">
    <input type="text" name="formdata['deptid']" />
    <input type="text" name="formdata['deptname']" />
    <input type="submit" />
</form>

<?php
    if(isset($_POST['formdata']))
    {
       $deptid = $_POST['formdata']['deptid'];
       $deptname = $_POST['formdata']['deptname'];
    }
?>
3
Tahir Yasin

適切な構造でJSオブジェクトを作成し、JSON.stringify()、POST it)を使用してJSONに変換してから、json_decode($_POST['data'],true)を実行します。

JSオブジェクトからPHP連想配列への正確なコピーがあります。trueの2番目のパラメーターを削除して、PHPオブジェクトを取得します) 。

1
bearfriend

_$_POST_はすでに連想配列です。

変数に_$_POST_を割り当てるだけで、これから必要な形式の配列を再構築できます。

_$myarray = $_POST;
_

これで、$ myarrayが必要になります。 var_dump($myvar);を実行します。

0
LoneWOLFs