2014-01-22 71 views
1

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

这里是我的代码:

<?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"; 
} 

然后我得到

键:命名 值:杰克 关键:电子邮件 值:[email protected] 重点:消息 值:这是消息

所以我知道表单数据被张贴。

如果我把变量引入像这样的PHP ..

$name = "Jake"; 
$email = "[email protected]"; 
$message = "This is the message"; 

然后就是作品。

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

回答

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; 
+0

太容易了!谢谢。 – JakeKempo

0
extract($_POST, EXTR_SKIP); 

EXTR_SKIP - 如果有冲突,不覆盖已有的变量。

不要在不受信任的数据上使用extract(),如用户输入(即$ _GET,$ _FILES等)。如果你这样做,例如,如果你想运行临时依赖于register_globals的旧代码,请确保你使用了诸如EXTR_SKIP之类的非覆盖标志值之一,并且要知道你应该按照在variables_order中定义的相同顺序提取php.ini。

Ref:http://us2.php.net/extract

+1

请不要使用'variable variable'赋值。 10/10有更好的方法来做到这一点(使用数组,或者为特定方法构建的预先存在的函数)。 – Ohgodwhy

+0

@Ohgodwhy,谢谢指出!我已经删除了'变量'解决方案。 –