2015-02-24 45 views
0

我目前正在使用Bootstrap框架和PHP设置功能齐全的联系表单。我收到来自表单的测试电子邮件,但没有按照我理解的方式显示内容,而且还遇到其他一些问题。联系表格未返回正确的信息

首先,用户提交的电子邮件显示为从我的网站的主机收到。它也没有包括人的名字,我想我包含在我的PHP

Screenshot of email field returned as number

这里是我的contact.php代码和我的index.html文件的形式

<?php 

$to = '[email protected]'; 
$name = $_POST['name']; 
$email = $_POST['email']; 
$subject=$_POST['subject']; 
$message = $_POST['msg']; 

if ($_POST){ 
mail($to, $subject, $message); 
$confirm= "Your email was sent successfully!"; 
echo "<script type='text/javascript'>confirm('$confirm');</script>"; 
} 
else { 
    $error_msg= "All fields are required!"; 
    echo "<script type='text/javascript'>alert('$error_msg');</script>"; 
} 
?> 

的index.html

<form class="form-horizontal" role="form" action="contact.php" method="post"> 
       <div class="modal-header"> 
        <h2>Contact</h2> 
       </div> 

       <div class="modal-body"> 
       <!--name--> 
        <div class="form-group"> 
         <label for="name" class="col-sm-2 control-label">Name</label> 
         <div class="col-sm-10"> 
         <input type="text" class="form-control" name="name" id="name" placeholder="First and Last Name"> 
         </div> 
        </div> 
       <!--email--> 
        <div class="form-group"> 
         <label for="email" class="col-sm-2 control-label">Email</label> 
         <div class="col-sm-10"> 
         <input type="email" class="form-control" name="email" id="email" placeholder="[email protected]"> 
         </div> 
        </div> 
       <!--subject--> 
       <div class="form-group"> 
         <label for="subject" class="col-sm-2 control-label">Subject</label> 
         <div class="col-sm-10"> 
         <input type="text" class="form-control" name="subject" id="subject" placeholder="Enter subject here..."> 
         </div> 
        </div> 
       <!--message--> 
        <div class="form-group"> 
         <label for="msg" class="col-sm-2 control-label">Message</label> 
         <div class="col-sm-10"> 
         <textarea class="form-control" rows="4" name="msg" id="msg" placeholder="Enter message here..."></textarea> 
         </div> 
        </div> 

       </div> 

       <div class="modal-footer"> 
        <a class="btn btn-default" data-dismiss="modal">Close</a> 
        <button type="submit" class="btn btn-primary">Send</button> 
       </div> 
      </form> 

另一个意想不到的问题是,一旦提交页面,空白页(contact.php)被加载。我想,看着我的代码,JavaScript弹出或确认框会弹出,而不是?我是新来的,所以,如果这些都是愚蠢的问题,我很抱歉。

感谢 -K

+3

简单的答案:使用正确的标题和有效的From:电子邮件地址。阅读手册http://php.net/manual/en/function.mail.php – 2015-02-24 18:03:30

+0

你没有在contact.php中做任何名字或电子邮件。至于JavaScript不工作,最有可能的是,你没有渲染一个合适的HTML文件,所以它不会工作。查看源代码并查看发送时HTML的外观。 – Halfstop 2015-02-24 18:03:40

+1

只要用户在表单中输入内容并在未检查的情况下使用它,安全问题已经成熟。 – Halfstop 2015-02-24 18:04:27

回答

1

首先,你没有在你的头文件中定义。您需要

$headers = "From: [email protected]_domain.com\r\n"; 
mail($to,$subject,$message,$headers); 

您还可以修改标题要发送的需要在大多数情况下,除了从和CC设置HTML消息:抄送或BCC:密件抄送电子邮件地址。

// Always set content-type when sending HTML email 
$headers = "MIME-Version: 1.0" . "\r\n"; 
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n"; 

// More headers 
$headers .= 'From: <[email protected]>' . "\r\n"; 
$headers .= 'Cc: [email protected]' . "\r\n"; 

将此代码合并到您的if语句中。我也注意到你有

else { 
    $error_msg= "All fields are required!"; 

即使有,else语句不检查是否所有的领域都在通过传递作为$ _ POST方法只有一个字段,你需要打破下来或检查领域单独或与客户端JavaScript字段验证。

什么是确认javascript函数?你可以把它张贴在这里吗?如果您只查找警报,则可以在脚本标记之间直接插入警报功能。

+0

谢谢,所以我会将$ name <$email>传入头部变量中? '$ from =“From:$ name <$email> \ r \ n返回路径:$ email”; $ subject =“使用您的联系表格发送的消息”; (“[email protected]”,$ subject,$ message,$ from);' http://www.w3schools.com/jsref/met_win_confirm。asp – kho429 2015-02-24 18:29:39

+0

是的,你会的。你应该这样做:$ name。' <'.$email.'>';您可以在邮件函数$ header中显示调用最后一个参数,因为您可以添加其他内容(例如html电子邮件),或者当您决定在$标题中添加cc:或bcc:而不仅仅是从名称和电子邮件地址 – unixmiah 2015-02-24 18:44:55