0

我正在将一些包含标题、新闻日期和图像的数据上传到数据库,但是当我想更新它时,我遇到了问题。如果我更新除图像之外的所有行,那么基本上我想做什么,则不会发生更新。当我必须更新时,我基本上想要什么让我们假设只有标题才应该更新它,但所有其他数据应该保持不变,但问题是我必须在更新时再次从我的电脑中选择图像。我的情况是,我只是将名称保存在 db 中,而不是整个路径,并对我需要显示图像的路径进行硬编码

这是html

 <div class="row">
                            <label>Image upload</label>
                            <div class="right"><input type="file" name="file" value="<?php echo $row['images'];?>" /></div>
                        </div>

这是php

   if(($_GET['mod']=='edit') && (isset($_POST['hidden'])))
{




    echo $_FILES["file"]["name"];
        $allowedExts = array("jpg", "jpeg", "gif", "png");
        $extension = end(explode(".", $images));
        if ((($_FILES["file"]["type"] == "image/gif")
        || ($_FILES["file"]["type"]   == "image/jpeg")
        || ($_FILES["file"]["type"]   == "image/png")
        || ($_FILES["file"]["type"]   == "image/pjpeg"))

        && in_array($extension, $allowedExts))
          {
           if ($_FILES["file"]["error"] > 0)
            {

            echo $_FILES["file"]["error"] . "<br>";
            }
          else
            {
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload-images/" . $images);
            $update="UPDATE headline SET 
                                                headline_title  = '$title',   
                                                headline_des    = '$description',   
                                                month           = '$month_name', 
                                                day             = '$day_name', 
                                                year            = '$year_name', 
                                                featured        = '$featured',
                                                headline        = '$headline',
                                                images          = '$images' 
                                                where id        = ".$_GET['id']."";
             $result = mysql_query($update);    

              }
            }
4

2 回答 2

1

再次提交表单将导致文件输入的新值将为 ,因此您必须检查它是否为空并根据状态进行操作

例如

if($_FILES['file']['name'] != "")
{
      //upload the image with what ever you want 
      //move_uploaded_file($_FILES['file']['tmp_name'],$target.$image );
      //the SQL query should contain the updating the image column 
         if(($_GET['mod']=='edit') && (isset($_POST['hidden'])))
         {




echo $_FILES["file"]["name"];
    $allowedExts = array("jpg", "jpeg", "gif", "png");
    $extension = end(explode(".", $images));
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"]   == "image/jpeg")
    || ($_FILES["file"]["type"]   == "image/png")
    || ($_FILES["file"]["type"]   == "image/pjpeg"))

    && in_array($extension, $allowedExts))
      {
       if ($_FILES["file"]["error"] > 0)
        {

        echo $_FILES["file"]["error"] . "<br>";
        }
      else
        {
        move_uploaded_file($_FILES["file"]["tmp_name"], "upload-images/" . $images);
        $update="UPDATE headline SET 
                                            headline_title  = '$title',   
                                            headline_des    = '$description',   
                                            month           = '$month_name', 
                                            day             = '$day_name', 
                                            year            = '$year_name', 
                                            featured        = '$featured',
                                            headline        = '$headline',
                                            images          = '$images' 
                                            where id        = ".$_GET['id']."";
         $result = mysql_query($update);    

          }
        }
}
else
{
      //SQL update without image 
        $update="UPDATE headline SET 
                                            headline_title  = '$title',   
                                            headline_des    = '$description',   
                                            month           = '$month_name', 
                                            day             = '$day_name', 
                                            year            = '$year_name', 
                                            featured        = '$featured',
                                            headline        = '$headline'
                                            WHERE id        = ".$_GET['id']."";
         $result = mysql_query($update);    

}

如果您不想简单地编辑图像,您可以将其从更新中删除,并使用用于该图像的表单,或者它是隐藏输入中的路径

希望这会有所帮助

根据您的评论,查询应该是这样的

        $update="UPDATE headline SET 
                                            headline_title  = '$title',   
                                            headline_des    = '$description',   
                                            month           = '$month_name', 
                                            day             = '$day_name', 
                                            year            = '$year_name', 
                                            featured        = '$featured',
                                            headline        = '$headline'
                                            WHERE id        = ".$_GET['id']."";
         $result = mysql_query($update);    

我认为您需要使用良好的意图使您的代码在将来更具可读性和可维护性:)

于 2013-01-23T12:42:36.897 回答
0

解决方案

  1. 检查文件是否为空:if(!empty($_FILES['fileToUpload']['name']))
  2. 在 IF 语句中使用表中提及图像列的更新查询, 如果图像未上传,则将上传
  3. 在 ELSE 语句中不提及表中的图像列进行更新查询,如果文件为空,则会上传

结论

下次当您更新任何其他字段时,图像不会消失,这意味着数据库中的文件路径不会为空,并且如果已经存在,除非您手动更改它,否则它不会更改..

于 2020-06-27T17:35:17.880 回答