Получить исходный код img из базы данных
Я работаю над обновлением своих данных в базе данных, и вот моя проблема:
Здесь код:
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 $_FILES
, если пустой, текущий файл, хранящийся в базе данных, мы просто сохраним его значение при обновлении. Что происходит в моем коде, когда есть уже существующее изображение, и я не нажимаю "Загрузить файл", изображение, которое уже там, исчезает.
Пожалуйста, помогите!
Ответы
Ответ 1
Если пустые записи файлов, вам нужно получить имя старого файла из вашей базы данных, зависеть от 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'];
}
Ответ 2
Если ваш файл не пуст,
if (!empty($_FILES['fileToUpload']))
{
$dest = 'images/Uploaded/';
if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $dest.$_FILES['fileToUpload']['name']))
$file = $dest.$_FILES['fileToUpload']['name'];
}
else, если ваш файл пуст, что означает условие обновления/редактирования, затем верните его из своего db, относящегося к этому 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'];
}
Ответ 3
вот проблема → if (! empty ($ _ FILES ['fileToUpload']))
вы говорите, что если файл не пуст, сделайте это.
что вы хотите сказать, если файл пуст, просто удалите '!' должен работать.
Вы также можете попробовать → $_ FILES ['myVarName'] ['size'] > 0
для проверки размера файла, чтобы увидеть, пуст ли файл.
Ответ 4
Я думаю, что ваш вопрос действительно не отражает вашу проблему? Кажется, у вас на самом деле проблема с источником изображения из базы данных? Помимо кода, который вы предоставили, это мало помогает. возможно, опубликовать код, связанный с активностью базы данных, чтобы мы могли видеть, что не так с обновлением/извлечением данных из базы данных.
Однако исходя из предположений, я попытаюсь ответить на ваш вопрос.
Если никакие другие данные не передаются вместе с запросом, кроме обновления изображения, тогда решение должно быть, переместите ваши запросы к базе данных в блок if. Значение.. не обновлять базу данных, если изображение не загружено.
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
}
потому что, если ваши запросы к базе данных происходят вне блока IF, база данных будет обновляться в любом случае, и я предполагаю, что вы передаете переменную $file в запросе. и $file в этом случае будет пустым, так как $file определен только и задано значение в блоке IF.
Я хотел бы помочь вам в дальнейшем, но для этого вам нужно помочь нам с дополнительной информацией, например,
Вы можете поделиться своим кодом (вы можете скрыть конфиденциальные данные)
есть ли другие данные, отправленные с загрузкой, которые могут потребоваться для обновления пользовательских данных в базе данных, но сохранить изображение как есть?
Если да.. у вас есть 2 варианта
1) получите текущий файл пользователя перед обновлением, выбрав его из базы данных, сохраните его в переменной $file до того, как вы указали блок IF. Если условие истинно, переменная $file будет обновлена, если нет, переменная $file будет иметь старое значение, которое вы присвоили ей, который является текущим пользовательским файлом.
2) создать динамический sql-запрос, то есть если пользователь загрузил новую фотографию, добавьте это в запрос, если не добавьте его в запрос и обновите только те поля, которые необходимо обновить. Я не знаком с PDO, но концепция здесь.
Ответ 5
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 */
Ответ 6
$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
}