2015-05-22 14 views
10

Tôi đang làm việc về việc cập nhật dữ liệu của tôi trong cơ sở dữ liệu và đây là vấn đề của tôi:Fetch nguồn img từ cơ sở dữ liệu

Dưới đây là các mã:

if (!empty($_FILES['fileToUpload'])) 
{ 
    $dest = 'images/Uploaded/'; 
    if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $dest.$_FILES['fileToUpload']['name'])) 
     $file = $dest.$_FILES['fileToUpload']['name']; 
} 

Và tôi muốn rằng nếu $_FILES nếu rỗng, tập tin hiện tại được lưu trữ trong cơ sở dữ liệu, chúng tôi sẽ chỉ giữ lại giá trị của nó khi tôi cập nhật. Điều gì xảy ra trong mã của tôi là khi đã có một hình ảnh hiện có và tôi không nhấp vào Tải lên tệp, hình ảnh đã bị biến mất.

Vui lòng trợ giúp!

+1

Bạn chỉ có thể sử dụng một điều kiện khi xây dựng truy vấn của bạn. – Burki

+0

@Hunter: Bạn có thể thử http://www.dreamincode.net/forums/topic/118382-how-to-update-an-image-in-mysql/ – Abdul

+0

HOẶC sử dụng if (file_exists ($ TARGET_PATH)) { // mã của bạn } – Abdul

Trả lời

1

Nếu file rỗng gửi, bạn cần phải lấy tên oldfile từ cơ sở dữ liệu của bạn phụ thuộc bởi id

if(empty($_FILES)){ 
    $qry = "select * from tablename where id = ? "; 
       $q = $this->db->conn_id->prepare($qry); 
       $q->bindValue(1, $id, PDO::PARAM_INT); 
       $q->execute(); 
       while($rows = $q->fetch(PDO::FETCH_ASSOC)){ 
       $filename = $rows['imagename']; 
       } 
} else { 
    $dest = 'images/Uploaded/'; 
    if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $dest.$_FILES['fileToUpload']['name'])) 
     $file = $dest.$_FILES['fileToUpload']['name']; 
} 
0

Nếu tập tin của bạn không có sản phẩm nào đó,

if (!empty($_FILES['fileToUpload'])) 
{ 
    $dest = 'images/Uploaded/'; 
    if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $dest.$_FILES['fileToUpload']['name'])) 
     $file = $dest.$_FILES['fileToUpload']['name']; 
} 

khác nếu tập tin của bạn là trống rỗng mà có nghĩa là về tình trạng cập nhật/chỉnh sửa, sau đó truy xuất lại từ db của bạn có liên quan đến id đó

else 
    { 
// fetch your image from database relevant to that id 
    $select=mysql_query(select image from your_table where id='$id'); 
    $row=mysql_fetch+assoc($select); 

     $file=$row['image']; 
    } 
+0

Tôi ' đã thử nó bằng cách sử dụng PDO vì tôi thích nó nhưng nó không hoạt động T_T –

0

đây là vấn đề ->nếu (! empty ($ _ FILES ['fileToUpload'])) bạn đang nói nếu tệp không rỗng thì hãy làm điều này. những gì bạn muốn nói nếu tệp trống rỗng, việc này chỉ cần xóa '!' nên làm việc.

Bạn cũng có thể thử -> $ _FILES [ 'myVarName'] [ 'kích thước']> 0 để kiểm tra kích thước của tập tin để xem các tập tin trống.

+0

điều này là không đúng, 'empty()' được sử dụng để kiểm tra xem mảng có chứa các biến liên quan đến việc tải lên được đưa ra (aka, nếu một tập tin đã được tải lên) – Sjon

0

Tôi nghĩ câu hỏi của bạn không thực sự phản ánh vấn đề của bạn? Có vẻ như bạn thực sự gặp sự cố khi tìm nạp nguồn hình ảnh từ cơ sở dữ liệu? Bên cạnh mã bạn cung cấp không giúp gì nhiều. có thể đăng mã có liên quan đến hoạt động cơ sở dữ liệu để chúng tôi có thể thấy có vấn đề gì với việc cập nhật/tìm nạp dữ liệu từ cơ sở dữ liệu.

Tuy nhiên dựa trên giả định, tôi sẽ cố gắng trả lời câu hỏi của bạn.

Nếu không có dữ liệu nào khác được chuyển cùng với yêu cầu ngoại trừ cập nhật hình ảnh, thì giải pháp sẽ là, di chuyển truy vấn cơ sở dữ liệu của bạn vào khối nếu. Có nghĩa là .. không cập nhật cơ sở dữ liệu nếu không có hình ảnh được tải lên.

if (!empty($_FILES['fileToUpload'])) 
{ 
    $dest = 'images/Uploaded/'; 
    if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $dest.$_FILES['fileToUpload']['name'])) 
     $file = $dest.$_FILES['fileToUpload']['name']; 

    //database update here 
} 

vì nếu các truy vấn cơ sở dữ liệu của bạn xảy ra bên ngoài khối IF, cơ sở dữ liệu sẽ được cập nhật và giả sử bạn chuyển biến $ file vào truy vấn. và $ file trong trường hợp này sẽ trống vì $ file chỉ được định nghĩa và đưa ra một giá trị trong khối IF.

Tôi rất thích để giúp bạn tiếp tục, nhưng để làm vì vậy bạn cần để giúp chúng tôi với một số thông tin như thế nào,

Bạn có thể chia sẻ thêm mã của bạn (bạn có thể che giấu dữ liệu nhạy cảm)

là có dữ liệu khác được gửi kèm với tải lên mà bạn có thể cần phải cập nhật dữ liệu người dùng trong cơ sở dữ liệu nhưng vẫn giữ nguyên hình ảnh đó không?

Nếu vậy ..bạn có 2 tùy chọn

1) lấy tệp người dùng hiện tại trước khi thực hiện cập nhật bằng cách chọn tệp đó từ cơ sở dữ liệu, lưu trữ nó trong biến $ file trước khối IF bạn đã nêu. Nếu điều kiện là đúng, biến $ file sẽ được cập nhật, nếu không, biến $ file sẽ có giá trị cũ mà bạn gán cho nó, đó là tệp người dùng hiện tại.

2) tạo truy vấn sql động, có nghĩa là nếu người dùng tải lên ảnh mới thêm vào truy vấn, nếu không thêm nó vào truy vấn và chỉ cập nhật các trường cần được cập nhật. Tôi không quen thuộc với PDO, nhưng khái niệm ở đây.

0
if(strlen($_FILES)<=4){ 
$qry = "select * from tablename where id = ? "; 
      $q = $this->db->conn_id->prepare($qry); 
      $q->bindValue(1, $id, PDO::PARAM_INT); 
      $q->execute(); 
      while($rows = $q->fetch(PDO::FETCH_ASSOC)){ 
      $filename = $rows['imagename']; 
      } 
} else { 
    $dest = 'images/Uploaded/'; 
    if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $dest.$_FILES['fileToUpload']['name'])) 
     $file = $dest.$_FILES['fileToUpload']['name']; 
} 

/* Note : strlen() check if $_FILES have value then it is more then 4 char (3 file extension and 1 dot */ 
0
$file = ""; 

//Run SQL query to update the table fields except file field here 

if (!empty($_FILES['fileToUpload'])) 
{ 
    $dest = 'images/Uploaded/'; 
    if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $dest.$_FILES['fileToUpload']['name'])) 
    { $file = $dest.$_FILES['fileToUpload']['name']; } 
} 

if($file!="") 
{ 
    //Query to update file field only 
} 
Các vấn đề liên quan