2013-03-16 58 views
-2

我嘗試製作包含圖片上傳的表單。讓說,我有表participant我想插入到:php - 表單包含圖片上傳

INSERT INTO `participant`(`Matric`, `Name`, `IC`, `Address`, `Tel`, `Phone`, 
`Email`, `Phone_Ref`, `Institute`, `Course`, `Pic_Participant`, `Exp_Work`) 
VALUES ([value-1],[value-2],[value-3],[value-4],[value-5],[value-6],[value-7], 
[value-8],[value-9],[value-10],[value-11],[value-12]) 

我想要做的是插入數據並上傳圖片。它的屬性是Pic_Participant

我使用ajax Ajax Image Upload and Resize with jQuery and PHP搜索關於上傳。然後我認爲流程,填寫表單,然後在同一頁面上傳圖像,然後上傳圖像後,圖像發送到數據庫的數據,但表單尚未提交。如何從表格圖像中獲取屬性以添加到表格參與者中?

請幫幫我。我對此很新。


EDIT

我嘗試這種代碼,但得到一個錯誤:未定義的變量

<?php 

session_start(); 

include 'dbconnect.php'; 

function is_valid_type($file) 
{ 
$valid_types = array("image/jpg", "image/jpeg", "image/bmp", "image/gif"); 

if (in_array($file['type'], $valid_types)) 
return 1; 
return 0; 
} 


function showContents($array) 
{ 
echo "<pre>"; 
print_r($array); 
echo "</pre>"; 
} 


$TARGET_PATH = "upload/"; 

//ERROR START HERE 

$Matric = $_POST['Matric']; 
$Name = $_POST['Name']; 
$IC = $_POST['IC']; 
$Address = $_POST['Address']; 
$Tel = $_POST['Tel']; 
$Phone = $_POST['Phone']; 
$Email = $_POST['Email']; 
$Phone_Ref = $_POST['Phone_Ref']; 
$Institute = $_POST['Institute']; 
$Course = $_POST['Course']; 
/* $fname = $_POST['fname']; 
$lname = $_POST['lname']; */ 
$image = $_FILES['image']; 
$Exp_Work =$_POST['Exp_Work']; 
//ERROR END HERE 


$Matric = mysql_real_escape_string($Matric); 
$Name = mysql_real_escape_string($Name); 
$IC = mysql_real_escape_string($IC); 
$Address = mysql_real_escape_string($Address); 
$Tel = mysql_real_escape_string($Tel); 
$Phone = mysql_real_escape_string($Phone); 
$Email = mysql_real_escape_string($Email); 
$Phone_Ref = mysql_real_escape_string($Phone_Ref); 
/* $Total_sales = addslashes($_POST['Total_sales']); 
$Date = addslashes($_POST['Date']); */ 
/* $Cer_name = mysql_real_escape_string($Cer_name); */ 
$Institute = mysql_real_escape_string($Institute); 
$Course = mysql_real_escape_string($Course); 
/* $Cat_name = addslashes($_POST['Cat_name']); 
$Product_name = addslashes($_POST['Product_name']); */ 
/* $fname = mysql_real_escape_string($fname); 
$lname = mysql_real_escape_string($lname); */ 
$image['name'] = mysql_real_escape_string($image['name']); 
$Exp_Work = mysql_real_escape_string($Exp_Work); 


$TARGET_PATH .= $image['name']; 


if ($Matric == "" ||$Name == "" ||$IC == "" ||$Address == "" ||$Tel == "" ||$Phone == "" ||$Email == "" ||$Phone_Ref == "" || $Institute == "" || $Course == ""|| $image['name'] == ""|| $Exp_Work == "") 
{ 
$_SESSION['error'] = "All fields are required"; 
echo "All fields are required"; 
exit; 
} 


if (!is_valid_type($image)) 
{ 
$_SESSION['error'] = "You must upload a jpeg, gif, or bmp"; 
echo"You must upload a jpeg, gif, or bmp"; 
exit; 
} 


if (file_exists($TARGET_PATH)) 
{ 
$_SESSION['error'] = "A file with that name already exists"; 
echo"A file with same name exists already"; 
exit; 
} 


if (move_uploaded_file($image['tmp_name'], $TARGET_PATH)) 
{ 

$sql = "insert into participant (Matric, Name, IC, Address, Tel, Phone, Email, Phone_Ref, Institute, Course, image, Exp_Work) values ('$Matric','$Name','$IC','$Address','$Tel','$Phone','$Email','$Phone_Ref','$Institute', '$Course','" . $image['name'] . "','$Exp_Work')"; 
$result = mysql_query($sql) or die ("Could not insert data into DB: " . mysql_error()); 
echo"Imgage uploaded successfully"; 
exit; 
} 
else 
{ 

$_SESSION['error'] = "Could not upload file. Check read/write persmissions on the directory"; 
header("Location: fail.php"); 
exit; 
} 
?> 
+0

嗨拉赫曼。您是否在上傳圖像時沒有提交表單,或者您需要知道如何將圖像保存到數據庫並在用戶仍然編輯表單的其餘部分時將其顯示回用戶? (或兩者?) – Martina 2013-03-16 17:36:09

+0

嗨馬蒂娜。問題是在沒有提交表單的情況下上傳圖片。然後,我試着想,在用戶保持填寫表單(從我找到的教程)中保存圖像。哪一個更好? – 2013-03-16 17:48:42

+0

Rahman,我只是看着你發送的那個鏈接,看起來他們在那個頁面上的演示是不是你想要的?!它唯一不做的事情就是將submited圖片保存到數據庫中。嘗試添加另一個FORM(第二個)與發送圖像的窗體在同一頁上,您可以在其中填寫其他內容。至於保存到數據庫,搜索**如何將圖像保存到MySQL數據庫在PHP **我敢肯定有很多教程圍繞 – Martina 2013-03-16 18:03:05

回答

0

如果我得到它的正確,你想要的是插入圖像插入(可能是MYSQL)數據庫。

您可以通過使用base64_encode()圖像二進制數據並將結果明文插入數據庫來實現此目的。

$image = 'path/to/image/image.png'; 
$imagefordbs = base64_encode($image); 
/*now your image is ready to be stored in database*/ 

然而,該方法具有由於BASE64_ENCODE缺點()佔用了更多的約33%,那麼原始存儲器,一些時間來處理輸入二進制,並且對於這種要求在MySQL專用數據類型 - BLOB

+0

我敢於質疑這個想法。將數據存儲到MySQL數據庫時,不需要對圖像數據進行base64編碼。這就是BLOB字段的名稱來自(Binary Large OBject)的地方 - 用於存儲二進制數據(如圖像)。通過base64_encode編碼它,你只會增大數據的大小。 – Martina 2013-03-16 17:30:38

+0

@Martinam你完全就在這裏,這是我不好的老習慣,以base64每個二進制文件需要安全運輸或存儲... – 2013-03-16 18:18:16

0

在閱讀您的問題時,您想要使用您找到的教程/代碼上傳圖像,然後在圖像已經上傳後單獨提交表單。

要知道你在哪裏可以將文件上傳後,找到你的形象,你有兩個選擇:

  1. 具有上載完成,包括當圖像上傳回的文件路徑,在您的表單變量(如例如一個隱藏的輸入);
  2. 將圖像路徑存儲在會話變量中,以便當您提交數據字段時,可以訪問該變量以獲取圖像的信息。

編輯:您需要檢查表單插件的文檔獲取更多細節,但你可以從你上傳的PHP腳本返回的東西。例如,您可以echo的文件名,然後你會在你的success功能可供選擇:

function afterSuccess(return_value) { 
     console.log(return_value); // here you have what was echoed out by php 

     $('#UploadForm').resetForm(); // reset form 
     $('#SubmitButton').removeAttr('disabled'); //enable submit button 
    } 
+0

我更喜歡沒有1.但我找不到如何做到這一點。如果你可以給我代碼示例,它會很清楚。 – 2013-03-16 17:32:41

+0

@RahmanMohamed看我的編輯。 – jeroen 2013-03-16 17:50:39