【问题标题】:How do I get the key values from $_POST and also that value in which i have field the data?如何从 $_POST 获取键值以及我在其中包含数据的值?
【发布时间】:2019-07-15 04:01:18
【问题描述】:

我有一个包含 150 个字段的表单,我只想发送我在提交时填写的电子邮件中的键和值,而不是所有值。

目前在“$_POST”上显示所有键和值,但我只想要我在输入文本中填写的值。

编辑

在提交表单并打印 $_POST 时,我有这样的打印

[a] => 11 
[b] => 11 
[c] => 11 
[d] => 11 
[d] => 
[e] => 
[f] => 
[d] => 

但我想要那个键和值都有数据

【问题讨论】:

  • $_POST=array_filter( $_POST ); ?
  • 所以从$_POST 中选择你感兴趣的值,忽略其余的
  • @Ram 谢谢你的评论,我也想要键值
  • 嗨,你在这里问的不是很清楚。如果你能提供一个例子,也许我们可以提供帮助
  • 在提交表单并打印 $_POST 我有它的打印像这样 [a] => 11 [b] => 11 [c] => 11 [d] => 11 [d] => [e] => [f] => [d] => 但是我想要那个键和值都有数据

标签: php forms key submit key-value


【解决方案1】:
foreach($_POST as $key=>$value) {
    if($value!='') {
        $post[$key] = $value;
    }
}

我认为这可能对您有所帮助。 $post 将拥有您需要的所有数据。

【讨论】:

  • 是的,所有值以及该值的键,因为我必须同时发送电子邮件键和该键的值
  • 我在 print_r 中也得到了“submit - SUBMIT”值,我如何排除这个
  • 我在 print_r 中也得到了“submit - SUBMIT”值,我如何排除这个
  • 你可以使用array_pop从数组中删除最后一个元素
【解决方案2】:

您需要保留一个额外的隐藏输入字段来存储表单中每个输入元素的旧值。因此,如果您的表单有 150 个输入元素,那么将有另外 150 个隐藏字段,并且表单中总共将有 300 个字段(150 个在页面上可见,其余 150 个对用户不可见)。

最初,当页面加载时,输入元素和隐藏元素将具有相同的数据,但用户只能更改可见的输入元素并可以提交表单。

在这个表单发布数据的 PHP 脚本中,您需要比较输入元素与隐藏元素的值。如果它们不相同,则在新的临时数组中添加新值。发送电子邮件时将使用这个新的临时数组。

例子:

表格

field_1
hidden_field_1

field_2
hidden_field_2

field_3
hidden_field_3

PHP

loop on $_POST array {
    if ( hidden_field_1 != field_1) {
        // Store field_1 in temp to send it in email
    }
}

【讨论】:

  • 我在 print_r 中也得到了“submit - SUBMIT”值,我如何排除这个
【解决方案3】:

假设我正确理解您的要求,您可以在一个简单的 foreach 循环中执行此操作

foreach ($_POST as $key => $val) {
    if ( $key == 'submit' ) {
        continue;
    }
    echo $key . " = " . $val . '<br>';
}

如果有多个字段,那么您可以创建一个忽略列表并在每个字段名称上加上文本。

$ignore_list = ['submit', 'other_field'];

foreach ($_POST as $key => $val) {
    if ( in_array($key, $ignore_list ) {
        continue;
    }
    echo $key . " = " . $val . '<br>';
}

当然,你可以让生成的输出看起来像你想要的那样,我只是使用了一个简单的echo 来进行演示。

【讨论】:

  • 感谢您的评论
  • 我在 print_r 中也得到了“submit - SUBMIT”值,我如何排除这个
  • @Sheenu 我已经修改了我的答案,不报告提交按钮
【解决方案4】:

考虑您的帖子数据如下:

$_POST = array(
    'a' => '11', 
    'b' => 11, 
    'c' => 11, 
    'd' => null, 
    'e' => null, 
);

$to_delete = array(0 => false);
print_r(array_diff($_POST, $to_delete));

工作代码在这里:https://3v4l.org/BZVQn

【讨论】:

    【解决方案5】:

    作为array_filter 将如何改变最终 POST 数组的示例,请考虑以下演示:

    <!DOCTYPE html>
    <html lang='en'>
        <head>
            <meta charset='utf-8' />
            <title>multiple fields, non-empty only selected</title>
        </head>
        <body>
            <form method='post'>
                <?php
                    /* for brevity only 10 results */
                    for( $i=1; $i <= 10; $i++ ){
                        $checked = rand(0,5)==1 ? $i : '';
                        echo "<input type='hidden' name='field_$i' value='$checked' />";
                    }
    
                    if( $_SERVER['REQUEST_METHOD']=='POST'){
                        /* results without filtering */
                        printf('<pre>%s</pre>',print_r( $_POST, 1 ) );
    
    
                        /* results AFTER filtering */
                        $_POST=array_filter( $_POST );
                        printf('<pre>%s</pre>',print_r( $_POST, 1 ) );
                    }
                ?>
                <input type='submit' />
            </form>
        </body>
    </html>
    

    示例输出:

    Array
    (
        [field_1] => 1
        [field_2] => 
        [field_3] => 3
        [field_4] => 
        [field_5] => 5
        [field_6] => 
        [field_7] => 
        [field_8] => 
        [field_9] => 
        [field_10] => 10
    )
    Array
    (
        [field_1] => 1
        [field_3] => 3
        [field_5] => 5
        [field_10] => 10
    )
    

    两个print 语句的输出有很大不同——array_filter 的使用已经从数组中删除了所有空的表单字段——从那时起,使用foreach 或其他方法处理数组数据是微不足道的如array_walkarray_map

    【讨论】:

      猜你喜欢
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多