2012-07-10 141 views
1

我在使用PHP邮件函数发送html表单的数据时遇到了一些问题。邮件功能工作正常,并且在提交表单时我没有问题,但是有时我的电子邮件中有空数组。

代码如下:

<?php 
error_reporting(E_ALL & ~E_NOTICE); 

$email = $_POST['email']; 

     //check if value is set: 
if (isset($_POST['submit'])){ 

     $everyoneToppingList = substr(implode(', ', $_POST['everyone_platter_topping']), 0); 
    $everyoneCondimentList = substr(implode(', ', $_POST['everyone_platter_condiment']), 0); 

}; //end isset($_POST['submit'] 

$len = strlen($email); 
if ($len > 0) 
{ 
$email_body = "Full Name: $title $fullname\n". 
"Topping? - $everyoneToppingList\n". 
    "Condiment? - $everyoneCondimentList\n\n"; 

$email_to = "[email protected]"; 


    $email_from = $_POST['email']; // required 

    $URL= "order.php"; 
    header ("Location: $URL"); 

    // create email headers 


$headers = "From: $email_from \r\n"; 

$headers .= "Reply-To: $email_from \r\n"; 

$headers .= "Cc: $email_from \r\n"; 

$headers .= "X-Mailer: PHP/". phpversion(); 

mail($email_to, $email_subject, $email_body, $headers);  
} ?> 

和HTML的部分看起来像:

<table style="vertical-align:top;" class="form platter bread" cellspacing="2"> 
    <tr> 
     <span class="bold"> 
      Choose Your Topping: 
     </span> 
     <span id="errorsDiv_everyone_platter_topping[]"> 
     </span> 
     <td height="7" width="87" align="left" valign="middle"> 
      <input type="checkbox" name="everyone_platter_topping[]" value="Lettuce" id="everyone_lettuce" /> 
      <label for="everyone_lettuce">\ 
       Lettuce 
      </label> 
     </td> 
     <td height="7" width="87" align="left" valign="middle"> 
       <input type="checkbox" name="everyone_platter_topping[]" value="Tomatoes" id="everyone_tomatoes" /> 
       <label for="everyone_tomatoes"> 
        Tomatoes 
       </label> 
      </td> 
    </tr> 
</table> 

当我收到的电子邮件,有时只显示 “摘心 - ,,,,?”。

真的需要这方面的帮助和任何建议将不胜感激!

谢谢!

+0

有什么模式,当它是空的? – maxhud 2012-07-10 19:30:26

+0

如果某人没有选择任何复选框作为顶点会发生什么?是否有验证停止,或者它是一个有效的选择? – andrewsi 2012-07-10 19:37:07

+0

这不是很好的HTML。另外,你为什么用一个子串方法包装内爆输入? – 2012-07-10 19:40:09

回答

-1

首先在使用em之前初始化您的变量。

$everyoneToppingList = null; 
$everyoneCondimentList = null; 
if (isset($_POST['submit'])){ 

    $everyoneToppingList = substr(implode(', ', $_POST['everyone_platter_topping']), 0); 
    $everyoneCondimentList = substr(implode(', ', $_POST['everyone_platter_condiment']), 0); 

}; 

$len = strlen($email); 
if ($len > 0) 
{ 
    if (!is_null($everyoneToppingList) && !is_null($everyoneCondimentList)) 
    { 
     // Send your mail. 
    } 
} 
+0

这不会解决它...? – maxhud 2012-07-10 19:44:29

+0

您不需要初始化为null,因为所有变量都是其所在函数的全局变量(或者如果是函数外的文档)。对于'is_null',你可以使用'isset'。 – 2012-07-10 19:47:37

+0

他正在使用一个变量,该变量位于外部的if()块内。如果预期的价值永远不会被设定呢? – 2012-07-10 19:50:40

1

我很抱歉把它写在这里,但评论部分不足以提及你的问题的疑虑。

  • 表单中的元素和PHP代码中使用的元素没有给出清晰的问题图片。
  • $URL= "order.php"; header ("Location: $URL");没有任何意义,它会重定向和邮件不会被反正发送

如果我让这种微妙的

  1. 变化从PHP代码
  2. 添加删除header代码email输入框和submit以html格式提交按钮
  3. 用表格外部添加表格的方法POST

我只是通过上面的修改而没有任何麻烦地得到了这段代码。

我建议你编辑一个问题并再次询问或者进行建议的更改(当然需要从你身边进行一些调整),并且代码将处于工作状态。

+0

感谢您的回复,并对代码的混淆感到抱歉,因为我只复制并粘贴了部分代码,因为它太长了。因此,对于您的建议更改: 1.标题代码实际上正在工作,我可以收到没有问题的电子邮件。 2.是的我有我的真实形式的电子邮件输入框和提交按钮 – 2012-07-10 20:02:34