PHP / HTML Контактная форма - пустые поля - PullRequest
1 голос
/ 14 апреля 2019

Я создал пользовательскую форму контакта с 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;
}
?>

Ответы [ 2 ]

1 голос
/ 14 апреля 2019

Каждый элемент формы, который вы хотите отобразить в данных массива POST, когда форма отправлена ​​(и, следовательно, должна быть доступна с помощью $ _POST ['fieldname']), нуждается в атрибуте name. Атрибут ID является необязательным, но его использование ограничено во многих ситуациях - конечно, не требуется в традиционной форме представления, такой как эта.

Кнопка ввода submit НЕ отправит форму, если вы не сделаете это с помощью Javascript. Возможно, лучше использовать кнопку отправки, как показано ниже.

<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

<code><?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
", $ message, print_r ($ _POST, true))); $ headers = "MIME-Version: 1.0". "\ Г \ п"; $ headers. = "Content-type: text / html; charset = UTF-8". "\ Г \ п"; $ headers. = 'From:'. $ from. "\ Г \ п"; $ headers. = 'Cc:'. $ cc. "\ Г \ п"; if ($ errmasg == "") { if (mail ($ to, $ subject, $ message, $ headers)) { $ _SESSION [ 'mailsent'] = 1; } Еще { $ _SESSION [ 'mailsent'] = 2; } } Еще { $ _SESSION [ 'mailsent'] = 3; } / * Если вы используете mail.php, тогда используйте `header` для перенаправления пользователя вернуться на страницу контактов - предполагается, что она называется contact.php * / заголовок if (! $ singlepage) ('Location: contact.php'); } ?> <! DOCTYPE html> POST на электронную почту <! - удалено действие атрибута, так как это работает на той же странице здесь -> <? PHP if (! empty ($ _SESSION ['mailsent'])) { switch ($ _SESSION ['mailsent']) { case 1: $ message = 'Ваше сообщение было успешно отправлено'; break; case 2: $ message = 'Извините, у нас возникла проблема с отправкой вашего электронного письма'; break; случай 3: $ message = 'Поддельные - нет данных'; перерыв; } printf ('<h1>% s ', $ message); unset ($ _SESSION ['mailsent']); } ?>
<! - элемент имеет NAME ->
<! - кнопка ОТПРАВИТЬ ->

Типичный вывод для отладки

Array
(
    [name] => fred flintstone
    [email] => fred@bedrock.com
    [sub] => betty had better bake a cake
    [message] => hey betty
)
1 голос
/ 14 апреля 2019

Вам необходимо добавить элемент NAME в поле subject и 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>
...