将所有的$_POST[]变量存入一个数组中的PHP方法?

17
如何捕获 $_POST 变量中的所有字段并放入一个数组中?
$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();

其他安全措施将会考虑。

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


6
为什么不直接传递$_POST呢?它已经是一个数组了... - Marc B
我仍然不确定你的意图是什么... 你能否尝试重新表达问题? - Czechnology
1
虽然我必须说这是非常不安全的,因为您甚至没有检查$_POST中的任何值 - 或者您是在insert_email_into_database函数中执行此操作? - slhck
我仍然需要保护数组中的值。 - Aaron
3个回答

16
如果您想从 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

我还要添加人名吗?所以每次发布时,我只添加一个人名。 - Aaron
将名称也变成一个数组。<input name="firstname[]"> 如果它们被分组在一起,那么每个字段都会显示相同的索引。 foreach ($_POST["emails"] as $i=>$email) { echo $email, $_POST["firstname"][$i]; } - mario

7

$_POST已经是一个数组,为什么不直接传递它呢?


2
嗯...像这样的东西会有帮助吗?
<?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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接