【问题标题】:in php, why input form when submit it takes 2 times pressed在php中,为什么在提交时输入表单需要按下2次
【发布时间】:2015-01-21 02:26:55
【问题描述】:
    <?php
        if ($_POST['submit']) {
            mysql_connect ("localhost", "root", "swt") or die ('Error: ' . mysql_error());
            mysql_select_db("db") or die ('Data error:' . mysql_error());
            $text = mysql_real_escape_string($_POST['comments']); 
            $query="INSERT INTO greetings (msg) VALUES ('$text')";
            mysql_query($query) or die ('Error updating database' . mysql_error());
            $id= mysql_insert_id();
            $url = "preview.php?id=".$id;
        }
    ?>
<form method="post" action="<? echo $url ?>" enctype="multipart/form-data" >
    <textarea name="comments" placeholder="please input your message"></textarea>
    <input name="submit" type="submit" value="submit" />
</form>

你好,对不起,我是 PHP 新手。 我想问一下,为什么我提交的时候必须按2次才能进入preview.php

谢谢。

【问题讨论】:

    标签: php forms submit


    【解决方案1】:

    第一次$url 为空,因此浏览器请求相同的页面,然后更改 $url,然后注入表单,以便下一篇文章将重定向到您的 preview.php 文件。
    刚刚发送了重定向的标头。

    header("Location: /preview.php?id=".$id);

    原来如此:

      <?php
            if ($_POST['submit']) {
                mysql_connect ("localhost", "root", "swt") or die ('Error: ' . mysql_error());
                mysql_select_db("db") or die ('Data error:' . mysql_error());
                $text = mysql_real_escape_string($_POST['comments']); 
                $query="INSERT INTO greetings (msg) VALUES ('$text')";
                mysql_query($query) or die ('Error updating database' . mysql_error());
                $id= mysql_insert_id();
                $url = "preview.php?id=".$id;
                header("Location: $url");
            }
        ?>
    <form method="post" enctype="multipart/form-data" >
        <textarea name="comments" placeholder="please input your message"></textarea>
        <input name="submit" type="submit" value="submit" />
    </form>
    

    当您想将请求发送到同一页面时,请勿使用操作。
    (我假设你的 sn-p 中的 php 部分是同一个文件)

    同样要发送重定向,您需要在发送标头之前没有 html 输出

    【讨论】:

    • 实际上我有 2 页,asd.php 中的表单。目标是preview.php。所以我必须有一个行动表格是吗?无论如何,我不知道如果我把我的主机它仍然不起作用。可以帮忙吗,谢谢
    • 可能的问题是:在 location geader 中你提供了一个域之后的绝对路径,其次是 preview.php 使用了 $_POST 全局变量,如果是这样,你应该重新考虑你的发布策略,最简单的方法是使用会话变量:标头有效,例如 /preview.php 会将 rq 传递给 example.com/preview.php,如果没有斜杠,它将向用户发送 CURRENT_BROWSER_ADDRESS/preview.php。我希望它有帮助:)
    【解决方案2】:

    先把&lt;?改成&lt;?phplike..

    <form method="post" action="<?php echo $url ?>" enctype="multipart/form-data" >
    <textarea name="comments" placeholder="please input your message"></textarea>
    <input name="submit" type="submit" value="submit" />
    

    我喜欢这样..

    第二次打开firebug,点击按钮,看看你遇到了什么错误..页面可能有错误,或者检查你的请求是否在发起第一次点击。 还要检查$url 是否不为空,在第一次点击时..

    【讨论】:

      【解决方案3】:

      更改&lt;?= $url?&gt; to &lt;?php echo $ url;?&gt;.

      您的服务器没有启用 short_open_tags。

      【讨论】:

        【解决方案4】:

        您的表单操作值($url)是在第一次提交后生成的,这意味着在第一次提交点击时它是空的。 更好的解决方案是将操作值保留为空,并且在发布逻辑中,只构建 $url 值,您可以将用户转发到 $url:

        ...
          $id= mysql_insert_id();
          $url = "preview.php?id=".$id;
          header('Location: '.$url);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多