2011-02-15 41 views
0

我有一个脚本,执行一些简单的编辑工作正常,问题是即使一次图像上传成功,我刷新页面相同的图像正在创建,即使它不是从在表单提交文件输入:

<form method="post" enctype="multipart/form-data" id="<?php echo $_SERVER['PHP_SELF']; ?>"> 
        <fieldset id="product-images"> 
        <input type="file" id="image" name="image" /> 
        <input type="submit" name="picture" value="upload Picture"/> 
</form> 

这里的PHP

<?php if(isset($_POST['picture']) && !empty($_FILES)){(uploadImage($_FILES['image'])} ;?> 

function uploadImage($image) 
{ 
    $id = intval($_GET['id']); 
    $size = 75; // the thumbnail height 

    $filedir = '../img/products/'; // the directory for the original image 
    $thumbdir = '../img/products/thumbs/'; // the directory for the thumbnail image 
    $prefix = 'small_'; // the prefix to be added to the original name 

    $maxfile = '2000000'; 
    $mode = '0666'; 

    $userfile_name = $image['name']; 
    $userfile_tmp = $image['tmp_name']; 
    $userfile_size = $image['size']; 
    $userfile_type = $image['type']; 

    if (isset($image['name'])) 
    { 
     $prod_img = $filedir.$userfile_name; 
     $url = strstr($userfile_name, '.', true); 
     $type = strstr($userfile_name, '.'); 


     $prod_img_thumb = $thumbdir.$prefix.$userfile_name; 
     move_uploaded_file($userfile_tmp, $prod_img); 
     chmod ($prod_img, octdec($mode)); 

     $sizes = getimagesize($prod_img); 
     $width = $size[0]; 
     $height = $size[1]; 
     if($width > $height) $biggestSide = $width; 
     else $biggestSide = $height; 

     //The crop size will be half that of the largest side 
     $cropPercent = 1; 
     $cropWidth = $biggestSide*$cropPercent; 
     $cropHeight = $biggestSide*$cropPercent; 

     //getting the top left coordinate 
     $c1 = array("x"=>($width-$cropWidth)/2, "y"=>($height-$cropHeight)/2); 

     $aspect_ratio = $sizes[1]/$sizes[0]; 

     if ($sizes[1] <= $size) 
     { 
      $new_width = $sizes[0]; 
      $new_height = $sizes[1]; 
     }else{ 
      $new_height = $size; 
      $new_width = abs($new_height/$aspect_ratio); 
     } 

     $destimg=ImageCreateTrueColor($new_width,$new_height) 
      or die('Problem In Creating image'); 
     $srcimg=ImageCreateFromJPEG($prod_img) 
      or die('Problem In opening Source Image'); 
     if(function_exists('imagecopyresampled')) 
     { 
      imagecopyresampled($destimg,$srcimg,0,0,$c1['x'],$c1['y'],$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) 
      or die('Problem In resizing'); 
     }else{ 
      Imagecopyresized($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) 
      or die('Problem In resizing'); 
     } 
     ImageJPEG($destimg,$prod_img_thumb,90) 
      or die('Problem In saving'); 
     imagedestroy($destimg); 
     imagedestroy($srcimg); 

     insertURL($id, $url, $type); 

    } 


} 
+2

如果刷新页面,则表单将被重新提交。大多数浏览器都会问这个问题。一个常见的解决方案是在提交完成后重定向到不同的页面,甚至是同一页面,这将阻止重新提交。 – Gazler 2011-02-15 14:27:41

回答

2

您刷新哪个页面? “你上传完成”一个?这是理由 - 这是上传的结果页面。刷新一个会给你通常的“这个页面是POST的结果?重做POST?”键入警告,它会重新提交整个表单,包括文件。

要防止刷新重新上传,必须在表单处理代码完成后将其重定向到其他地方。

<?php 

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 

    // handle the upload 

    if (/*form processed OK*/) { 
     header("Location: successpage.php"); 
     exit(); 
    } else { 
     // report any error conditions 
    } 
} 

// show the form 

?> 
0

当您刷新页面时,表单将被重新发送,并且所有事情都会再次发生。处理表单的一般规则是在脚本处理完提交表单后将用户重定向到另一个页面。然后,即使他们重新加载页面,他们也不会重新提交任何内容,并且将避免这样的问题