如何从$ _POST中获取键值,以及如何获取数据所在的值?

时间:2019-02-21 09:34:49

标签: php forms key submit key-value

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

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

编辑

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

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

但是我想要具有数据的键和值

5 个答案:

答案 0 :(得分:1)

请考虑以下信息:

fs.createReadStream

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

答案 1 :(得分:0)

foreach($_POST as $key=>$value) {
    if($value!='') {
        $post[$key] = $value;
    }
}

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

答案 2 :(得分:0)

您需要保留一个额外的隐藏输入字段,以为表单的每个输入元素存储旧值。因此,如果您的表单有150个输入元素,那么表单中还会有150个隐藏字段,总体上将有300个字段(页面上可见150个字段,用户看不到其余150个字段)。

最初,在页面加载时,input元素和hidden元素将具有相同的数据,但是用户只能更改可见的input元素并可以提交表单。

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

示例:

表格

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
    }
}

答案 3 :(得分:0)

假设我正确理解了您的要求,则可以在一个简单的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进行演示。

答案 4 :(得分:0)

作为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从数组中删除了所有空的表单字段-从这一点出发,使用{{ 1}}或其他方法,例如foreacharray_walk