这听起来可能很糟糕,但我有一个代码,每当我点击submit时,它就会将文件提交到数据库(并读取文件),而且一切都很好,除了在刷新页面后,它会重新添加我选择的最后一个值。以下是问题所在的代码:
<?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";
}
?>
有什么意见吗?
当表单提交时,浏览器会发出POST
请求。刷新时,浏览器会发出最后一个请求,从而再次提交表单。然而,大多数浏览器在提交表单后刷新之前都会询问您。为了避免这种情况,您应该在POST后重定向。
这是正确的功能。点击刷新将重新提交表单及其所有数据。
首先停止使用mysql_*函数,因为它们已经被弃用,而是开始使用准备好的语句PDO或MySQLi。
一种方法(我喜欢的方法):您需要某种随机/唯一的令牌,并且需要将其保存在表格中以进行表单提交。
在您的表单中隐藏了如下输入字段:
<input type="hidden" value="<?=md5(time())?>" name="my_form_token" />
在更新表之前,必须使用select语句检查表中是否已经存在给定的令牌。若存在,请不要更新数据库。如果它不存在,那么用令牌和文件更新表。
第二种方法是在提交到其他页面后重定向。