2015-05-22 14 views
10

pracuję nad aktualizacją moich danych w bazie danych i tu jest mój problem:Fetch img źródło z bazy

Oto kod:

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

I chcę, że jeśli $_FILES jeśli pusta, bieżący plik przechowywane w bazie danych, zachowamy jego wartość po aktualizacji. Co dzieje się w moim kodzie, gdy istnieje już obraz i nie kliknę opcji Prześlij plik, obraz, który już tam był, znika.

Proszę pomóc!

+1

mógłby po prostu użyć warunku przy budowie zapytanie. – Burki

+0

@Hunter: Możesz spróbować tego http://www.dreamincode.net/forums/topic/118382-how-to-update-an-image-in-mysql/ – Abdul

+0

LUB użyj if (file_exists ($ TARGET_PATH)) { } Twój kod } – Abdul

Odpowiedz

1

Jeśli pustych plików pisać, trzeba sprowadzić oldfile nazwę z bazy danych zależy od 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

Jeśli plik nie jest pusty wtedy,

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

indziej jeśli plik jest pusty, które oznacza stan aktualizacji/edycji, a następnie pobierz go z bazy danych odpowiedniej dla tego identyfikatora:

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

ve próbowałem go używając PDO, ponieważ wolałem go, ale to nie działa T_T –

0

tutaj jest problem ->if (! empty ($ _ FILES ['fileToUpload'])) mówisz, że jeśli plik nie jest pusty, zrób to. co chcesz powiedzieć, jeśli plik jest pusty, po prostu usuń "!" powinno działać.

Możesz także spróbować -> $ _FILES [ 'myVarName'] [ 'size']> 0 aby sprawdzić rozmiar pliku, aby sprawdzić, czy plik jest pusty.

+0

to nie jest prawda, 'empty()' jest używany do sprawdzenia, czy tablica zawierająca zmienne związane z wysyłaniem są podane (aka, jeśli plik został przesłany) – Sjon

0

Myślę, że twoje pytanie nie odzwierciedla twojego problemu? Wygląda na to, że masz problem z pobraniem źródła obrazu z bazy danych? Poza podanym przez ciebie kodem niewiele pomaga. może opublikować kod związany z działaniem bazy danych, abyśmy mogli zobaczyć, co jest nie tak z aktualizowaniem/pobieraniem danych z bazy danych.

Jednak na podstawie założeń spróbuję odpowiedzieć na Twoje pytanie.

Jeśli żadne inne dane nie zostaną przekazane wraz z żądaniem, z wyjątkiem aktualizacji obrazu, to rozwiązaniem powinno być przeniesienie zapytań bazy danych do bloku if. Czyli .. nie aktualizuj bazy danych, jeśli obraz nie jest przesłany.

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 
} 

bo jeśli zdarzy zapytań do bazy danych na zewnątrz bloku IF, bazy danych będą aktualizowane tak, i zakładam, że przechodzą w zmiennej $ plików w zapytaniu. a plik $ w tym przypadku będzie pusty, ponieważ plik $ jest zdefiniowany i ma wartość w bloku IF.

chciałbym dodatkowo pomóc, ale do tego trzeba, aby pomóc nam trochę więcej informacji, takich jak,

Można dzielić się więcej o kodzie (można ukryć dane wrażliwe)

są istnieją inne dane wysyłane wraz z przesyłaniem, które mogą być konieczne, aby zaktualizować dane użytkownika w bazie danych, ale zachować obraz w niezmienionym stanie?

Jeśli tak, to ..masz 2 opcje:

1) pobierz bieżący plik użytkownika przed dokonaniem aktualizacji, wybierając go z bazy danych, zapisz go w zmiennej $ file przed podanym przez ciebie blokiem IF. Jeśli warunek jest prawdziwy, zmienna $ file zostanie zaktualizowana, jeśli nie, zmienna $ file będzie miała starą przypisaną do niej wartość, która jest bieżącym plikiem użytkownika.

2) utwórz dynamiczne zapytanie sql, co oznacza, że ​​jeśli użytkownik przesłał nowe zdjęcie, dodaj to do zapytania, jeśli nie, nie dodawaj go do zapytania i aktualizuj tylko te pola, które wymagają aktualizacji. Nie znam PDO, ale koncepcja jest tutaj.

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 
}