PHP联系表单:收到空值,没有更新div以传递成功消息

时间:2017-10-07 13:13:41

标签: php html

我的问题可能很简单,但我对PHP很新,并且在阅读后尝试将所有内容拼凑在一起,但遇到了一些问题。我已经阅读了这篇文章的可能重复内容,并尝试尽可能地将这些解决方案放入我的代码中,但无济于事。

目标:

  1. 姓名和电子邮件验证(仅非空和电子邮件格式)

  2. 详细信息已发送至指定的电子邮件

  3. 代码的基本消毒(mysqli escape和htmlspecialchars)(了解有PDO,但我想坚持这一点)。

  4. 成功提交后,重新加载具有相同网站的页面(字段为空),但显示消息已发送或错误。我正在尝试标题(“位置:”)。我不想介绍AJAX,因为我不知道它。这可能吗?还阅读了关于使用动作:“”保持同一页面,但如果我的动作是“”,如何运行我的mail.php?还试过包括:mail.php,或者将我的mail.php重命名为index.php,但仍然没有成功。

  5. 当前面临的问题:

    1. 我确实收到了一封电子邮件但是有空字段,即输入没有反映,尽管我在表单中输入了一些值。这些是我收到的价值观:
    2. 来自:

      电话:

      等...

      1. Page指向标题位置。但div没有使用$ success变量更新,即没有更新消息以显示在div中。
      2. 请参考下面我的php和html文件: PHP:

        <?php
        $link = mysqli_connect("host", "username", "password", "dbname");
        
        $NameErr=$EmailErr=$Success="";
        $Name=$Email=$Company=$JobTitle=$Phone=$Message="";
        
        function sanitize($link,$entry) {
            $entry = mysqli_real_escape_string($link,$entry);
            $entry = htmlspecialchars($entry);
        
            return $entry;
        }
        
        if (empty($_POST["Name"])) {
            $nameErr = "Name is required";
            } 
            else if (!preg_match("/^[a-zA-Z ]+$/", $Name)) {
              $NameErr = "Only letters and spaces allowed"; 
            }
            else {
            $Name = sanitize($link, $_POST["Name"]);
        }
        
        if (empty($_POST["Email"])) {
            $EmailErr = "Email is required";
            }  
            else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
              $EmailErr = "Invalid email format";
            }
            else {
            $Email = sanitize($link, $_POST["Email"]); 
        }
        
        $Company = sanitize($link, $_POST["Company"]);
        $JobTitle = sanitize($link, $_POST["JobTitle"]);
        $Phone = sanitize($link, $_POST["Phone"]);
        $Message = sanitize($link, $_POST["Message"]);
        $formcontent=" From: $Name \n Phone: $Phone \n Company: $Company \n Job Title: $JobTitle \n Phone: $Phone \n Message: $Message";
        $recipient = "myemail@gmail.com";
        $subject = "Contact Form";
        $mailheader = "From: $Email \r\n";
            if (mail($recipient, $subject, $formcontent, $mailheader)){
                $Success = "Message sent, thank you for contacting us!";
                header("location:Contact.Us.html");
            }
            else($Success = "Sorry, we are unable to process your submission.");
        ?>
        

        HTML表单:

        <form action="mail.php" method="POST">
                    <ul class="contact">
                        <li>
                        <label for="Name">Name<span class="red">*</span></label>
                        <p><input id="Name" name="Name" type="text" required/></p>
        
                        </li>
                        <li>
                        <label for="Email">Email<span class="red">*</span></label>
                        <p><input id="Email" name="Email" type="email" required/></p>
                        </li>
        
                        <li>
                        <label for="Company">Company</label>
                        <p><input id="Company" name="Company"/></p>
                        </li>
        
                        <li>
                        <label for="JobTitle">Job Title</label>
                        <p><input id="JobTitle" name="JobTitle"/></p>
                        </li>
        
                        <li>
                        <label for="Phone">Phone</label>
                        <p><input id="Phone" name="Phone"/></p>
                        </li>
        
                        <li>
                        <label for="Message">Message</label>
                        <p><textarea id="Message" wrap="soft" name="Message"></textarea></p>
                        </li>
        
                    </ul>
                    <br>
                    <p><input id="submit" type="submit" value="Send!" /></p>
                    <div class="success"><? =$Success; ?></div>
                </form>
        

        感谢您的回复以解决上述任何问题。如果您能突出其他可能存在安全问题的方面,也将不胜感激。谢谢!

        此外,在实施清理建议($ link,$ entry)后,我在电子邮件中收到变量输入:公司和职位。

        因此,我进一步将所有变量名称更改为首字母大写,即将$ message更改为$ Message,并在整个表单的输入'id','name'和'for'中对齐。之后,我设法接收了Phone和Message的附加变量的输入。

        目前,我没有在电子邮件中收到变量名称和电子邮件的值。也许我的'if else if'部分的php代码出错了。将再次计算和更新。在此期间,如果有任何建议,请继续更新。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

正如@headmax指出的那样,您还需要将link参数传递给sanitize函数

function sanitize ($link,  $entry) {

}

原因是没有将它作为参数传递,$ link变量变为未定义。如果你有错误报告,你会收到$ link的通知。

为了将来的目的,无论何时在开发环境中,始终将错误报告打开为

error_reporting(E_ALL);//place this at the top of the script

修改

为了显示成功消息并执行重定向,您最好使用Ajax。

setTimeOut();//use this to display the success message for a while(pass number of seconds)

然后使用javascript执行重定向

window.location.href ='URL';  

使用您的方法,只需将成功变量声明为

$success = '';//add this before you use the variable