2010-01-13 47 views
0

我很感謝你幫助像我這樣的新手。我有以下問題,並會感謝緊急幫助。上傳圖片到服務器成功,但插入文件名到數據庫是空的

問題編號1: 使用PHP和MySQL,我可以成功上傳圖片到服務器上,但即使圖片的文件名已經成功上載到數據庫中,我也能夠成功上傳圖片的文件名。我已經閱讀了幾個關於這個主題的帖子,包括這個網站的這裏,但我無法解決這個問題。

問題號2: 我同樣需要在限制允許上傳的文件類型的幫助(GIF,JPEG,ONLY PNG)以及文件大小(不超過100KB)。

問題編號3: 強制將上傳的所有圖片大小調整爲20kb的較小縮略圖大小,並將其存儲在服務器上的單獨文件夾中,並在數據庫上使用單獨的文件名。

下面是我目前的PHP代碼;

<?php 
if (!isset($_POST['upload'])) 
{ 
include ("submit_interview_test.php"); //shows form if it's not been posted 
} 

else 
{ 
if($_FILES['pic']['tmp_name'] == "none") 
{ 
echo "<b>File not successfully uploaded. Maybe check the filesize limit.</b>"; 
include ("submit_interview_test.php"); 
exit(); 
} 

if(!ereg("image",$_FILES['pic']['type'])) 
{ 
echo "<b>File is not an image - try another file.</b>"; 
include ("submit_interview_test.php"); 
exit(); 
} 

else 
{ 
$uploadDir = 'intervimages/'; 
$destination = $uploadDir.basename($_FILES['pic']['name']); 
$temp_file = $_FILES['pic']['tmp_name']; 
include ("processinterview.php"); 
if (move_uploaded_file ($temp_file,$destination)) 
{ echo '<p>Your file has been successfully uploaded!</p>'; 
} 

else 
{ echo "Problem with picture upload!"; 
} 
} // end of else 

} // end of else 
?> 

這是我的processinterview.php代碼;

<?php 
include_once 'includes/db.php'; 
$sql="INSERT INTO interview (interviewer, media_house, category, interview_title, title_rider, personality, interview_body, source, published, temp_file, interview_date, location, interview_intro, date) VALUES ('$_POST[interviewer]','$_POST[media_house]','$_POST[category]','$_POST [interview_title]','$_POST[title_rider]','$_POST[personality]','$_POST [interview_body]','$_POST[source]','$_POST[published]','$_FILES[temp_file]','$_POST[interview_date]','$_POST[location]','$_POST[interview_intro]',now())"; 

if (!mysql_query($sql)) 
{ 
die('Error: ' . mysql_error()); 
} 
echo "1 interview record has been successfully added to the database."; 
?> 

AND,this is my form(submit_interview_test.php);

<form enctype="multipart/form-data" action="processinterview3.php" method="post"> 
<table bgcolor="#ececec" border="0" cellspacing="5"> 
<tbody> 
<tr><td>Interview conducted by (Interviewer's Name):</td><td><input size="30" name="interviewer" type="text" /></td></tr> 
<tr><td>Media house (e.g., Punch):</td><td><input size="30" name="media_house" type="text" /></td></tr> 
<tr><td>Location (e.g., Ibadan or USA):</td><td><input type="text" size="30" name ="location" /></td></tr> 
<tr><td>Interview Category (e.g., Local):</td><td><input type="text" size="30" name ="category" /></td></tr> 
<tr><td>Interview Personality:</td><td><input type="text" size="30" name ="personality" /></td></tr> 
<tr><td>Interview Title:</td><td><input type="text" size="130" name ="interview_title" /></td></tr> 
<tr><td>Title Rider:</td><td><input type="text" size="130" name ="title_rider" /></td></tr> 
<tr><td>Source (e.g., http://...):</td><td><input size="130" name="source" type="text" /></td></tr> 
<tr> <td valign="top">Interview Introduction:</td> 
<td><textarea name="interview_intro" rows="3" cols="100"></textarea></td></tr> 
<tr><td>Date of Interview (e.g., 26/09/2009):</td><td><input size="30" name="interview_date" type="text" /></td></tr> 
<tr> <td valign="top">Interview Main Content:</td> 
<td><textarea name="interview_body" rows="12" cols="100"></textarea></td></tr> 
<tr><td>Add Photo (Jpeg or gif not more than 80KB):</td><td><input type="file" name="pic"/></td></tr> 
<tr><td valign="top">Publish rightaway?</td> 
<td><input type="checkbox" name="published" value="1"> Yes (Leave this if this Interview is not to be published yet)<br> 
<tr><td>&nbsp;</td><td><input value="Submit Interview" type="submit" name="upload"/><font face="arial" size="1">&nbsp;&nbsp;Please check for any error before you submit</font></td></tr> 
</tbody></table> 

感謝您的麻煩。

回答

0

1)您的查詢將$ _FILES [temp_name]當你應該只使用temp_name $存儲的值。

2)使用MIME類型的以下陣列對證(取自Symfony框架的上傳圖像驗證碼):

<?php 
    $valid_mimes = array(
    'image/jpeg', 
    'image/pjpeg', 
    'image/png', 
    'image/x-png', 
    'image/gif', 
); 

    if(!in_array($_FILES['pic']['type'], $valid_mimes)) { 
    // invalid mime 
    } 

你的文件的大小可以用$ _FILES驗證[「知情同意」] ['size']值。

3)有許多可用的圖像和縮略圖生成庫,您的具體選擇取決於什麼,如果有的話,支持圖形庫安裝在您的服務器(GD或ImageMagick的)上。下列任何結果可能爲你工作:http://www.google.com/search?q=php+image+thumbnail

+0

由於低溫的迅速回應。 我din't能看到$ _FILE [temp_name]在我的代碼,所以我猜你在我處理的代碼(即processinterview.php)下文稱以$ _FILE [temp_file。我把它改爲$ temp_file(更換$ _FILE [temp_file。其實,這個時候,我得到了在數據庫中的值,但是是不可理解的東西一樣的/ tmp/php4hY4er,/ tmp目錄/ phppUzQbA等,而不是實際的文件名。 – user249399 2010-01-13 03:53:52

+0

/tmp/php4hY4er是服務器上的臨時文件 - 你需要將它複製到永久的地方,並存儲該文件名 – James 2010-01-13 07:55:48

+0

對不起,使用$ _FILES ['pic'] ['name']作爲上傳的原始文件的名稱。 – nortron 2010-01-13 08:52:44

相關問題