Как получить значения ключа из $ _POST, а также значение, в котором у меня есть данные? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть форма, в которой есть 150 полей, и я хочу отправить только тот ключ и значение в электронном письме, которое я заполнил в форме на момент отправки, а не все значения.

В настоящее времяНа «$ _POST» он показывает все ключ и значение, но я хочу только то значение, которое я заполнил во входном тексте.

EDIT

При отправке формы и печати $ _POST у меня есть егонапечатать так

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

Но я хочу этот ключ и значение, которые имеют данные

Ответы [ 5 ]

0 голосов
/ 21 февраля 2019

В качестве примера того, как array_filter изменит окончательный массив POST, рассмотрим следующую демонстрацию:

<code><!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
', print_r ($ _POST, 1));/ * результаты ПОСЛЕ фильтрации * / $ _POST = array_filter ($ _POST);printf ('
%s
', print_r ($ _POST, 1));}?>

Пример вывода:

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_walk, array_map и т. д.

0 голосов
/ 21 февраля 2019

Учитывая ваши почтовые данные следующим образом:

$_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

0 голосов
/ 21 февраля 2019

Вам нужно оставить одно дополнительное скрытое поле ввода для хранения старого значения для каждого элемента ввода вашей формы.Таким образом, если ваша форма имеет 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
    }
}
0 голосов
/ 21 февраля 2019

Предполагая, что я правильно понимаю ваше требование, вы можете сделать это в простом цикле 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 для демонстрационных целей.

0 голосов
/ 21 февраля 2019
foreach($_POST as $key=>$value) {
    if($value!='') {
        $post[$key] = $value;
    }
}

Я думаю, что это может помочь вам.$post будет иметь все необходимые данные.

...