Php 如何在浏览器刷新时停止向SQL数据库发送输入表单数据?
在每个浏览器上刷新已发送到数据库的旧数据并再次发送。 如果输入名称“title”有一些值,我想在数据库中插入数据 这是我的html表单:Php 如何在浏览器刷新时停止向SQL数据库发送输入表单数据?,php,Php,在每个浏览器上刷新已发送到数据库的旧数据并再次发送。 如果输入名称“title”有一些值,我想在数据库中插入数据 这是我的html表单: <form method="post" enctype="multipart/form-data"> <table> <tr> <td><p>Title: <input type="text" name="title"></p></td> </tr> &
<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"; }
}
?>
对提交的数据执行任何需要的操作后,可以重定向到同一页面,例如:
header('Location: /yourpage/');
exit;
如果有人尝试刷新,它只会刷新内容,但表单不会提交
如果需要显示错误消息或成功确认,则只需将其保存在会话参数中,并在显示消息时取消设置
需要退出
,以便脚本不会继续执行并向选择忽略标头的客户端发送数据
“已发送邮件头”错误
如果在调用header()
之前输出了任何内容,则会出现headers ready sent
错误。如果PHP有任何内容要发送到浏览器,它会自动完成标题并开始输出页面内容。此时,无法设置其他标题。这可能是由输出内容的任何内容引起的,例如,print
,echo
,print\u r
,var\u dump
和其他函数,或者HTML代码,甚至是
标记外的空白
要避免这种情况,您可以:
ob_start()
放在脚本开头附近的某个地方,在任何HTML代码或内容输出之前我将首先使用给定的值查询数据库,这样您就可以确保没有输入重复的条目(您无论如何都要检查该条目) 如果返回任何条目,只需返回即可
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"; }
}
if($db){
$checkQuery=“从表中选择*,其中TITLE=$TITLE和COMMENT=$COMMENT”
$result=mysql_query($checkQuery)或die('Error,query failed');
如果(mysql_num_rows($result)>0){return;}
$query=“插入表格(标题、注释、名称、大小、类型、内容)”。
“值('$title'、'$comment'、'$fileName'、'$fileSize'、'$fileType'、'$content')”;
mysql_query($query)或die('Error,query failed');
mysql_close();
echo“
成功:$title
”;
}否则{echo“Error”;}
}
如果不想这样做,可以使用post,然后重定向,然后获取模式:在窗口加载时使用JavaScript reset()重置表单
window.onload=function(){
var frm=document.getElementsByTagName(form);
frm.reset();
};
您不希望在刷新时重新发送您所说的值?谢谢,但我得到的只是警告消息:无法修改标题信息-标题已发送…对,如果在PHP脚本之前有任何输出,则可能发生这种情况。我会更新答案来澄清这一点。我会因为这个建议而被降价。这个建议有什么问题吗?