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

我会做:

$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 回答
1

您可以像这样遍历 $_POST 数组:

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

这将使您的帖子变量$_POST['title_1']$title_1

请记住,您的帖子名称必须是您希望引用变量的确切名称。

于 2012-12-17T01:38:43.630 回答
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 回答
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 代码缩短为一行。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

在你编辑你的帖子后,我重新做了这个答案。使用可变变量。

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)

但是你应该小心——如果客户端 POST user_id 或其他什么?至少,您应该指定 $_POST 值不会覆盖已定义的变量:extract($_POST, EXTR_SKIP)

于 2012-12-17T01:34:48.537 回答
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 回答