PHP 将所有 $_POST[] 变量访问到一个数组中?

Posted

技术标签:

【中文标题】PHP 将所有 $_POST[] 变量访问到一个数组中?【英文标题】:PHP access all $_POST[] variables into an array? 【发布时间】:2011-07-17 18:44:49 【问题描述】:

如何捕获$_POST VARIABLE 中的所有字段? 成一个数组?

$email = $_POST;
$emails = array_keys($email);
foreach($emails as $email) 
        echo '$' . nl2br($email);

$emailadd = new email_save;
$emailadd->insert_email_into_database("POST VARIABLES GO HERE)

我正在尝试制作电子邮件列表、姓名和电子邮件地址, 我如何捕获发布的所有可以正常访问的变量,例如 $_POST['email'] 到一个数组中,这样我就可以将它们添加到我的函数中的参数中?

我的表单域有 5 个域。 方法是POST。

而不是写作,

$email = mysql_real_escape_string($_POST['email']);
$firstname = mysql_real_escape_string($_POST['firstname']);

我正在尝试访问 $_POST[] 数组中的所有值; 所以我可以节省时间获取发布的变量 并向这些变量添加函数,例如mysql_real_escape_string();

将制定其他安全措施。

我希望能够将数组的引用添加到函数中,以便将它们添加到数据库中。

【问题讨论】:

为什么不直接传递 $_POST 呢?它已经是一个数组了... 我仍然不确定你的意图是什么......你试着改写这个问题吗? 虽然我不得不说这是非常不安全的,因为你甚至没有检查$_POST 中的任何这些值 - 或者你正在这样做insert_email_into_database 函数? 我仍然需要保护数组中的值.. 【参考方案1】:

嗯...这样的东西有帮助吗?

<?php
// blank array to hold emails
$emails = array();

foreach ( $_POST as $key => $value )

    if ( preg_match('/email/', $key) )
    
        $this_email = $value;
        // quick check to see if it is valid
        $this_email = filter_var($this_email, FILTER_VALIDATE_EMAIL);
        // also escape it to prevent SQL injections
        $this_email = $mysqli->real_escape_string($this_email);
        $emails[] = $this_email;
    


// $emails is now a nice, clean array of email addresses
$emailadd->insert_email_into_database($emails);

echo '<pre>';
print_r($emails);
echo '</pre>';
?>

<form method="post" action="index.php">
    <input type="text" name="email1" /><br />
    <input type="text" name="email2" /><br />
    <input type="text" name="email3" /><br />
    <input type="submit" />
</form>

【讨论】:

【参考方案2】:

如果您想从 POST 表单中捕获列表,请使用数组语法技巧,而不是枚举输入字段名称:

<input type="email" name="emails[]">
<input type="email" name="emails[]">
<input type="email" name="emails[]">

这样你就不需要在 PHP 中猜测了,因为 emails[] 会隐含地变成一个数组:

print_r($_POST["emails"]);
foreach ($_POST["emails"] as $email) 

对于数据库转义,只需使用:

$db_emails = array_map("mysql_real_escape_string", $_POST["emails"]);
// that's an array too

【讨论】:

我还要添加人名?因此,每次发布时,我只添加 1 个.. 将名称也设为数组。 &lt;input name="firstname[]"&gt; 如果将它们分组在一起,则每个字段都显示为相同的索引。 foreach ($_POST["emails"] as $i=&gt;$email) echo $email, $_POST["firstname"][$i]; 【参考方案3】:

$_POST 已经是一个数组。为什么不直接通过呢?

【讨论】:

以上是关于PHP 将所有 $_POST[] 变量访问到一个数组中?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery AJAX $.post 存储 PHP $_SESSION 变量?

如何通过 JQuery Post 传递 Javascript 数组,以便可以通过 PHP $_POST 数组访问其所有内容?

PHP 处理程序中的表单 $_POST 变量为空

无法访问 php $_POST 值

您可以将 PHP $_POST 变量设置为数组吗?

使用单点条目 PHP 时定义 $_POST 变量