Как бы мне не обновить изображение из моих файлов и базы данных? - PullRequest
1 голос
/ 12 января 2020

Иногда я сталкиваюсь с этой проблемой с формой обновления, которая содержит файлы для загрузки в базу данных. Теперь, чтобы объяснить: у меня есть форма для отправки с двумя полями ввода. Первый вход - это имя изображения, а второй - само изображение. Форма отправляется на загрузку. php как вы видите код

выгрузка. php

    if(isset($_POST['submit'])){

    include 'connection.php';

    $imageName=$_POST['imageName'];
    $image=$_FILES['image'];

    $imageTmpName=$image['tmp_name'];
    $imageName=$image['name'];

    $imageExt=explode('.',$imageName);
    $imageExt=strtolower(end($imageExt));

    $newImageName=uniqid('',true).'.'.$imageExt;
    $path='C:/xampp/htdocs/test/img/'.$newImageName;

    if(move_uploaded_file($imageTmpName,$path)){
        echo 'file moved';

    }

    $query="INSERT INTO imagedata(imageName,image) VALUES ('$imageName','$newImageName')";
    if(mysqli_query($conn,$query)){
        echo 'data posted to database';
    }
}

Как вы видите из кода, я перемещаю изображение временное имя на мой путь и в то же время я и сохраняю новое имя изображения в базе данных. Я использую тот же принцип обновления имени изображения и самого изображения в новой форме, которая отправляется для обновления. php, как показано ниже:

    if(isset($_POST['update'])){

    include 'connection.php';

    $uImageName=$_POST['uimageName'];
    $uImage=$_FILES['uImage'];

    $uImageTmpName=$Image['tmp_name'];
    $uImageName=$uImage['name'];

    $uImageExt=explode('.',$uImageName);
    $uImageExt=strtolower(end($uImageExt));

    $uNewImageName=uniqid('',true).'.'.$uImageExt;
    $uPath='C:/xampp/htdocs/test/img/'.$uNewImageName;

    if(move_uploaded_file($uImageTmpName,$uPath)){
        echo 'file updatet';

    }

    $query="UPDATE imagedata SET imageName='$uImageName',image='$uNewImageName'";
    if(mysqli_query($conn,$query)){
        echo 'data updatet to database';
    }
}

Помните, что я запрашиваю базу данных и отображаю значения внутри самих полей ввода. Теперь проблема возникает в файле обновления. php, всякий раз, когда я обновляю имя изображения без загрузки какого-либо нового изображения, оно обновляет базу данных пустым изображением и возвращает его в мою форму обновления.

Итак, что я хочу сделать, это когда я хочу обновить базу данных без изображения из моей формы обновления, я хочу, чтобы предыдущее загруженное изображение оставалось прежним. Или, если я хочу, чтобы новое изображение было загружено в базу данных, тогда я хочу обновить базу данных новым изображением, а также удалить старое изображение, которое я ранее загрузил. Я хочу поблагодарить вас за вашу помощь с этим

1 Ответ

0 голосов
/ 12 января 2020

Простой способ сохранить старое изображение, если новое изображение не выбрано!

Вот простой способ, создать скрытый ввод и повторить имя старого изображения в значении, а также сохранить новое значение изображения пустым, как показано ниже:

<input type="hidden" name="YourOldFile" value="YourOldFileName">
<input type="file" name="YourNewFile" value="">

Затем выполните оператор if в PHP part:

if(!empty($POST['YourNewFile'])) {
   $newFile = $_POST['YourNewFile'];
   // Then do your update query with uploading new image here and delete old image from the server.
} else {
   $YourOldFileName = $_POST['YourOldFile'];
   //Then do your query here with oldname and do not delete image from server.
}

Примечание: вы можете сделать то же самое для вставки и обновления, и вам нужно задать условие where для запроса на обновление.

ОБНОВЛЕНИЕ:

Отображение с расширением изображения или без него - это другой вопрос, поскольку он является частью вашего кода загрузки, а также способа сохранения и отображения. Итак, ваши коды на странице выглядят так:

include 'connection.php';

if(!empty($_FILES['uImageName'])) {
   // Then do your update query with uploading new image here and delete old image from the server.
    if(isset($_POST['update'])){

        $uImageName=$_FILES['uimageName'];
//Your upload code doesnt look right coded to me, I would use an upload class, You can search for how to upload image
// I use verot upload class its very simple.

        $uImageTmpName=$Image['tmp_name'];
        $uImageName=$uImage['name'];

        $uImageExt=explode('.',$uImageName);
        $uImageExt=strtolower(end($uImageExt));

        $uNewImageName=uniqid('',true).'.'.$uImageExt;
        $uPath='C:/xampp/htdocs/test/img/'.$uNewImageName;

        if(move_uploaded_file($uImageTmpName,$uPath)){
            echo 'file updated';

        }

        $query="UPDATE imagedata SET imageName='$uImageName'";
        if(mysqli_query($conn,$query)){
            echo 'data updatet to database';
        }
    }
} else {
   $YourOldFileName = $_POST['YourOldFile'];

   //Then do your query here with oldname and do not delete image from server.

    //Solution 1. You can update image column with your old image name.

    $query="UPDATE imagedata SET image='$YourOldFileName'";

    //Solution 2. You can update all other columns without image column dont update image column and dont include image column in your query.

    $query="UPDATE imagedata SET yourColumnName='$DataYouWantToInsert'";
    if(mysqli_query($conn,$query)){
        echo 'data updatet to database';
    }
}

<form>
/*Your inputs here*/
<input type="hidden" name="YourOldFile" value="YourOldFileName">
<input type="file" name="YourNewFile" value="">
/*Your buttons*/
</form>

Читать комментарии в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...