我想更新值,但我不想更改图像,当我更新图像被删除

时间:2017-09-12 11:34:19

标签: php

我正在更新我的表单值。图片已上传,可在表单上查看。当我只更新文本值时,图像被删除,它显示为blank.means它不会保持不变,当我更新它只是自动删除我认为当我更新其他值时没有得到当前图像值的路径。请帮助我解决这个问题 就好像我只需更新人名,我更改名称,其他字段保持不变。当我点击更新时所有值保持不变并且还更新我更新的一个但问题是此照片被删除不保持相同

table {
    border-spacing: 0 1px;
    tr:last-child {
        border: none;
        border-spacing: none; //those two don't seem to work
    }
}

更新文件

<?php

$v_id = $_GET['v_id'];
include "config.php";

$sql = "SELECT * FROM my_veh_ven WHERE v_id='$v_id'";
$result = mysqli_query($conn,$sql);
if(mysqli_num_rows($result)>0)
{
  while($row = mysqli_fetch_assoc($result)) {
  ?>
        <!-- form start -->
        <form role="form" method="POST" action="updateVehicle.php?v_id=<?= $row["v_id"] ?>" enctype="multipart/form-data">
          <div class="box-body">


            <div class="form-group col-md-offset-0 col-md-4">
              <label for="">25+ Days Rent in PKR</label>
              <input type="text" class="form-control" name="v_25_plus_rent" value="<?=$row["v_25_plus_rent"]?>">
            </div>



            <div class="form-group col-md-offset-0 col-md-8">
              <label >Change Vehicle Picture</label>
              <input  type="file"  name="image" id="myFile" value="images/<?=$row["image"]?>" accept="image/*">
            </div>


            <div class="form-group col-md-offset-0 col-md-4" style="text-align: center;">
              <label for="exampleInputFile" style="text-align: center;" >Current Vehicle Picture</label>
              <?php echo'<Image src="images/'.$row["image"].'" style="width:325px;height:220px;"></Image>'; ?>
            </div>

            <div class=" ">
              <div class=" with-border" style="text-align:center;">
                <h4 class="box-title" style="text-align:center;"><b>Vendor Details</b></h4>
              </div>
            </div>


          </div>
          <!-- /.box-body -->

          <div class="box-footer skin-yellow">
            <button type="submit" name="submit" class="btn btn-primary skin-yellow">Update</button>
          </div>
        </form>
        <?php
    }

 } else {
    echo "Sorry something wrong";
}

mysqli_close($conn);
?>

3 个答案:

答案 0 :(得分:1)

添加时的简单解决方案将您的图像名称放在1个隐藏变量中,如下所示

$hiddenImage = $row["image"]

在表单中添加此隐藏变量

<input type='hidden' name='hiddenImage' value='<?php echo $hiddenImage ?>'

并在提交时检查您的文件输入类型是否包含任何数据。如果存在数据/图像,则将此图像以db中的文件夹和相同名称上载。如果图像不存在则将输入变量保存在数据库中。

例如:

if (isset($_FILES["image"]["tmp_name"]) && $_FILES["image"]["tmp_name"] != "") {
// upload file and save image name in variable like $imagename 
}else{
// if image not upload this code will execute
$imagename = $_POST['hiddenImage'];
}

将此$imagename变量数据保存在数据库

答案 1 :(得分:0)

<input type="file"/>没有值属性用法。图片一旦上传,就会出现在您的服务器上,并且是关于它的。您无法将输入值设置为任何有意义的值。

你当然想要的是显示上传的图片而不是输入,如果用户想要更改它,则显示输入。

编辑:现在我们有了你的PHP代码,我们可以看到你覆盖了$ image变量,即使是空的

$image = $_FILES["image"]["name"];

您必须验证$ _FILES [&#34; image&#34;]是否存在,否则图像将为null或未定义。然后,您将使用错误值更新数据库。我建议您对上传的处理方式与其他数据不同:

<?php
include "config.php";
if(isset($_POST['submit']))
  { 

   $target = "images/".basename($_FILES['image']['name']);
   $v_type = $_POST["v_type"];
   $v_name = $_POST["v_name"];
   $v_man = $_POST["v_man"];
   $v_model = $_POST["v_model"];
   $v_color = $_POST["v_color"];
   $v_trans = $_POST["v_trans"];
   $v_1_15_rent = $_POST["v_1_15_rent"];
   $v_16_25_rent = $_POST["v_16_25_rent"];
   $v_25_plus_rent = $_POST["v_25_plus_rent"];
   $v_reg = $_POST["v_reg"];
   $vendor_name = $_POST["vendor_name"];
   $vendor_mobile = $_POST["vendor_mobile"];
   $vendor_price = $_POST["vendor_price"];

   $v_id=$_GET["v_id"];

   $sql = " UPDATE my_veh_ven SET v_type='$v_type', v_name='$v_name' ,v_man='$v_man' ,v_color='$v_color', v_trans='$v_trans',  v_1_15_rent='$v_1_15_rent' , v_16_25_rent='$v_16_25_rent' ,v_25_plus_rent='$v_25_plus_rent' , v_reg='$v_reg' ,vendor_name='$vendor_name', vendor_mobile='$vendor_mobile' ,vendor_price='$vendor_price'  WHERE v_id='$v_id' ";

  if (mysqli_query($conn, $sql)) 
    {

        if(move_uploaded_file($_FILES['image']['tmp_name'], $target))
                {
                $image = $_FILES["image"]["name"];
                $success = "✓ Successfully Updated";
                $sql = "UPDATE my_veh_ven SET image='$image' WHERE v_id='$v_id' ";
                mysqli_query($conn, $sql)
                }

   }
  else
   {
                $fail = "X  Not Updated";
   }
   }

    mysqli_close($conn);
  ?>

答案 2 :(得分:0)

您的问题有一个简单的解决方案。每当表单提交时,检查是否设置了$ _FILES /是否提供了任何文件。如果提供了任何文件/图像,则根据它更新数据库。如果$ _FILES数组为空,则表示您的图像/文件未上传,因此您可以相应地更新它。

如下所示:

<?php

if(isset($_POST['submit'])){
    //check for files or updated variables
    if(isset($_FILES)){
        //image is provided, now update values accrodingly in your database
        echo "image/file provided";
    }else{
        //image is not uploaded, update other values in database expect image/file
        echo "image/file not provided";
    }

}else{
    ?>
    <html>
        <head><title>My demo form</title></head>
        <body>
            <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post" enctype="multipart/form-data">
            <input type="text" name="data_one">
            <input type="file" name="my_file" accept="image/*">
            <input type="submit" value="submit">
        </body>
    </html>
    <?php
}
?>