【问题标题】:contact form not getting submitted联系表格未提交
【发布时间】:2021-04-07 07:19:03
【问题描述】:

单击提交按钮时,它显示在 if 条件之后未设置提交。我猜这个消息正在显示,因为表单没有被提交。我不知道我要去哪里错了请帮我解决这个问题。我特此附上我的contact.php 代码和mail.php 代码的一部分。谢谢

contact.php

<form id="contact-form" method="POST" action="mail.php">
                    <div class="row">
                        <div class="col-md-4">
                            <div class="form-group">
                                <label>Name</label>
                                <input class="form-control" name="name" id="name" placeholder="" type="text" required>
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label>Email</label>
                                <input class="form-control" name="email" id="email" placeholder="" type="email" required>
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label>Subject</label>
                                <input class="form-control" name="subject" id="subject" placeholder="" required>
                            </div>
                        </div>
                    </div>
                    <div class="form-group">
                        <label>Message</label>
                        <textarea class="form-control" name="message" id="message" placeholder="" rows="10" required></textarea>
                    </div>
                    <div class="text-right"><br>
                    
                        
                        <input class="btn btn-primary solid blank button"  id="btn" type="submit" value="submit" name="submit">
                    
                    </div>
    
                </form>

邮件.php

<?php
if (isset($_POST['email'])){
    
    echo "submit is set to {$_POST['submit']} and now we send the email<br>";

$to = "abc@email.com"; 
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$message .="\r\n from: $email";


if(mail ($to, $subject, $name,  $message)){
    echo "Enquiry sent successfully!<br>";
   
}
    else
    {
    echo "Mail was not sent. Please try again later<br>";
    }
} else{

echo"submit is not set<br>"; 
}

echo "after the if condition";

header('Location: https://imatrixautomation.com/contact.php');
exit;

?> 

【问题讨论】:

  • 将此添加到代码顶部 `ini_set('display_errors', 1);ini_set('display_startup_errors', 1);error_reporting(E_ALL);'这将显示错误。如果您不知道,请检查浏览器控制台以查看正在提交的内容。作为调试,最好在 $_POST 上执行 var_dump 以查看正在发送的内容。
  • 只需将表单的方法更改为method="GET" 并在提交时查看构建的url,您将找到正在发送到 mail.php 的数据,在 mail.php 上将所有 $_POST 更改为$_GET 并一一回显它们以进行调试。如果一切看起来都不错,那么将所有方法改回两个文件和表单中都发布
  • 您需要检查您的 html 表单,将输入提交的名称更改为电子邮件,因为在您的脚本中您正在寻找 $_POST['email'] 但实际上是它的提交。
  • @stillKonfuzed 这是一种非常冗长且不必要的调试方式。您只需查看浏览器开发工具的网络日志即可获取该信息,而无需更改任何代码。或者使用 Fiddler 之类的工具。网络已经存在了 30 年……您是否没有想到现在可能有更好的方法来查看简单的 Post 请求在做什么?学会使用可用的工具,这样会节省时间
  • @ADyson,如果您检查 html 表单,您将看到它没有设置属性,因此 php 脚本将知道它的这种表单,如果他将输入按钮更改为电子邮件,就像它在 $_POST 上一样,那么它应该可以工作。

标签: php html email


【解决方案1】:

你的代码没有问题,我猜你是直接请求mail.php

试试这个代码,也许这对你的问题有帮助

<?php
if($_POST){ // add condition if http request is POST then process your POST request
    if (isset($_POST['email'])){
    
    echo "submit is set to {$_POST['submit']} and now we send the email<br>";

$to = "abc@email.com"; 
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$message .="\r\n from: $email";


if(mail ($to, $subject, $name,  $message)){
    echo "Enquiry sent successfully!<br>";
   
}
    else
    {
    echo "Mail was not sent. Please try again later<br>";
    }
} else{

echo"submit is not set<br>"; 
}

echo "after the if condition";


exit; // if POST process has done, script will stop, and code above will not showing
}

?> 
<form id="contact-form" method="POST" action="">
                    <div class="row">
                        <div class="col-md-4">
                            <div class="form-group">
                                <label>Name</label>
                                <input class="form-control" name="name" id="name" placeholder="" type="text" required>
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label>Email</label>
                                <input class="form-control" name="email" id="email" placeholder="" type="email" required>
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label>Subject</label>
                                <input class="form-control" name="subject" id="subject" placeholder="" required>
                            </div>
                        </div>
                    </div>
                    <div class="form-group">
                        <label>Message</label>
                        <textarea class="form-control" name="message" id="message" placeholder="" rows="10" required></textarea>
                    </div>
                    <div class="text-right"><br>
                    
                        
                        <input class="btn btn-primary solid blank button"  id="btn" type="submit" value="submit" name="submit">
                    
                    </div>
    
                </form>

【讨论】:

  • 具体来说你做了什么改变,为什么?不要只提供一大堆代码......解释一下,以便 OP 和其他人可以真正从中学习。
  • 这样更好,谢谢。但我不认为这是问题所在。 OP 说他们在提交表单之后看到“提交未设置”文本。所以我认为问题不在于在初始 GET 请求期间显示消息。看起来他们无论如何都是从不同的脚本(contact.php)提交的,所以在预期的使用中永远不会有 GET 到 mail.php。我猜是 OP 没有正确测试它,或者他们正在测试与问题中显示的不同的代码。此外,他们对 mail() 的使用不正确,但这是一个单独的问题。
猜你喜欢
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多