【问题标题】:$_POST form not submitting data [duplicate]$_POST 表单未提交数据[重复]
【发布时间】:2017-12-29 01:34:37
【问题描述】:

所以我正在尝试构建一个非常简单的(半)电子邮件系统,仅用于练习和学习。

所以我的导航栏在正文(右侧)上加载了用户个人信息。导航栏内有可点击的链接,允许用户撰写、阅读消息等。

链接附加了一个PHP参数,如下所示。

<a href="body.php?action=compose">

在下图中这只是一个页面加载,所以出于调试目的,我使用 get not set,因为没有采取任何操作(点击链接)

现在当用户想要撰写电子邮件并点击撰写时,会发生以下情况:

我的逻辑

在这种情况下,我通过附加到 url 的参数得到用户想要采取的操作 compose,因此出现了一个允许用户撰写/发送消息给另一个用户的表单,如下所示:

我通过以下代码实现了这一点:

if($_SERVER['REQUEST_METHOD'] == 'GET'){
                if(isset($_GET['action'])){
                 //get which action user wants to take in this example compose email
                    $action = $_GET['action'];
                    if($action == 'compose'){
                        ?>
                        <form name="composeMsg" method="post" id="composeMsg" action="">
                        <input type="text" name="receipnt" placeholder="Receipnt" id="from">
                        <div class="break"></div>
                        <input type="text" name="subject" placeholder="Subject" id="subject">
                       <div class="break"></div>
                        <textarea placeholder="Message" name="msgBody" style="width: 350px; height: 200px">
                        </textarea>
                        <div class="break"></div>
                            <button type="submit" name="sendMsg" class="btn btn-danger">SEND</button>
                        </form>
                <?php
                        }
                       //submit button has been clicked
                        if(isset($_POST['sendMsg'])){
                         //execute script to send msg
                        $check = $msgClass->composeMsg('14', $_POST['receipnt'], $_POST['subject'], $_POST['msgBody'], date('Y-m-d') );
                        if($check ==  true){
                            echo '<h1>MSG SENT!</h1>';
                        }
                        elseif($check == false){
                            echo '<h1>OOPS...SOMETHING WENT WRONG!</h1>';
                        }
                    }//isset msgSent

我的问题

发送消息时我得到的只是一个重新加载的屏幕。没有错误,没有警告,也没有脚本执行,所以我真的不知道从哪里开始调试。

我尝试只使用电子邮件表单和我的composeMsg() 方法创建一个测试页面,该方法有效并将数据插入到数据库中。但是当我在我的主页中实现它时,当点击提交时页面只是重新加载而没有任何操作(如前所述)。

我尝试将表单方法设置为 $_GET 而不是 $_POST 但结果仍然相同

任何帮助表示赞赏!

附加信息

我发送消息的方法如下所示,这是正确的:

 public function composeMsg($userID, $toUser, $subject, $msg, $senton ){
        $db = DB::getInstance();
        $sql = "INSERT INTO messages (userID, fromID, subject, body, senton) values (:userID, :toUser, :subject, :msg, :senton )";
        $stmnt = $db->prepare($sql);

        $stmnt->bindValue(':userID', $userID);
        $stmnt->bindValue(':toUser', $toUser);
        $stmnt->bindValue(':subject', $subject);
        $stmnt->bindValue(':msg', $msg);
        $stmnt->bindValue(':senton', $senton);

        $stmnt->execute();

        if($stmnt->rowCount() > 0){
            return true;
        }
        else{
            return false;
        }
    }

【问题讨论】:

  • 你是如何使用 composeMsg() 方法的?您还为此使用了一个类。轮回通常会因为停止执行而静默失败。代码不足。
  • 现在看到新的 cmets,错误报告应该会向您抛出未定义的索引错误,因此您的系统可能未设置为默认捕获和显示。 php.net/manual/en/function.error-reporting.php 这样做,它现在使用您的原始代码向您展示了什么?
  • 我在第一条评论中打错了:"Reurns",应该读作 "Returns"。那么,关于错误报告?再次;这应该会给你一个未定义的索引。

标签: php html ajax forms


【解决方案1】:

提交表单会将您带到您的页面,而无需任何 GET 请求。

<form name="composeMsg" method="post" id="composeMsg" action="">

既然你用这个包装你的 POST 数据提交:

if($_SERVER['REQUEST_METHOD'] == 'GET'){

它永远不会到达那里。

【讨论】:

  • 感谢您的回答,那么您有什么建议可以解决这个问题...?
  • OP 声明:“我尝试将表单方法设置为 $_GET 而不是 $_POST,但结果仍然相同” - 你看到那部分了吗?
  • @Fred-ii- 请问它有什么问题,我只是在尝试解决问题。你从错误中学习是对的
  • @TimothyCoetzee 在您的问题下查看我的第二条评论。
【解决方案2】:

问题是当您单击表单POST 上的提交时,将生成方法,因此您的条件if($_SERVER['REQUEST_METHOD'] == 'GET'){ 未执行。在您的代码中进行以下更改

if($_SERVER['REQUEST_METHOD'] == 'GET'){
    if(isset($_GET['action'])){
     //get which action user wants to take in this example compose email
        $action = $_GET['action'];
        if($action == 'compose'){
            ?>
            <form name="composeMsg" method="post" id="composeMsg" action="">
            <input type="text" name="receipnt" placeholder="Receipnt" id="from">
            <div class="break"></div>
            <input type="text" name="subject" placeholder="Subject" id="subject">
           <div class="break"></div>
            <textarea placeholder="Message" name="msgBody" style="width: 350px; height: 200px">
            </textarea>
            <div class="break"></div>
                <button type="submit" name="sendMsg" class="btn btn-danger">SEND</button>
            </form>
    <?php
        }
    }
}
//submit button has been clicked
if(isset($_POST['sendMsg'])){
 //execute script to send msg
    $check = $msgClass->composeMsg('14', $_POST['receipnt'], $_POST['subject'], $_POST['msgBody'], date('Y-m-d') );
    if($check ==  true){
        echo '<h1>MSG SENT!</h1>';
    }
    elseif($check == false){
        echo '<h1>OOPS...SOMETHING WENT WRONG!</h1>';
    }
}//isset msgSent

【讨论】:

  • 繁荣 非常感谢你,aaarghh 这么小的问题花了我 1 小时 :(
  • 时间到了会接受
  • @TimothyCoetzee 我很困惑。如果这对您有用,那么如果您按照此处所述将表单方法更改为 GET “我已尝试将表单方法设置为 $_GET 而不是 $_POST 但结果仍然相同” 应该可以使用你。 !
  • @Accountant 不,我把它改回 $_POST
猜你喜欢
  • 2018-10-08
  • 2011-01-09
  • 1970-01-01
  • 2013-10-21
  • 2012-08-03
  • 2016-08-16
  • 2013-03-05
  • 2015-03-14
  • 1970-01-01
相关资源
最近更新 更多