我正在努力更新数据库中的数据,这是我的问题:
以下是代码:
if (!empty($_FILES['fileToUpload']))
{
$dest = 'images/Uploaded/';
if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $dest.$_FILES['fileToUpload']['name']))
$file = $dest.$_FILES['fileToUpload']['name'];
}
我希望如果$_FILES
如果为空,那么当我更新时,存储在数据库中的当前文件将保留它的值。在我的代码中发生的情况是,当已经存在现有图像并且我没有单击上传文件时,已经存在的图像就会消失。
请帮忙!
答案 0 :(得分: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'];
}
答案 1 :(得分:0)
如果您的文件不为空,那么
if (!empty($_FILES['fileToUpload']))
{
$dest = 'images/Uploaded/';
if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $dest.$_FILES['fileToUpload']['name']))
$file = $dest.$_FILES['fileToUpload']['name'];
}
否则,如果您的文件为空,这意味着在更新/编辑条件下,则从与该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'];
}
答案 2 :(得分:0)
这是问题 - > if(!empty($ _ FILES ['fileToUpload'])) 你是说如果文件不是空的话就这样做。 如果文件为空你想说的话这就是删除'!'应该工作。
您也可以尝试 - > $ _ FILES ['myVarName'] ['size']> 0 强> 检查文件的大小以查看文件是否为空。
答案 3 :(得分:0)
我认为你的问题并没有真正反映你的问题?您似乎从数据库中获取图像源时遇到问题?除了你提供的代码并没有多大帮助。也许发布与数据库活动相关的代码,这样我们就可以看到更新/从数据库中获取数据有什么问题。
然而,基于假设,我会尝试回答你的问题。
如果除了图像更新之外没有其他数据与请求一起传递,那么解决方案应该是,将数据库查询移动到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块中给出一个值。
我很乐意为您提供进一步的帮助,但为此,您需要帮助我们提供更多信息,例如
您可以共享更多代码(可以隐藏敏感数据)
是否有其他数据与上传一起发送,您可能需要更新数据库中的用户数据,但保持图像不变?
如果是这样......你有两个选择
1)通过从数据库中选择更新之前获取当前用户文件,将其存储在您声明的IF块之前的$ file变量中。如果条件为真,则$ file变量将被更新,否则,$ file变量将具有您为其分配的旧值,即当前用户文件。
2)创建动态sql查询,这意味着如果用户上传了新照片,则将其添加到查询中,如果没有将其添加到查询中,则只更新需要更新的字段。我不熟悉PDO,但概念就在这里。
答案 4 :(得分: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 */
答案 5 :(得分: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
}