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

PHP access all $_POST[] variables into an array?

提问人:Aaron 提问时间:3/18/2011 最后编辑:ShoeAaron 更新时间:3/18/2011 访问量:78679

问:

如何捕获变量中的所有字段? 变成数组?$_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();

其他安全措施将被弄清楚。

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

PHP 数组 OOP 帖子

评论

6赞 Marc B 3/18/2011
为什么不直接传递 _POST 美元呢?它已经是一个数组了......
0赞 Czechnology 3/18/2011
我仍然不确定你的意图是什么......你试着改写这个问题吗?
1赞 slhck 3/18/2011
虽然我不得不说这是非常不安全的,因为您甚至没有检查任何这些值 - 或者您在函数中这样做?$_POSTinsert_email_into_database
0赞 Aaron 3/18/2011
我仍然需要保护数组中的值。

答:

2赞 Jeremy Conley 3/18/2011 #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>
16赞 mario 3/18/2011 #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

评论

0赞 Aaron 3/18/2011
我也在添加人名?所以每次发布时,我只添加每个 1 个。.
0赞 mario 3/18/2011
将名称也设为数组。 如果将它们组合在一起,则每个字段都显示相同的索引。<input name="firstname[]">foreach ($_POST["emails"] as $i=>$email) { echo $email, $_POST["firstname"][$i]; }
7赞 SimplyZ 3/18/2011 #3

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