如果有人可以帮我解决这个问题,我将不胜感激。 问题是我有一个页面,我上传图像和它的描述,但当我更新图像描述并保持文件字段空白当我按提交更新描述时,我的图像消失,因为我离开文件字段空白,所以它替换了我以前的图像为空白。
有没有办法更新描述字段,只有在设置了文件字段时才更新图像?
提前致谢。
继承我的代码:
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
move_uploaded_file($_FILES['imagem']['tmp_name'],"../images/slide/".($_FILES['imagem']['name']));
$updateSQL = sprintf("UPDATE tab_imagens SET imagem=%s, titulo=%s, idUser=%s WHERE idImagem=%s",
GetSQLValueString("images/slide/".($_FILES['imagem']['name']), "text"),
GetSQLValueString($_POST['titulo'], "text"),
GetSQLValueString($_POST['idUser'], "text"),
GetSQLValueString($_POST['idImagem'], "int"));
mysql_select_db($database_ligar, $ligar);
$Result1 = mysql_query($updateSQL, $ligar) or die(mysql_error());
$updateGoTo = "verImagensSlide.php";
if (isset($_SERVER['QUERY_STRING'])) {
$updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
$updateGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $updateGoTo));
}
谢谢大家的回复! 这就是我解决它的方式:
//do this if there is a file in filefield
if( !empty( $_FILES[ 'imagem' ] ) && !empty( $_FILES[ 'imagem' ][ 'tmp_name' ] )){
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
move_uploaded_file($_FILES['imagem']['tmp_name'],"../images/slide/".($_FILES['imagem']['name']));
$updateSQL = sprintf("UPDATE tab_imagens SET imagem=%s, titulo=%s, idUser=%s WHERE idImagem=%s",
GetSQLValueString("images/slide/".($_FILES['imagem']['name']), "text"),
GetSQLValueString($_POST['titulo'], "text"),
GetSQLValueString($_POST['idUser'], "text"),
GetSQLValueString($_POST['idImagem'], "int"));
mysql_select_db($database_ligar, $ligar);
$Result1 = mysql_query($updateSQL, $ligar) or die(mysql_error());
$updateGoTo = "verImagensSlide.php";
if (isset($_SERVER['QUERY_STRING'])) {
$updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
$updateGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $updateGoTo));
}}
//do this if there is NO FILE in filefield
else
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
$updateSQL = sprintf("UPDATE tab_imagens SET titulo=%s, idUser=%s WHERE idImagem=%s",
GetSQLValueString($_POST['titulo'], "text"),
GetSQLValueString($_POST['idUser'], "text"),
GetSQLValueString($_POST['idImagem'], "int"));
mysql_select_db($database_ligar, $ligar);
$Result1 = mysql_query($updateSQL, $ligar) or die(mysql_error());
$updateGoTo = "verImagensSlide.php";
if (isset($_SERVER['QUERY_STRING'])) {
$updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
$updateGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $updateGoTo));
}
答案 0 :(得分:1)
您可以通过检查数组中包含文件详细信息的“错误”字段的值来判断文件是否真正上传。
就像您使用“tmp_name”字段获取临时名称来移动上传文件一样,如果文件成功上传,您可以在同一级别检查。
如果一切正常,该字段的值为0(或更好,它是常量UPLOAD_ERR_OK的值)。
所以你需要做的就是在if语句中包含对move_uploaded_file函数的调用,如下所示:
if (UPLOAD_ERR_OK == $_FILES['imagem']['error'])
稍后编辑:请务必使用类似的逻辑来判断是否需要更新数据库中的名称。
您可以在move_uploaded_file函数的手册页上看到,有一个示例使用类似的逻辑来判断上传是否成功。唯一的区别是,在该示例中,上载了多个文件,并且在“错误”键下它们具有数组,而您将具有标量(int)值。
答案 1 :(得分:0)
一种方法是测量上传图片的大小,如果它更小,那么假设1KB不移动文件并更新数据库
if($_FILES['file']['size'] > 1024) // bigger then 1 KB
通过这种方式,您还可以防止脚趾上传巨大的文件。
if ( (isset($_POST["MM_update"])) &&
($_POST["MM_update"] == "form1") &&
($_FILES['file']['size'] > 1024 )) &&
($_FILES['file']['size'] < 1024000 ))
{
move_uploaded_file($_FILES['imagem']['tmp_name'],"../images/slide/".($_FILES['imagem']['name']));
$updateSQL = sprintf("UPDATE tab_imagens SET imagem=%s, titulo=%s, idUser=%s WHERE idImagem=%s",
GetSQLValueString("images/slide/".($_FILES['imagem']['name']), "text"),
GetSQLValueString($_POST['titulo'], "text"),
GetSQLValueString($_POST['idUser'], "text"),
GetSQLValueString($_POST['idImagem'], "int"));
mysql_select_db($database_ligar, $ligar);
$Result1 = mysql_query($updateSQL, $ligar) or die(mysql_error());
$updateGoTo = "verImagensSlide.php";
if (isset($_SERVER['QUERY_STRING'])) {
$updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
$updateGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $updateGoTo));
}
答案 2 :(得分:0)
if( !empty( $_FILES[ 'imagem' ] ) && !empty( $_FILES[ 'imagem' ][ 'tmp_name' ] )
move_uploaded_file($_FILES['imagem']['tmp_name'],"../images/slide/".($_FILES['imagem']['name']));
应该这样做。
确保您还使用相同的if
语句更改SQL查询。它应该更新表格中的图像路径和名称