PHP / HTML联系表单 - 空白字段

问题描述 投票:1回答:2

我用PHP编写了一个自定义联系表单,但是在发送电子邮件时我得到了一些空白字段。

实际上,我已经制作了一个包含名称,电子邮件,主题和消息的4个表,但包括主题和消息在内的字段被发送为空。

我很感激任何帮助。

谢谢。

Html代码:

<form action="mail.php" method="post">
    <div class="form-block clearfix">
        <input type="text" placeholder="name*" id="name" />
        <input type="text" placeholder="email*" id="email" />
    </div>
    <div class="form-block clearfix">
        <input type="text" placeholder="subject*" id="sub" />
    </div>
    <div class="form-block">
        <textarea cols="1" rows="1" placeholder="Message*" id="message" ></textarea>
    </div>
    <div class="submit-btn">
        <input type="button" id="submit" value="submit" class="detail-submit"/>
    </div>
</form>

PHP:

<?php

$to = "My email";
$from = "";
$cc = "";

$subject = "Contact us form";

$errmasg = "";

$name = htmlentities(trim($_POST['name']));
$email = htmlentities(trim($_POST['email']));
$sub = htmlentities(trim($_POST['sub']));
$message = htmlentities(trim(nl2br($_POST['message'])));

if($email){
    $message = "<table border='0' cellpadding='2' cellspacing='2' width='600'>
    <tr><td>Name: ".$name." </td></tr>
    <tr><td>Email: ".$email."</td></tr>
    <tr><td>Subject: ".$sub."</td></tr>
    <tr><td>Message:".$message."</td></tr>
    </table>";
}else{
    $errmasg = "No Data";
}

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";


$headers .= 'From:'.$from . "\r\n";
$headers .= 'Cc:'.$cc . "\r\n";

if($errmasg == ""){
    if(mail($to,$subject,$message,$headers)){
         echo 1;
    }else{
        echo 'Error occurred while sending email';
    }
}else{
    echo $errmasg;
}
?>
php html contact-form
2个回答
1
投票

提交表单时希望在POST数组数据中出现的每个表单元素(因此使用$ _POST ['fieldname']可用)都需要name属性。 ID属性是可选的,但在许多情况下使用有限 - 当然不需要传统的表单提交,例如这个..

除非您使用Javascript,否则输入按钮submit将不会提交表单。使用下面的提交按钮可能更好。

<form action="mail.php" method="post">
    <div class="form-block clearfix">
        <input type="text" placeholder="name*" name="name" />
        <input type="text" placeholder="email*" name="email" />
    </div>
    <div class="form-block clearfix">
        <input type="text" placeholder="subject*" name="sub" />
    </div>
    <div class="form-block">
        <textarea cols="100" rows="1" placeholder="Message*" name="message" ></textarea>
    </div>
    <div class="submit-btn">
        <input type="submit" name="submit" value="Submit" class="detail-submit"/>
    </div>
</form>

不确定为什么你有问题〜也许以下将提供启示。它被测试到未能发送电子邮件(目前在开发机器上没有本地邮件服务器),并且是一个“一体化页面”演示,其中PHP模拟原始表单操作mail.php

<?php

    /* this emulates mail.php */
    error_reporting( E_ALL );

    /* use a session variable */
    session_start();

    /* for testing single page demo */
    $singlepage=true;

    if( $_SERVER['REQUEST_METHOD']=='POST' ){

        $to = "My email";
        $from = $cc = '';

        $subject = "Contact us form";
        $errmasg = '';

        /* filter POST data */
        $args=array(
            'name'      =>  FILTER_SANITIZE_STRING,
            'email'     =>  FILTER_SANITIZE_EMAIL,
            'sub'       =>  FILTER_SANITIZE_STRING,
            'message'   =>  FILTER_SANITIZE_STRING
        );
        $_POST=filter_input_array( INPUT_POST, $args );
        /* assign as variables */
        extract( $_POST );


        $name = htmlentities(trim($name));
        $email = htmlentities(trim($email));
        $sub = htmlentities(trim($sub));
        $message = htmlentities(trim(nl2br($message)));


        if( $email ){
            $message = "<table border='0' cellpadding='2' cellspacing='2' width='600'>
                <tr><td>Name: ".$name." </td></tr>
                <tr><td>Email: ".$email."</td></tr>
                <tr><td>Subject: ".$sub."</td></tr>
                <tr><td>Message:".$message."</td></tr>
            </table>";
        }

        # REMOVE THIS LINE or COMMENT IT OUT FOR REAL USAGE
        #exit( sprintf("<pre>%s\n%s</pre>",$message, print_r( $_POST,true ) ) );

        $headers = "MIME-Version: 1.0" . "\r\n";
        $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
        $headers .= 'From:'.$from . "\r\n";
        $headers .= 'Cc:'.$cc . "\r\n";

        if($errmasg == ""){
            if( mail( $to, $subject, $message, $headers ) ){
                 $_SESSION['mailsent']=1;
            }else{
                $_SESSION['mailsent']=2;
            }
        }else{
            $_SESSION['mailsent']=3;
        }

        /* 
            If you are using mail.php then use a `header` to redirect the user 
            back to the contact page - assumed to be called `contact.php`
        */
        if( !$singlepage ) header( 'Location: contact.php' );

    }
?>
<!DOCTYPE html>
<html lang='en'>
    <head>
        <meta charset='utf-8' />
        <title>POST to email</title>
    </head>
    <body>
        <!-- removed attribute action as this works on same page here -->
        <form method="post">
            <?php

                if( !empty( $_SESSION['mailsent'] ) ){
                    switch( $_SESSION['mailsent'] ){
                        case 1:$message='Your message was sent successfully';break;
                        case 2:$message='Sorry - we had a problem sending your email';break;
                        case 3:$message='Bogus - no data';break;
                    }
                    printf( '<h1>%s</h1>', $message );
                    unset( $_SESSION['mailsent'] );
                }

            ?>
            <div class="form-block clearfix">
                <input type="text" placeholder="name*" name="name" /><!-- element has a NAME -->
                <input type="text" placeholder="email*" name="email" />
            </div>
            <div class="form-block clearfix">
                    <input type="text" placeholder="subject*" name="sub" />
            </div>
            <div class="form-block">
                    <textarea cols="100" rows="1" placeholder="Message*" name="message" ></textarea>
            </div>
            <div class="submit-btn">
                <input type="submit" class="detail-submit" /><!-- a SUBMIT button -->
            </div>
        </form>
    </body>
</html>

调试的典型输出

Array
(
    [name] => fred flintstone
    [email] => [email protected]
    [sub] => betty had better bake a cake
    [message] => hey betty
)

1
投票

你需要在NAMEsubject字段中添加一个元素message

只需将您的表单代码替换为以下代码:

<form action="mail.php" method="post">
    <div class="form-block clearfix">
        <input type="text" placeholder="name*" id="name" />
        <input type="text" placeholder="email*" id="email" />
    </div>
    <div class="form-block clearfix">
        <input type="text" name="sub" placeholder="subject*" id="sub" />
    </div>
    <div class="form-block">
        <textarea cols="1" rows="1" name="message" placeholder="Message*" id="message" ></textarea>
    </div>
    <div class="submit-btn">
        <input type="button" id="submit" value="submit" class="detail-submit"/>
    </div>
</form>
© www.soinside.com 2019 - 2024. All rights reserved.