刷新页面后发布的文件

时间:2016-11-02 19:20:20

标签: php

编辑:标记为重复,但是当我尝试时,帖子中的解决方案对我的情况没有帮助。现在不想用ajax做,所以我只使用window.location来重定向。我丢失了上传文件的名称,但我宁愿通过某种方式处理这些文件。

我有一个表单上传文件,我发布到同一页面,提交文件后上传,但如果我刷新文件重新上传。我试图在上传脚本的末尾将$ _POST和$ _FILES设置为空白数组,但每次都会保留发布数据。还尝试添加标题,但是当我尝试时它们已经发送了在脚本开头使用ob_start,没有变化。

我的表格和表格看起来像这样

<table name="doctor_file_table" width="100%">
            <tr>
                <td><b>Name</b></td>
                <td><b>Type</b></td>
                <td><b>Size (bytes)</b></td>
                <td><b>Created</b></td>
               <td><a href='path_to_file' download =''>Download</a></td>
                <td><button id ='id#' onClick='deleteFile(this)' type='button'>Delete</button></td>
            </tr>

<form action="" enctype="multipart/form-data" method="post">
    <div>
        <label for="upload">Add Attachments:</label>
        <input id="upload" name="upload[]" type="file" multiple="multiple"/>
    </div>
        <p><input type="submit" name="submit" value="Submit"></p>
    </form>'

这是上传脚本:

if(isset($_POST['submit']) && $_POST['uploaded'] == 1){
echo $_POST['uploaded'];
if(count($_FILES['upload']['name']) > 0){
    //Loop through each file
    for($i=0; $i<count($_FILES['upload']['name']); $i++) {
      //Get the temp file path
        $tmpFilePath = $_FILES['upload']['tmp_name'][$i];

        //Make sure we have a filepath
        if($tmpFilePath != ""){

            //save the filename
            $shortname = $_FILES['upload']['name'][$i];
            //save the url and the file
            $filePath = "/var/www/html/doctor_files/" . date('d-m-Y-H-i-s').'-'.$_FILES['upload']['name'][$i];
            $fullname = substr($filePath,27);
            //Upload the file into the temp dir
            if(move_uploaded_file($tmpFilePath, $filePath)) {

                $files[] = $shortname;
            $sql = 'insert into '.TABLE_DOCTOR_FILES.'(shortname,fullname,filepath,type,size,doctor_id) VALUES("'.$shortname.'", "'.$fullname.'", "'.$filePath.'", "'.$_FILES["upload"]["type"][$i].'",'.$_FILES["upload"]["size"][$i].',"'.$doctor_id.'")';                    
            database_void_query($sql);

             //use $shortname for the filename
                //use $filePath for the relative url to the file

            }
          }
    }
}

//show success message
echo "<h1>Uploaded:</h1>";    

if(is_array($files)){
    echo "<ul>";
    foreach($files as $file){
        echo "<li>$file</li>";
    }
    echo "</ul>";
}

}

1 个答案:

答案 0 :(得分:1)

请求标头将存储您的数据。因此,如果您刷新,数据将再次发回。

你有3个解决方案:

  1. 将您的代码拆分为2个不同的页面

  2. 使用ajax(当然这需要将页面拆分为1)

  3. 尝试重定向到另一个页面,然后再次重定向到您的表单页面。

  4. 要使用第三种方式,您可以尝试:

    的index.php

    <html>
    <head><title>asdas</title></head>
    <body><!--i give you header to know this is will give error header or not-->
    <?php
    if(isset($_POST['submit']) && $_POST['uploaded'] == 1){
    echo $_POST['uploaded'];
    if(count($_FILES['upload']['name']) > 0){
        //Loop through each file
        for($i=0; $i<count($_FILES['upload']['name']); $i++) {
          //Get the temp file path
            $tmpFilePath = $_FILES['upload']['tmp_name'][$i];
    
            //Make sure we have a filepath
            if($tmpFilePath != ""){
    
                //save the filename
                $shortname = $_FILES['upload']['name'][$i];
                //save the url and the file
                $filePath = "/var/www/html/doctor_files/" . date('d-m-Y-H-i-s').'-'.$_FILES['upload']['name'][$i];
                $fullname = substr($filePath,27);
                //Upload the file into the temp dir
                if(move_uploaded_file($tmpFilePath, $filePath)) {
    
                    $files[] = $shortname;
                $sql = 'insert into '.TABLE_DOCTOR_FILES.'(shortname,fullname,filepath,type,size,doctor_id) VALUES("'.$shortname.'", "'.$fullname.'", "'.$filePath.'", "'.$_FILES["upload"]["type"][$i].'",'.$_FILES["upload"]["size"][$i].',"'.$doctor_id.'")';                    
                database_void_query($sql);
    
                 //use $shortname for the filename
                    //use $filePath for the relative url to the file
    
                }
              }
        }
    }
    
    //show success message
    echo "<h1>Uploaded:</h1>";    
    header('Location: http://localhost/stackoverflow/success.php');
    if(is_array($files)){
        echo "<ul>";
        foreach($files as $file){
            echo "<li>$file</li>";
        }
        echo "</ul>";
    }
    
    ?>
    
    
    <table name="doctor_file_table" width="100%">
                <tr>
                    <td><b>Name</b></td>
                    <td><b>Type</b></td>
                    <td><b>Size (bytes)</b></td>
                    <td><b>Created</b></td>
                   <td><a href='path_to_file' download =''>Download</a></td>
                    <td><button id ='id#' onClick='deleteFile(this)' type='button'>Delete</button></td>
                </tr>
    
    <form action="" enctype="multipart/form-data" method="post">
        <div>
            <label for="upload">Add Attachments:</label>
            <input id="upload" name="upload[]" type="file" multiple="multiple"/>
        </div>
            <p><input type="submit" name="submit" value="Submit"></p>
        </form>
    

    success.php

    <html><head><title>redirect</title></head>
    <body><!--i give you header to know this is will give error header or not-->
    <?php
    echo "<p>Your upload is success</p>";   
    echo "<p>You will redirect back</p>";
    echo "<p><a href=\"index.php\">or press this to redirect directly</a></p>";
    ?>
    <script>
    setTimeout(function () {
           window.location.href = "index.php"; 
        }, 3000);
    
    </script>
    </body></html>