2014-03-25 168 views
0

我想製作一個用於製作新聞項目的圖像驗證腳本。由於我已經搜索了其他例子,我的PHP知識並不是很好的實現它。PHP圖像驗證腳本

HTML:

<input class="form-control contact-control" type="hidden" name="MAX_FILE_SIZE" value="1000000"> 
<input class="form-control contact-control" type="file" name="image" id="image"> 

PHP:

$news_item = $_POST['item']; 
$news_date = $_POST['date']; 
$news_text = $_POST['text']; 
$max_file_size = 1000000; 
$path = ("../../../database/img/"); 
$news_image = $_FILES['image']['name']; 
$image_size = $_FILES['image']['size']; 
$image_type = $_FILES['image']['type']; 

    if(!empty($news_item) && !empty($news_date) && !empty($news_text) && !empty($news_image)) { 
     if(($image_type == 'image/jpeg') || ($image_type == 'image/png') || ($image_type == 'image/gif') && ($image_size > 0) && ($image_size <= $max_file_size)) { 
      if($_FILES['file']['error'] == 0) { 
       $target = $path . $news_image; 
       if(move_uploaded_file($_FILES['image']['tpm_name'], $target)) { 
        $query_news = "INSERT INTO news(Item, Date_item, News_text, Photo) VALUES('".$news_item."', '".$news_date."', '".$news_text."', '".$uploaded_dir.$news_image."')"; 
        mysql_query($query_news); 
       } else { 
        $update_news = "UPDATE news SET Item = '".$news_item."', Date_item = '".$news_date."', News_text = '".$news_text."', Photo = '".$uploaded_dir.$news_image."'"; 
        mysql_query($update_news); 
       } 
      } 
     } else { 
      echo 'The screenshot must be a GIF, JPEG or PNG image no ' . 'less than ' . ($max_file_size/1000000) . 'mb in size.'; 
     } 

     @unlink($_FILES['image']['tmp_name']); 

    } else { 
     echo 'Please enter alll of the information.'; 
    } 

沒有添加新的信息列到數據庫中,也保存沒有圖像。因爲我懷疑其中一條if語句是錯誤的。

+0

嘗試改變這兩個' ' 「$ uploaded_dir。$ news_image。」' 去「'」。$ target。「''' –

+0

您是否使用了表單標籤的enctype屬性

Gowri

+0

另外,'$ uploaded_dir'尚未定義。所以你也可以試試''「。$ target。$ news_image」''但是中間那個點可能會導致問題。 –

回答

0

首先,您不需要刪除臨時文件@unlink($_FILES['image']['tmp_name']);。只要刪除這一行。

其次,腳本會暴露給SQL注入,因爲您直接使用POST值而無需過濾。

三,您在這裏輸入:if(move_uploaded_file($_FILES['image']['tpm_name'], $target)) {。數組密鑰的正確名稱是tmp_name

+0

我將不得不使用htmlentities函數來轉義SQL注入?感謝您的幫助。 – kay

+0

更好地使用mysql_real_escape_string()函數來轉義MySQL查詢參數 – Akuma

0

您有一個錯字。

($_FILES['image']['tpm_name'], $target) 
        ^^^^^^^^ 

將其更改爲($_FILES['image']['tmp_name'], $target)

但是,這$uploaded_dir仍然保持未其中最有可能的似乎應該是$target

+0

感謝您的幫助,錯字是問題所在。 – kay

+0

不客氣。 @kay –