0

多くの挿入フィールドがあるページで作業しています。次のコードを短縮するにはどうすればよいですか?

$title_1 = $_POST['title_1'];
$content_1 = $_POST['content_1'];
$link_1 = $_POST['link_1'];
$img_link_1 = $_POST['img_link_1'];

$title_2 = $_POST['title_2'];
$content_2 = $_POST['content_2'];
$link_2 = $_POST['link_2'];
$img_link_2 = $_POST['img_link_2'];

$title_3 = $_POST['title_3'];
$content_3 = $_POST['content_3'];
$link_3 = $_POST['link_3'];
$img_link_3 = $_POST['img_link_3'];
4

7 に答える 7

1

次のように$_POST配列をループできます。

foreach ($_POST as $key => $value) {
    ${$key} = $value;
}

これにより、投稿変数が次のよう$_POST['title_1']になります$title_1

投稿名は、変数を参照する正確な名前である必要があることに注意してください。

于 2012-12-17T01:38:43.630 に答える
1

私はします:

$howmany = 3; // How many sets of fields are submitted.

for($i=0;$i<$howmany;$i++){
  $field[$i]['title'] = $_POST['title_'.$i];
  $field[$i]['content'] = $_POST['content_'.$i];
  $field[$i]['link'] = $_POST['link_'.$i];
  $field[$i]['img_link'] = $_POST['img_link_'.$i];
}

$field[1]['title']次に、フォームのデータにアクセスできます。

于 2012-12-17T01:34:46.670 に答える
0
<?php
$key_prefixes = array (
    'title',
    'content',
    'link',
    'img_link'
);

$i = 1;
while (true) {
    $post_values_missing = 0;
    foreach ($key_prefixes as $key_prefix) {
        $key = $key_prefix . '_' . $i;
        if (!isset($_POST[$key])) {
            $post_values_missing += 1;
            continue;
        };
        $val = $_POST[$key];
        // do something with $val
    }

    // did you get any values through this iteration?
    $post_values_exist_bool = (count($key_prefixes) !== $post_values_missing);

    // if not, you must've gotten them all
    if (false === $post_values_exist_bool) {  
        break;
    }

    $i += 1;
}
于 2012-12-17T01:39:17.000 に答える
0

あなたがあなたの投稿を編集した後、私はこの答えをやり直しました。変数変数を使用します。

foreach ($_POST as $key => $val)
{
    if (preg_match('/^(([a-z]+_)+\d)$/', $key, $match)
    {
        $$match[0] = $val;
    }
}

[a-z0-9]または[a-zA-Z0-9]代替として使用します。

于 2012-12-17T01:30:00.170 に答える
0

抽出を使用できます(http://php.net/manual/en/function.extract.php):extract($_POST)

ただし、注意が必要です。クライアントがuser_idなどをPOSTした場合はどうなるでしょうか。少なくとも、$_POST値が定義済みの変数を上書きしないように指定する必要があります。extract($_POST, EXTR_SKIP)

于 2012-12-17T01:34:48.537 に答える
0

これを行う最もクリーンな方法は、PHPのPOSTデータ処理機能を使用して作業を行うことです。

次のようにHTMLフォーム名を使用することを検討してください。

<form action="{url}" method="post">

    <input type="text" name="data[0][title]" />
    <input type="text" name="data[0][content]" />
    <input type="text" name="data[0][link]" />
    <input type="text" name="data[0][image_link]" />

    <input type="text" name="data[1][title]" />
    <input type="text" name="data[1][content]" />
    <input type="text" name="data[1][link]" />
    <input type="text" name="data[1][image_link]" />

    ...

</form>

PHPでは、次のようにデータを抽出します。

$data = $_POST['data'];

これにより、PHPコードが1行に短縮されます。dataこのステートメントは、入力形式のPHPの配列を直接提供します。Avar_dumpは次のようになります。

array (
    0 => array('title'=>'...','content'=>'...','link'=>'...','image_link'=>'...'),
    1 => array('title'=>'...','content'=>'...','link'=>'...','image_link'=>'...'),
    ...
)
于 2012-12-17T02:47:44.020 に答える
0

名前を変更する必要はありません。配列にするだけです。

<input type="text" name="title[]" />
<input type="text" name="content[]" />
<input type="text" name="link[]" />
<input type="text" name="image_link[]" />

<input type="text" name="title[]" />
<input type="text" name="content[]" />
<input type="text" name="link[]" />
<input type="text" name="image_link[]" />

<input type="text" name="title[]" />
<input type="text" name="content[]" />
<input type="text" name="link[]" />
<input type="text" name="image_link[]" />

PHP:

extract($_POST);
$count=count($title);

for($i=0;$i<$count;$i++) {

//You can perform your any function on this loop, to get title use $title[$i]
}
于 2012-12-18T05:15:50.547 に答える