1

在每次浏览器刷新时,已经发送到数据库的旧数据会再次发送。如果输入名称'title'有一些值,我想在数据库中插入数据。

这是我的html表单:

<form method="post" enctype="multipart/form-data">
<table>
<tr>
<td><p>Title: <input type="text" name="title"></p></td>
</tr>
<tr>
<td><p>Comment: <input type="text" name="comment" class="inputtext"></p></td>
</tr>
<tr>
<td>  
<input type="hidden" name="MAX_FILE_SIZE"value="16000000">
<input name="userfile" type="file" id="userfile"> 
</td>
<td width="80"><input name="upload"type="submit" class="box" id="upload" value=" Upload "></td>
</tr>
</table>
</form>

我的PHP代码:

<?php
$con = mysql_connect('','','') or die(mysql_error());
$db = mysql_select_db('db', $con);
if(isset($_POST['upload'])&&$_POST['title']>0)
{
$title = $_POST['title'];
$comment = $_POST['comment'];
$fileName = $_FILES['userfile']['name'];
$tmpName  = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$fileType=(get_magic_quotes_gpc()==0 ? mysql_real_escape_string(
$_FILES['userfile']['type']) : mysql_real_escape_string(
stripslashes ($_FILES['userfile'])));
$fp      = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);
if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
}

if($db){
   $query = "INSERT INTO table (title,comment, name, size, type, content ) ".
 "VALUES ('$title','$comment','$fileName', '$fileSize', '$fileType', '$content')";
mysql_query($query) or die('Error, query failed'); 
mysql_close();
echo "<br>Success: $title <br>";
}else { echo "Error"; }
 } 
?>
4

3 回答 3

2

在对提交的数据执行任何操作后,您可以重定向到同一页面,例如:

header('Location: /yourpage/');
exit;

如果有人尝试刷新它,它只会刷新内容,但不会提交表单。

如果您需要显示错误消息或成功确认,您可以在显示unset消息时将其保存在会话参数和它们中。

exit需要这样脚本不会继续执行并向选择忽略标头的客户端发送数据。

“标头已发送”错误

如果在调用之前已经输出了任何内容header(),你会得到一个headers already sent错误。如果 PHP 有任何内容要发送到浏览器,它会自动完成标题并开始输出页面内容。此时无法设置其他标题。这可能是由任何输出内容引起的,例如,、、、和print其他函数,或者可能是 HTML 代码,甚至是标签外的空白。echoprint_rvar_dump<?php .. ?>

为避免这种情况,您可以:

  1. 构造您的代码,以便在输出任何内容之前,在开始时执行所有 PHP 代码。

  2. 使用输出缓冲,以便 PHP 收集所有内容并仅在脚本末尾输出。您可以在此处阅读有关它的更多信息(包括有关访问内容的其他方式),但最简单的方法是ob_start()在任何 HTML 代码或内容输出之前放置在脚本开头附近的某个位置。

于 2013-04-22T19:17:33.487 回答
0

我会先用给出的值查询数据库,这样你就可以确保你没有输入重复的条目(无论如何你都想检查它..),如果有任何条目返回就返回。

if($db){
$checkQuery = "SELECT * FROM table WHERE TITLE = $title AND COMMENT = $comment"
$result = mysql_query($checkQuery) or die('Error, query failed'); 
if (mysql_num_rows($result) > 0) { return; }

$query = "INSERT INTO table (title,comment, name, size, type, content ) ".
"VALUES ('$title','$comment','$fileName', '$fileSize', '$fileType', '$content')";
mysql_query($query) or die('Error, query failed'); 
mysql_close();
echo "<br>Success: $title <br>";
}else { echo "Error"; }
} 

如果您不想这样做,您可以使用帖子,然后重定向,然后获取模式:说明

于 2013-04-22T19:19:09.340 回答
0

在窗口加载时使用 JavaScript reset() 重置表单。

window.onload=function(){ 
var frm=document.getElementsByTagName(form);
frm.reset();
};
于 2013-04-22T19:47:49.980 回答