从帖子中检索键值

时间:2014-01-22 06:06:05

标签: php arrays key-value

我有一个发布姓名,电子邮件地址和消息的联系表格。我想检索这些值并作为电子邮件发送。

这是我的代码:

<?php

foreach($_POST as $key=>$value)
{
  $key = $value;
}

$subject = "Website Contact Form";
$sender = $email;
$bccemail = $adminemail;
$receiver = $adminemail;

if(isset($name) and isset($email) and isset($sender) and isset($receiver) and isset($subject) ) {

$ToEmail = $receiver;

$mailheader = "From: " .$sender."\r\n";
$mailheader .= "Bcc: " .$bccemail."\r\n";
$mailheader .= "Reply-To: ".$sender."\r\n";
$mailheader .= "Content-type: text/html; charset=iso-8859-1\r\n";

$message_body = "<br /><b>Name:</b> " . $name . "<br />";
$message_body .= "<b>Email: </b> " . $sender . "<br />";
$message_body .= $message . "<br />";

if(@mail($ToEmail, $subject, $message_body, $mailheader)) 
{
    echo "Success";
} else {
    echo "Error";
}

} else {
    echo "Big Error";
}
?>

从此我得到了回应 - “大错误”。

如果我回应......

foreach($_POST as $key=>$value)
{
    echo "Key: $key<br />\n";
    echo "Value: $value<br />\n";
}

然后我得到

钥匙:名字 价值:杰克 关键:电子邮件 价值:jake@email.com 关键信息 值:这是消息

所以我知道表格数据正在发布。

如果我将变量放入php就好了..

$name = "Jake";
$email = "jake@email.com";
$message = "This is the message";

然后是有效的。

所以我知道这与从数组中检索表单数据有关。

2 个答案:

答案 0 :(得分:4)

看起来您正在尝试快速轻松地进行速记分配,这很好,但您需要使用extract()代替。

extract($_POST);

在这种情况下,key将是变量名称,因此您可以执行

echo $name;
echo $email;
echo $message;

否则,你只需要做作业。

$name= isset($_POST['name'])?:false;
$email = isset($_POST['email'])?:false;
$message= isset($_POST['message'])?:false;

使用上述任何一种方法,您可以缩短条件:

if($name && $email && $message):
    //successful
else:
    //failure
endif;

答案 1 :(得分:0)

extract($_POST, EXTR_SKIP);

EXTR_SKIP - 如果发生冲突,请勿覆盖现有变量。

请勿对不受信任的数据使用extract(),例如用户输入(即$ _GET,$ _FILES等)。如果你这样做,例如,如果你想运行暂时依赖于register_globals的旧代码,请确保使用其中一个非重写标志值,如EXTR_SKIP,并注意你应该以与variables_order中定义的顺序相同的顺序提取php.ini。

参考:http://us2.php.net/extract