Профиль изображения не отображается правильно - PHP MySQL - PullRequest
1 голос
/ 02 апреля 2020

У меня проблемы с отображением изображений в профилях моих пользователей. Скрипт, который я имею ниже, действительно перемещает изображение в правильную папку, а также вставляет в БД правильно. Проблема возникает, когда дело доходит до ее отображения в профиле пользователя.

Я думаю, что это связано с моей структурой папок, однако в тот момент, когда я удаляю ../ в $uploadDir до profiles в путь к файлу в скрипте PHP, ничего не работает. Любое руководство будет очень цениться. Когда я проверяю элемент в теге изображения, вы можете видеть, что ../ также выводится на экран, что означает, что он не может найти изображение, так как оно должно быть только profiles/.

My структура папки:

>profiles
    >image1.jpg
    >image2.jpg
>scripts
    >edit-picture.php
>profile.php
>index.php

профиль. php:

<b>Profile Picture: </b>
    <?php 
        $picture = $row['imagePath'];
        if (empty($picture)){
            echo "<img src='profiles/no-image.png' width='100' height='100' >";
        } else {
            echo "<img src='".$row['imagePath']."' width='100' height='100' >";    
        };
    ?>
<form action="scripts/edit-picture.php" method="POST" enctype="multipart/form-data">
<input type="file" name="image"/>
<input type="submit" name="edit-picture" value="Upload"/>

scripts / edit-picture. php:

<?php
    require 'db.php';
    $uploadDir = '../profiles/';

    if (isset($_POST['edit-picture'])) {

        session_start();
        $studentID = $_SESSION['studentID'];

        $fileName = $_FILES['image']['name'];
        $tmpName = $_FILES['image']['tmp_name'];
        $fileSize = $_FILES['image']['size'];
        $fileType = $_FILES['image']['type'];

        $filePath = $uploadDir.$fileName;

        $result = move_uploaded_file($tmpName, $filePath);
        if (!$result) {
            echo "Error uploading file";
            exit;
        }
        else{
            // If image uploads ok, return to this page
            header("Location: ../profile.php?imageuploaded");
        }
        if(mysqli_connect_errno()){
              printf("Connect failed: %s\n", mysqli_connect_error());
            exit();
        }
        if(!get_magic_quotes_gpc()){
            $fileName = addslashes($fileName);
               $filePath = addslashes($filePath);
        } 
        $stmt = $conn->prepare ("INSERT INTO `profileImage` (`imageID`, `imagePath`, `studentID`) VALUES (NULL, ?, ?) ");
        $stmt->bind_param("si", $filePath, $studentID); 
        $stmt->execute() or die("Failed to insert image into the database");
    }
?>

Это данные в таблице (во 2-й строке вы можете увидеть, где находится ошибка в ../ перед именем папки и изображения. db

1 Ответ

3 голосов
/ 02 апреля 2020

Не рекомендуется сохранять адреса каталогов в вашей базе данных. Для ваших изображений вам просто нужно сохранить имя, например, ab c .jpg, а не 'directory / ab c .jpg'. Логика c, стоящая за этим, ясна, вам может понадобиться ссылка на изображения с разных страниц вашего сайта. Если вы добавите каталоги в свою базу данных, это будет действительно трудно, хотя и не невозможно связать изображения и показать их. Следовательно, попробуйте исключить «../profiles/» из названия. Затем, когда бы вы ни показывали изображение, вам будет легко связать его из любой точки вашего сайта. Поэтому просто пропустите следующий блок:

    $uploadDir = '../profiles/';

и измените $ filepath следующим образом:

$filePath = md5($file_name . microtime()) . substr($fileName , -5, 5);

Это имеет два преимущества. Имена файлов никогда не будут перезаписаны, и тогда, ради простого уровня безопасности, студенты не будут идентифицироваться по именам файлов.

Затем, когда вы захотите сделать ссылку на изображение в вашем edit-picture. php, вы напишите

"<img src='../profiles/".$row['imagePath']."' width='100' height='100' >"

и когда вы захотите сделать ссылку на изображение из вашего профиля . php, вы напишет:

"<img src='profiles/".$row['imagePath']."' width='100' height='100' >" 

Кстати, в вашем php коде вы используете get_magic_quotes_gp c. Прежде всего, это не очень хорошая практика, затем старайтесь постоянно обновлять версию php. Php Официальный сайт, относительно get_magic_quotes_gp c говорит:

Предупреждение Эта функция УСТАРЕЛА с PHP 7.4.0. Полагаться на эту функцию крайне не рекомендуется.

Попробуйте использовать другие php функции безопасности. Удачи.

...