0

刷新时表单获取的反感,我已经阅读过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 "";
    }
}
4

2 回答 2

0

问题是您正在使用该post方法提交表单值,因此当您尝试刷新浏览器时会询问您是否发送表单信息,这是浏览器处理已发布信息的默认行为,替代解决方案您的问题是您可以使用get表单属性中的方法,method='get'它会在我们调用的 URL 中附加表单的所有信息,query string并且在 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 "";
    }
} ?>

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


请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

于 2013-08-11T11:28:27.487 回答
0

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

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

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

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

于 2013-08-11T10:24:21.273 回答