Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在浏览器刷新时停止向SQL数据库发送输入表单数据?_Php - Fatal编程技术网

Php 如何在浏览器刷新时停止向SQL数据库发送输入表单数据?

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> &

在每个浏览器上刷新已发送到数据库的旧数据并再次发送。 如果输入名称“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"; }
 } 
?>

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

header('Location: /yourpage/');
exit;
如果有人尝试刷新,它只会刷新内容,但表单不会提交

如果需要显示错误消息或成功确认,则只需将其保存在会话参数中,并在显示消息时取消设置

需要退出
,以便脚本不会继续执行并向选择忽略标头的客户端发送数据

“已发送邮件头”错误

如果在调用
header()
之前输出了任何内容,则会出现
headers ready sent
错误。如果PHP有任何内容要发送到浏览器,它会自动完成标题并开始输出页面内容。此时,无法设置其他标题。这可能是由输出内容的任何内容引起的,例如,
print
echo
print\u r
var\u dump
和其他函数,或者HTML代码,甚至是
标记外的空白

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

  • 对代码进行结构化,以便在输出任何内容之前,在开始执行所有PHP代码

  • 使用输出缓冲,以便PHP收集所有内容并仅在脚本末尾输出。您可以阅读更多关于它的内容(包括访问内容的其他方式),但最简单的方法是将
    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脚本之前有任何输出,则可能发生这种情况。我会更新答案来澄清这一点。我会因为这个建议而被降价。这个建议有什么问题吗?