2012-06-25 202 views
1

我有上傳文件的問題。這裏是我的形式:php上傳文件

<form enctype="multipart/form-data" action="transact.php" method="POST"> 
<table> 
<tr> 
<td>Nadpis:</td> 
<td><input type="text" id="title" name="title" value="<?php echo  htmlspecialchars($title); ?>" /></td></tr> 
<tr> 
<td>Text článku:</td> 
<td><textarea id="text" name="text" cols="55" rows="20"><?php if(!empty($a_text)) { echo htmlspecialchars($a_text); } ?></textarea></td> 
</tr><tr> 
<td>Obrázok k článku:</td> 
<td><input type="file" name="uploadfile" /></td></tr> 
<tr><td> </td> 
<td> 
<?php 
if ($_SESSION['access_level'] < 2) { 
echo '<input type="hidden" name="user_id" value="'. $user_id. '"/>'; 
} 

if(empty($article_id)) { 
echo '<input type="submit" name="action" value="Odoslat" />'; 
} else { 
echo '<input type="hidden" name="article_id" value="' .$article_id. '"/>'; 
echo '<input type="submit" name="action" value="Ulozit" />'; 
} 
?> 
</td> 
</tr> 
</table> 
</form> 

當我運行腳本transact.php我得到錯誤:注意:未定義指數:uploadfile在E:\ XAMPP \ htdocs中\首都\ transact.php上線138 當I型的print_r($ _ FILES)我得到的只是陣列()在php.ini文件最大上傳大小的 值設置爲128 MB

我辦理腳本:

 case 'Odoslat': 
     session_start(); 
     $text = (isset($_POST['text']))? $_POST['text']: ''; 
     $nadpis = (isset($_POST['title']))? $_POST['title']: ''; 
     $image = (isset($_FILES['uploadfile']))?   imagecreatefromjpeg($_FILES['uploadfile']['tmp_name']): ''; 


     print_r($_FILES); // it writes Array() 
     if(isset($_SESSION['id']) && !empty($nadpis) && !empty($text) &&   $_FILES['uploadfile']['error'] == UPLOAD_ERR_OK) //here it indicates error 
     { 
     $ext = '.jpg'; 
     $query = 'INSERT INTO articles (article_id, user_id, a_text, title, submit_date) 
     VALUES(NULL, '. $_SESSION['id']. ', "'. mysql_real_escape_string($text, $db). '", "'. 
     mysql_real_escape_string($nadpis, $db). '", "' . date('Y-m-d H:i:s'). '")'; 
     mysql_query($query, $db) or die(mysql_error($db)); 
     $clanok_id = mysql_insert_id($db); 
     $query = 'INSERT INTO foto (foto_id, article_id) 
     VALUES (NULL, '. $clanok_id. ')'; 
     mysql_query($query, $db) or die(mysql_error($db)); 
     if(!empty($image)) 
     { 
     $last_id = mysql_insert_id($db); 
     $image_name = $last_id. $ext; 
     imagejpeg($image, $dir. '/'. $image_name, 100); 
     } 
     else 
     { 
     $last_id = mysql_insert_id($db); 
     $image_name = 'caps.jpg'; 
     } 
     $priecinok = 'images/'; 
     $place = $priecinok. $image_name; 
     $query = 'UPDATE foto 
     SET foto_path = "'. $place. '" WHERE foto_id = '. $last_id; 
     mysql_query($query, $db) or die(mysql_error($db)); 
     $query = 'UPDATE articles 
     SET foto_id = '. $last_id. ' WHERE article_id = '. $clanok_id; 
     mysql_query($query, $db) or die(mysql_error($db)); 

     $redirect = 'index.php'; 
     } 

     else 
     { 
     $chyba = 'Nepodarilo sa nahrat clanok!'; 
     $redirect = 'index.php?chyba='. $chyba; 
     } 
     break; 

請問我該如何清理它?我會很感激,如果有人幫我...

+2

請不要在新代碼中使用'mysql_ *'函數。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/KJveJ)。請參閱[**紅框**](http://goo.gl/GPmFd)?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定,[本文](http://goo.gl/3gqF9)將有助於選擇。如果你關心學習,[這裏是很好的PDO教程](http://goo.gl/vFWnC)。 ($ _REQUEST ['action']) {012 - } - 請求['動作']) { –

+0

您的switch語句檢查什麼,向我們展示文件頂部 – kalpaitch

+0

{if _ – minho

回答

-2

嘗試在你的形式補充一點:

<input type="hidden" name="MAX_FILE_SIZE" value="100000" /> 

這個值設置最大文件爲100 KB。

+2

不!最大文件大小不是用戶輸入。它應該是一個常量或服務器端變量。隱藏的輸入很容易被用戶改變! –

0

有4件事情你應該在你的php.ini文件檢查,以確保文件上傳將工作:

  • file_uploads:應設置爲1
  • 的upload_max_filesize:應設置到一個足夠大的值,用於您計劃上傳的內容。你說它設置爲128 MB。確保它被寫成'128M'。
  • 的post_max_size:應設置爲大於upload_max_filesize高的值,因爲它包含的文件和其他職位數據
  • max_file_uploads:不那麼重要,但是它限制了文件的數量,您可以上傳一次
0

從php.ini設置中最重要的apasrt之一是,請檢查您是否有權在您上傳圖像的特定文件夾中編寫代碼。