我有一个表单,其中有150个字段,我只想在提交时填写的电子邮件中发送该键和值,而不是全部值。
当前在“ $ _POST”上显示所有键和值,但是我只需要我在输入文本中填写的那个值。
编辑
在提交表单并打印$ _POST时,我会这样打印
[a] => 11
[b] => 11
[c] => 11
[d] => 11
[d] =>
[e] =>
[f] =>
[d] =>
但是我想要具有数据的键和值
答案 0 :(得分:1)
答案 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}}或其他方法,例如foreach
,array_walk
等