0

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

    <?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";
    }
    ?>

有输入吗?

4

3 回答 3

2

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

于 2013-02-18T21:49:57.880 回答
1

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

于 2013-02-18T21:49:52.057 回答
0

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

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

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

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

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

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

于 2013-02-18T21:51:06.940 回答