【问题标题】:PHP re-adds value to database after refresh?刷新后PHP重新向数据库添加值?
【发布时间】:2013-02-18 21:47:27
【问题描述】:

这可能听起来很无聊,但我有一个代码,每当我点击提交时,我都会将文件提交到数据库(并读取文件),并且一切正常,除了在我刷新页面后它重新添加最后一个值我已选中。这是问题所在的代码:

    <?php
    mysql_connect("localhost","root","");
    mysql_select_db("a1296556_data1");
    if(isset($_POST['submit'])){
    $name=$_FILES['file']['name'];
    $temp=$_FILES['file']['tmp_name'];
    move_uploaded_file($temp,"uploaded/".$name);
    $url="http://www.bluejayke.com/edit/uploaded/$name";
    }
    ?>
    <form action="index.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" name="submit" value="Upload">
    </form>
    <iframe src='video.php' width=250 height=600></iframe>
    <?php
    if(isset($_POST['submit'])){
    mysql_query("INSERT INTO uploadedvideos(id,name,url) VALUES('','$name','$url')");
    echo "</br>" . $name . " uploaded";
    }
    ?>

有什么意见吗?

【问题讨论】:

  • 刷新已发布的页面时,大多数浏览器都会询问您是否要重新发布。发生这种情况了吗?
  • 题外话,请在将文件类型移动到 Web 目录之前检查它们。你的代码有很多错误!
  • 这真是令人讨厌的代码。 SQL注入问题,悲惨的文件上传处理。完全没有任何错误检查。如果我 TRIED 到,我不认为我可以编写一个不太安全/有问题的脚本。照原样,一个脚本小子只需眨眼即可接管您的服务器。

标签: php database file refresh add


【解决方案1】:

当表单提交时,浏览器会发出一个POST 请求。当您刷新时,浏览器会发出最后一个请求,从而再次提交您的表单。但是,大多数浏览器会在提交表单后刷新之前询问您。为了避免这种情况,you should redirect after a POST.

【讨论】:

  • @BartFriederichs 我知道这一点。更新了我的答案。
【解决方案2】:

这是正确的功能。点击刷新将重新提交表单和所有数据。

【讨论】:

    【解决方案3】:

    首先停止使用 mysql_* 函数,因为它们已被弃用,而是开始使用准备好的语句 PDO 或 MySQLi。

    这样做的一种方式(我的首选方式): 您需要某种随机/唯一的令牌,您需要将其保存在表格中以提交表单。

    在您的表单中隐藏输入字段,如下所示:

       <input type="hidden" value="<?=md5(time())?>" name="my_form_token" />
    

    在更新表之前,您必须使用 select 语句检查表中是否已经存在给定的令牌。如果存在,请不要更新数据库。如果它不存在,则使用令牌和您的文件更新表。

    第二种方法是在提交到其他页面后重定向。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多