PHP имя картинки из sql не загружается - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть корзина покупок PHP, над которой я работаю.Все мои фотографии хранятся в каталоге URL моего проекта.В моей базе данных SQL у меня есть таблица изображений, которая содержит все имена изображений.Когда я загружаю имена картинок своим php, он каким-то образом добавляет несколько дополнительных случайных символов в путь к каталогу: / img /% 7B $ row_product_image [name]% 7D 404 (не найдено) Если я жестко закодирую каталог изображений img / picturename.jpgработает.Вот что у меня есть.

<?php
include_once "objects/database.php";
include_once "objects/product.php";
include_once "objects/product_images.php";
// object instances
$database = new Database();
$db = $database->getConnection();
$product = new Product($db);
$product_image = new ProductImage($db);
$recordsPerPage = 1;
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    extract($row);
    echo '<div class="col-md-4 mb-2">';
        echo '<div class="product-id d-none">{$id}</div>';
            echo '<a href="product.php?id={$id}" class="product-link">';
                $product_image->product_id = $pid;
                $stmt_product_image = $product_image->readFirst();
                while($row_product_image = $stmt_product_image->fetch(PDO::FETCH_ASSOC)) {
                    echo '<div class="mb-1">';
                        echo '<img src="img/{$row_product_image[name]}" class="w-100" />';
                    echo '</div>';
                }
                echo '<div class="product-name mb-1">{$name}</div>';
            echo '</a>';

    echo '</div>';
}
class ProductImage {
    private $pdoConn;  private $table_name = "product_images";
    public $id;
    public $product_id;
    public $name;
    public $timestamp;
    public function __construct($dbconn) {
        $this->pdoConn = $dbconn;
    }
    function readFirst() {
        // SELECT query
        $query = "SELECT id, pid, name " .
                 "FROM " . $this->table_name . " " .
                 "WHERE pid = ? " .
                 "ORDER BY name DESC " .
                 "LIMIT 0, 1";
        // prepare query statement
        $stmt = $this->pdoConn->prepare($query);
        // sanitize
        $this->product_id=htmlspecialchars(strip_tags($this->product_id));
        // bind variable as parameter
        $stmt->bindParam(1, $this->product_id);
        // execute query
        $stmt->execute();
        // return values
        return $stmt;
    }
}
?>

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019
echo '<img src="img/{$row_product_image[name]}" class="w-100" />';

PHP НЕ будет расширять переменные, если строка заключена в одинарные кавычки ( docs ).Также вам нужно заключить в кавычки строку «name», чтобы использовать ее в качестве индекса массива ( docs ).

При этом исправьте это, избегая одинарных кавычек (но это уродливо, так что не):

echo "<img src=\"img/{$row_product_image['name']}\" class=\"w-100\" />";

или менее болезненно читать:

echo '<img src="img/' . $row_product_image['name'] . '" class="w-100" />';

или даже использовать printf(), чтобы избежать спагетирования строки:

printf('<img src="img/%s" class="w-100" />', $row_product_image['name']);
0 голосов
/ 12 февраля 2019

Попробуйте этот код: <? Php while ($ product_rows = mysqli_fetch_array ($ query_run)) {?>

image "class =" img-responseive "?>
<? php}?>
0 голосов
/ 12 февраля 2019
while($row_product_image = $stmt_product_image->fetch(PDO::FETCH_ASSOC)) {
                echo '<div class="mb-1">';
                echo '<img src="img/'.$row_product_image['name'].'" class="w-100" />';
                echo '</div>';
            }

попробуйте

...