【问题标题】:php form submit to itself not workingphp表单提交给自己不起作用
【发布时间】:2016-08-03 05:32:59
【问题描述】:

我有一个 html 表单提交给它自己这里是 html 表单

<div class="col-md-6 contact-grid">
    <form name="submitted" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="POST">

        <div class="styled-input wow slideInUp animated animated" data-wow-delay=".5s">
            <input type="text" id="name" required />
            <label>Name</label>
            <span></span> </div>
        <div class="styled-input wow slideInUp animated animated" data-wow-delay=".5s">
            <input type="email" id="email" required />
            <label>Email</label>
            <span></span> </div>
        <div class="styled-input wow slideInUp animated animated" data-wow-delay=".5s">
            <input type="tel" id="phone" required />
            <label>Phone</label>
            <span></span> </div>
        <div class="styled-input wide wow slideInUp animated animated" data-wow-delay=".5s">
            <textarea id="message" required></textarea>
            <label>Message</label>
            <span></span> </div>
        <div class="send wow shake animated animated" data-wow-delay=".5s">
            <input name="submit" type="submit" value="Send">
        </div>

    </form>
</div>

下面是我处理表单的php代码

    <?php
session_start();
//error_reporting(0);
if(isset($_POST['submitted'])) {    
    $sendto   = "info@davfubgroup.com";
    $usermail = strip_tags($_POST['email']);
    $content  = nl2br($_POST['message']);
    $phone = strip_tags($_POST['phone']);
    $name = strip_tags($_POST['name']);

    $subject  = "New Feedback Message";
    $headers  = "From: " . strip_tags($usermail) . "\r\n";
    $headers .= "Reply-To: ". strip_tags($usermail) . "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html;charset=utf-8 \r\n";
$msg  = "<html><body style='font-family:Arial,sans-serif;'>";
$msg .= "<h2 style='font-weight:bold;border-bottom:1px dotted #ccc;'>New User Feedback</h2>\r\n";
$msg .= "<p><strong>Sent by:</strong> ".$usermail."</p>\r\n";
$msg .= "<p><strong>Message:</strong> ".$content."</p>\r\n";
$msg .= "<p><strong>Name:</strong> ".$name."</p>\r\n";
$msg .= "<p><strong>Phone:</strong> ".$phone."</p>\r\n";
$msg .= "</body></html>";


if(mail($sendto, $subject, $msg, $headers)) {
    $_SESSION['errormsg'] = "Mail Sent. Thank you we will contact you shortly.";
    echo '<center><p style="color:green">' . $_SESSION['errormsg']. '</p></center>';

} else {
    $_SESSION['errormsg'] = "Mail not Sent. Try Again.";
    echo '<center><p style="color:red">' . $_SESSION['errormsg']. 

'</p></center>';
    }
}
?>

但我的问题是提交表单时没有显示消息,也没有错误消息请帮助

【问题讨论】:

    标签: php html forms


    【解决方案1】:

    只需将输入的名称更改为

     <input name="submitted" type="submit" value="Send">
    

    会有用的

    【讨论】:

    • 请忽略我的第一条消息,它现在正在工作,在页面上进行了一次硬刷新,我再试一次,它可以正常工作,但提交时会显示这个通知:未定义索引:C 中的电子邮件: \xampp\htdocs\dav2\contactform.php 在第 7 行,最后显示成功 Notice: Undefined index: message in.... Notice: Undefined index: phone in... Notice: Undefined index: name in ... .. 最后显示成功消息
    • 我知道我可以用 //error_reporting(0) 删除错误;但我想修复它
    • 我需要在你点击提交按钮后查看,因为我没有得到你,所以显示了什么,对不起。
    【解决方案2】:

    它不起作用,因为您在询问 $_POST 是否有一个名为 submitted 的键,但没有具有该名称的输入元素。

    相反,您可以通过询问来检查$_POST中是否有任何数据:

    if (count($_POST) > 0)
    

    【讨论】:

      【解决方案3】:

      您的帖子检查应该是:strtoupper($_SERVER['REQUEST_METHOD']) === 'POST' 而不是:isset($_POST['submitted'])。也不要使用count($_POST),因为用户可能会发布一个空表单(也许表单只是一个用户没有选中的复选框)。

      【讨论】:

        【解决方案4】:

        当您提交表单时,$_POST 中的每个字段都可用,但表单标签上的 name 属性未提交,并且在您提交表单时完全被 PHP 忽略(顺便说一句,不确定)。

        在给定的示例中,$_POST 将仅包含一个键 submit,因为这是唯一具有 name 属性的输入元素。

        在您的代码中,假设您已提交表单,$_POST['submitted'] 未定义,因此 isset($_POST['submitted']) 永远不会被评估为 true

        您还需要在 PHP 中验证用户输入,required 属性不以任何方式保证服务器端数据的有效性。您可以 - 至少 - 检查字段是否为空和/或使用 PHP 的本机函数 filter_var() 提供的电子邮件是否有效:

        if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false){
            //   The provided email is invalid
        };
        

        您应该考虑使用&lt;span style="text-align: center;"&gt;&lt;/span&gt; 而不是无效的&lt;center&gt;

        希望对你有帮助。

        【讨论】:

          【解决方案5】:

          虽然已经回答,但在您的 isset() 中您使用的是表单的名称,因为您的其余代码可以在使用初始 isset() 时处理数据的实际有用性,您应该使用分配给您的名称提交按钮,在本例中为if(isset($_POST['submit']){} 然后输入其余代码,这是从错误中吸取教训的方法之一,在这种情况下使用整个表单的名称将无济于事,请参阅表单的各个输入元素 祝你好运,希望这会有所帮助

          【讨论】:

            猜你喜欢
            • 2011-08-15
            • 2012-08-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-26
            • 2021-08-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多