【问题标题】:Browser go back button Confirm Form Resubmission浏览器返回按钮 确认表单重新提交
【发布时间】:2015-07-01 19:53:30
【问题描述】:

我的页面上有一个搜索表单。

<form action='' method='post'>
    <input type='text' name='search' />
    <input type='sumit' name='submit' value='submit'/>
</form>

当用户点击表单上的提交按钮时,它应该运行一个 mysql_query 并创建一个指向用户页面的链接。

if(isset($_POST['search'])){
    $add = "city = {'$_POST['search']'}";
}

$res = mysql_query("SELECT * FROM user WHERE {$add}");
        while($rw=mysql_fetch_object($res)){
        echo "<a href=user.php?id={$rw->user_id}?>{$rw->name}</a>";
        }

当我点击链接user.php?id=3 时,它会进入用户页面,一切正常。但是当我在 user.php 页面上单击浏览器的后退按钮时出现问题。然后我有问题回到上一页。 确认重新提交表单。

【问题讨论】:

  • 这对 SQL 注入很开放,在查询中的任何地方使用它之前,请先检查一下您的 $_POST['search']!没有什么能阻止我搜索x'; truncate user; ' 或类似的东西;) 来清除你的数据库。
  • 这只是一个例子。我正在使用 mysql_real_escape_string()
  • 不重复。提交后我无法刷新页面,因为在查询中创建了扩展。

标签: php mysql


【解决方案1】:

更正以下内容:

<input type='sumit' name='submit' value='submit'/>

你写的是type='sumit'而不是type='submit'

【讨论】:

  • 这只是一个例子。在我的代码中,所有的输入都是正确的。问题回到上一页。确认表格重新提交
【解决方案2】:

要不显示“确认表单重新提交”提醒,是否必须将提交(方法)更改为 GET。

<form action='' method='GET'>
    <input type='text' name='search' />
    <input type='sumit' name='submit' value='submit'/>
</form>

...

if(isset($_GET['search'])){
    $res = mysql_query(sprintf("SELECT * FROM user WHERE city='%s'", mysql_real_escape_string($_GET['search']) ));
    while($rw=mysql_fetch_object($res)){
      echo "<a href=user.php?id={$rw->user_id}?>{$rw->name}</a>";
    }
}

【讨论】:

  • 如何防止重新提交确认表单?
  • 当您使用 POST 发送数据时,任何浏览器都会询问您是否要使用后退按钮或刷新页面重新提交该信息。这是标准!所以你必须改变你的方法,而不是 POST,GET!
【解决方案3】:

您应该使用 get 方法而不是 post。大多数浏览器都必须确认帖子重新提交。

P.s.:您不应该将用户输入直接传递到您的 sql 查询中,以防止 sql 注入的风险。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 2016-06-10
    • 2018-02-21
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多