【问题标题】:Form get's resent on refresh表单在刷新时重置
【发布时间】:2013-08-11 10:20:25
【问题描述】:

Form get 在刷新时重新发送,我读过关于 header("Location:my_page.php") unset($_POST) 的信息,但我不确定将它放在哪里。

这是我们的脚本,它可以根据需要运行,但它会在页面刷新时不断重新发送(Chrome 浏览器一遍又一遍地发出警报),有人可以修复代码并向我像 2 岁的孩子解释。

<form action='thi_very_same_page.php' method='post'>
Search for Christian Movies <input type='text' name='query' id='text'  />
<input type='submit' name='submit' id='search' value='Search' />
</form>

<?php
if (isset($_POST['submit'])) 
{
    mysql_connect("localhost", "root", "toor") or die("Error connecting to database: " . mysql_error());
    mysql_select_db("db_name") or die(mysql_error());
    $query = $_POST['query'];

    $min_length = 2;
    if (strlen($query) >= $min_length) 
    {
        $query = htmlspecialchars($query);
        $query = mysql_real_escape_string($query);
        echo "";

        $result = mysql_query("SELECT *, DATE_FORMAT(lasteditdate, '%m-%d-%Y') AS lasteditdate  FROM movies WHERE (`moviename` LIKE '%" . $query . "%') OR (`year` LIKE '%" . $query . "%')") or die(mysql_error());

        if (mysql_num_rows($result) > 0) 
        {
            while ($results = mysql_fetch_array($result)) 
            {
                echo "";
            }
        }
        else
        {
            echo "";
        }
    } 
    else 
    {
        echo "";
    }
}

【问题讨论】:

  • 不要使用 mysql* 而是使用 PDO。
  • 我对整个 php 脚本都是新手,甚至不知道如何使用这个简单的脚本,现在 PDO 似乎是一个全新的故事:/
  • 您的问题不清楚尝试详细解释您的问题,目前您的代码没有回应
  • 我已经编辑了主要问题,添加了输入表单,现在的问题是:如果我的大学同学,请输入标准(电影名称),如果按 f5,页面警报(页面您正在寻找您输入的已使用信息。返回该页面可能会导致重复执行任何操作,您要继续吗?)...这就是发生的情况:(

标签: php mysql forms page-refresh


【解决方案1】:

如果您的意思是表单数据在刷新时再次提交,请检查此方法

http://www.andypemberton.com/engineering/the-post-redirect-get-pattern/

您将标头设置为 header('HTTP/1.1 303 See Other');

数据不会被缓存,所以当页面刷新时表单数据不会被再次提交!

【讨论】:

  • 感谢链接,我的英文不太好,需要时间阅读整个页面,现在关于设置为 HTTP/1 的标头,怎么做?,谢谢:*跨度>
  • 你写 header('HTTP/1.1 303 See Other');在将数据重定向到同一页面之前处理数据的代码中
【解决方案2】:

问题是您正在使用post 方法来提交表单值,因此当您尝试刷新浏览器时会询问您是否发送表单信息,这是浏览器处理已发布的默认行为信息,您的问题的替代解决方案是您可以使用get 方法,如表单属性method='get' 它会在我们称为query string 的URL 和PHP 代码中附加表单的所有信息正在访问$_POST 中的表单值,但是当使用get 方法时,表单值现在将出现在$_GET 方法中这些方法称为请求方法并且是PHP 的全局变量,现在当您尝试刷新时它不会要求您重新发送信息,因为信息现在驻留在 URL 中

<form action='thi_very_same_page.php' method='get'>
Search for Christian Movies <input type='text' name='query' id='text'  />
<input type='submit' name='submit' id='search' value='Search' />
</form>

<?php
if (isset($_GET['submit'])) 
{
    mysql_connect("localhost", "root", "toor") or die("Error connecting to database: " . mysql_error());
    mysql_select_db("db_name") or die(mysql_error());
    $query = $_GET['query'];

    $min_length = 2;
    if (strlen($query) >= $min_length) 
    {
        $query = htmlspecialchars($query);
        $query = mysql_real_escape_string($query);
        echo "";

        $result = mysql_query("SELECT *, DATE_FORMAT(lasteditdate, '%m-%d-%Y') AS lasteditdate  FROM movies WHERE (`moviename` LIKE '%" . $query . "%') OR (`year` LIKE '%" . $query . "%')") or die(mysql_error());

        if (mysql_num_rows($result) > 0) 
        {
            while ($results = mysql_fetch_array($result)) 
            {
                echo "";
            }
        }
        else
        {
            echo "";
        }
    } 
    else 
    {
        echo "";
    }
} ?>

希望这足以向您解释有关表单提交的一件事,我建议您深入了解以下内容


Please, don't use mysql_* functions in new code。它们不再维护and are officially deprecated。看到red box?改为了解 prepared statements,并使用 PDOMySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial

【讨论】:

    猜你喜欢
    • 2017-12-31
    • 2011-08-14
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多