Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅当选择文件时才移动上传的文件_Php_Forms_Upload_Filefield - Fatal编程技术网

Php 仅当选择文件时才移动上传的文件

Php 仅当选择文件时才移动上传的文件,php,forms,upload,filefield,Php,Forms,Upload,Filefield,如果有人能帮我解决这个问题,我将不胜感激。 问题是我有一个页面,我上传了一个图像及其描述,但当我更新图像描述并在按submit更新描述时将文件字段保留为空时,我的图像会消失,因为我将文件字段保留为空,因此它会将我以前的图像替换为空 是否有任何方法可以更新描述字段,并且仅在设置filefield时更新图像 提前谢谢 这是我的密码: $editFormAction = $_SERVER['PHP_SELF']; if (isset($_SERVER['QUERY_STRING'])) { $ed

如果有人能帮我解决这个问题,我将不胜感激。 问题是我有一个页面,我上传了一个图像及其描述,但当我更新图像描述并在按submit更新描述时将文件字段保留为空时,我的图像会消失,因为我将文件字段保留为空,因此它会将我以前的图像替换为空

是否有任何方法可以更新描述字段,并且仅在设置filefield时更新图像

提前谢谢

这是我的密码:

$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));
}

一种方法是测量上传图片的大小,如果它更小,比如说1KB,不要移动文件并更新DB

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));
}
if((isset($\u POST[“MM\u update”]))&&
($_POST[“MM_update”]=“form1”)&&
($_文件['file']['size']>1024))&&
($_文件['file']['size']<1024000))
{
移动上传的文件($\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
$updateSQL=sprintf(“更新选项卡\u图像集图像m=%s,titulo=%s,idUser=%s,其中idImagem=%s”,
GetSQLValueString(“图像/幻灯片/”($_文件['imagem']['name']),“文本”),
GetSQLValueString($_POST['titulo'],“text”),
GetSQLValueString($\u POST['idUser'],“text”),
GetSQLValueString($_POST['idImagem'],“int”);
mysql\u select\u db($database\u ligar,$ligar);
$Result1=mysql\u query($updateSQL,$ligar)或die(mysql\u error());
$updateGoTo=“verimagenslide.php”;
if(isset($\u服务器['QUERY\u字符串]])){
$updateGoTo.=(strpos($updateGoTo,“?”)?“&”:”;
$updateGoTo.=$\u服务器['QUERY\u字符串];
}
标题(sprintf(“位置:%s”,$updateGoTo));
}
我们应该做到这一点


确保还使用相同的
if
-语句更改SQL查询。它应该更新表中的图像路径和名称

您可以通过检查包含文件详细信息的数组中“error”字段的值来判断是否确实上载了文件

正如您使用“tmp_name”字段获取临时名称以移动上载的文件一样,如果文件已成功上载,您可以在同一级别上进行检查

如果一切正常,则该字段的值为0(或更好,它是常量UPLOAD\u ERR\u OK的值)

因此,您只需将对move_uploaded_file函数的调用封装在if语句中,如下所示:

if (UPLOAD_ERR_OK == $_FILES['imagem']['error'])
稍后编辑:确保使用类似的逻辑来判断是否还需要更新数据库中的名称


您可以看到,在函数的手册页面上有一个示例,使用类似的逻辑来判断上载是否成功。唯一的区别是,在该示例中,上载了多个文件,并且在“error”键下它们有一个数组,而您将有一个标量(int)值。

如果在上载之前没有在中选择图片,是否会有$_文件['imagem'][…]的值?或者换句话说,它不会抛出错误吗?使用条件语句构建sql,只添加非空变量的字段/值。只有在没有错误的情况下才能移动上传的文件,请参阅手册。嗨,Martin,没有,没有错误,它只是删除了以前的图像,我想在我按submit时,当文件字段为空时保留以前的图像。
if (UPLOAD_ERR_OK == $_FILES['imagem']['error'])