簡體   English   中英

PHP / HTML聯系人表格-空白字段

[英]PHP / HTML Contact form - blank fields

我已經使用PHP和HTML制作了一個自定義聯系表單,但是在發送電子郵件時出現了一些空白字段。

實際上,我已經制作了一個包含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;
}
?>

您需要在subjectmessage字段中添加元素NAME

只需將您的表單代碼替換為以下代碼:

<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>

提交表單時希望在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>

不知道為什么會有問題〜也許以下內容會對您有所啟發。 經過測試,它無法發送電子郵件(目前在開發機上沒有本地郵件服務器),並且是一個“多頁mail.php ”演示,其中PHP模擬了原始形式的action 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] => fred@bedrock.com
    [sub] => betty had better bake a cake
    [message] => hey betty
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM