发送到电子邮件的PHP脚本不显示$ message变量

时间:2012-08-30 19:40:39

标签: php contact-form

我是PHP的新手,但是,我有一个发送到我的电子邮件的简单联系表单。除$message变量未显示外,一切都按预期工作。

php正在处理请求并将网站查看器发送到感谢页面,查看器也收到确认电子邮件,我收到的电子邮件包含除$message数据之外的所有请求变量。

由于$totalmessage函数限制,变量合并到mail()

正如我所说,我是php新手,但感谢您的帮助。

PHP代码:

<?php

    $to = "me@mywebsite.com";
    $subject = "Inquiry";
    $name = $_REQUEST['name'] ;
    $email = $_REQUEST['email'] ;
    $phone = $_REQUEST['phone'] ;

    if (isset($_POST['interest']) && $_POST['interest']!= 'none'){ 

        if (is_array($_POST['interest'])){ 
            $interest = implode(" ", $_POST['interest']); // format your array for use 
        } else { 
            $interest = $_POST['interest']; // no array -> print single value 
        } 
    } 
    $method = $_REQUEST['method' ] ;
    $message = $_GET['message'] ;
    $totalmessage = "
        Name:       $name \n
        Email:      $email \n
        Phone:      $phone \n
        Interest:           $interest \n
        Method:     $method \n 
        Message:             $message \n ";
    $headers = "From: $email";

    $sent = mail($to, $subject, $totalmessage, $headers);
    if($sent)
        header( "Location: /thankyou.html" );
    else
        print "We encountered an error sending your mail";
?>

HTML code:

<div class="row">
    <br><label for="message"> Message:</label><br/>
    <textarea name="message" rows="20" cols="20" id="message"></textarea>
</div>

电子邮件输出:

            Name:           bob

            Email:          bob@gmail.com

            Phone:          123-456-7890

            Interest:       research

            Method:         email

            Message:                               <===should have message text

6 个答案:

答案 0 :(得分:1)

您不应该使用GET变量来发送消息。 该URL只能发送255个字母!所以最好用POST发送它。

<form method="post" action="index.php?action=send">
<textarea name="message" rows="20" cols="20" id="message"></textarea>
</form>

并在你的php中:

$message = $_POST['message'] ;

答案 1 :(得分:0)

暂时将$message = $_GET['message'] ;更改为$message = $_REQUEST['message'] ;$message = $_POST['message'] ;,如果有效,请告诉我们。

PHP $_REQUEST包含$_GET$_POST下的所有内容,但POST和GET不共享参数。由于看起来你所拥有的其他所有内容都是通过POST传递的,因此将消息设置为通过POST传递也是有意义的。

了解POST和GET here之间的差异。

简而言之,当您想从数据库或数据模型中获取数据时,请使用GET(不应执行任何可以改变任何状态的内容)。

如果要更改数据模型,或者想要执行某些操作(例如,执行电子邮件脚本),请使用POST。

答案 2 :(得分:0)

默认情况下,$_REQUEST变量包含$_GET$_POST$_COOKIE的内容。

$_GET变量是通过URL参数传递给当前脚本的关联变量数组。

$_POST变量是通过HTTP POST方法传递给当前脚本的关联变量数组。

您可能通过从其他网页发布的form或此页面获得了该消息,然后您想要这样做:

$message = $_POST['message'];

而不是get。

答案 3 :(得分:0)

您需要与POST / GET / REQUEST数组保持一致。您的表单使用的方法是什么?无论如何,在表单处理代码中使用相同的内容。 例如,如果您的表单显示:<form method="POST">,那么您的后端代码应该从$ _POST数组中获取其所有值。

答案 4 :(得分:0)

尝试

$message =$_REQUEST['message'];

答案 5 :(得分:0)

Mailsend假设开始发送动作。在$ subject中我建议使用文本区域表单,否则你只能在每条消息中得到单词查询。

你能试试吗?

    public class ExerciseOne {
    public static void main(String []args){
        String []colors = {"MAGENTA","RED","WHITE","BLUE","CYAN"};
        List<String> list = new ArrayList<String>();
        for(String color : colors)
            list.add(color);
        String[] removeColors = {"RED","WHITE","BLUE"};
        List<String> removeList = new ArrayList<String>();
        for(String color : removeColors)
            removeList.add(color);

        removeColors(list,removeList);
        System.out.printf("%n%nArrayList after calling removeColors:%n");
        for(String color : list)
        {
            System.out.printf("%s ",color);
        }
    }

    private static void removeColors(Collection<String> collection1, Collection<String> collection2)
    {
        Iterator<String> iterator = collection1.iterator();

            while(iterator.hasNext()){
                if(collection2.contains(iterator.next()))
                    System.out.println("duplicate");
            }
    }

}