Я не могу показать изображение, которое находится на сервере mysql, в поле blob. Сохранение изображений в mysql работает, я могу извлекать данные, но когда я хочу их отобразить, я не могу. Попробуйте реализовать пример, приведенный на этом веб-сайте: [baulphp] 1
В основном он вызывает файл PHP, который извлекает изображение и возвращает его, переписывая заголовок с функция заголовка, а затем эхо содержимого. Но проблема в том, что я пробую это в проекте MVC и POO, и URL-адрес дружественный, а URL-адреса переписываются через .htaccess. Итак, я не могу напрямую вызвать файл PHP, как пример из той сети ...
Я попытался сделать это из примера в действии контроллера и вызвать его внутри тега IMG, но это не так. тоже не работает.
это мой код, это форма представления:
<form method="POST" action="<?= BASE_URL ?>productos/<?= $metodo ?>" enctype="multipart/form-data">
<h2><?= $texbut ?> Producto</h2>
<p><label for="p_nombre">Nombre del Producto:<span class="asterisco"> *</span></label></p>
<p><input type="text" name="p_nombre" <?= $_SESSION['abm_prod'] == 3 ? 'disabled="disabled"' : '' ?>
value="<?= $_SESSION['abm_prod'] > 1 ? $prod2edit->p_nombre : ''; ?>" id="p_nombre" maxlength="100"
required="required" autofocus="autofocus" placeholder="Ingrese nombre del producto..."> </p>
<p><label for="p_descrip">Descripcion del Producto:</label></p>
<p><textarea name="p_descrip" <?= $_SESSION['abm_prod'] == 3 ? 'disabled="disabled"' : '' ?>
id="p_descripcion" autofocus="autofocus"
placeholder="Ingrese descripción del producto..."><?= $_SESSION['abm_prod'] > 1 ? $prod2edit->p_descripcion : ''; ?></textarea></p>
<p><label for="p_red">Nombre reducido:</label></p>
<p><input type="text" name="p_red" <?= $_SESSION['abm_prod'] == 3 ? 'disabled="disabled"' : '' ?>
value="<?= $_SESSION['abm_prod'] > 1 ? $prod2edit->p_red : ''; ?>"
id="p_red" maxlength="20" autofocus="autofocus" placeholder="Ingrese nombre reducido/corto..."> </p>
<p><label for="p_imagen">Cargar foto del producto</label></p>
<div class="abmformcontent2 clearfix">
<div class="abmformleft">
<input class="botonfoto" type="file" name="p_imagen" />
<?php if(isset($_SESSION['errorimg'])): ?>
<p class="errores"><?= $_SESSION['errorimg'] ?></p>
<?php endif; ?>
<p><label for="p_precio">Precio:<span class="asterisco"> *</span></label></p>
<p><input class="inputval" type="text" name="p_precio" <?= $_SESSION['abm_prod'] == 3 ? 'disabled="disabled"' : '' ?>
value="<?= $_SESSION['abm_prod'] > 1 ? $prod2edit->p_precio : ''; ?>"
id="p_precio" required="required" autofocus="autofocus" placeholder="Ingrese precio del producto ..."> </p>
<p><label for="p_stock">Stock:</label></p>
<p><input class="inputval" type="number" name="p_stock" <?= $_SESSION['abm_prod'] == 3 ? 'disabled="disabled"' : '' ?>
value="<?= $_SESSION['abm_prod'] > 1 ? $prod2edit->p_stock : ''; ?>"
id="p_stock" autofocus="autofocus" placeholder="Stock actual..."> </p>
<?php $categorias = Utilidades::Cat_for_menu(); ?>
<p><label for="p_catid">Seleccione Categoría:</label></p>
<select class="selectorcat" name="p_catid" <?= $_SESSION['abm_prod'] == 3 ? 'disabled="disabled"' : '' ?>>
<?php while ($cat = $categorias->fetch_object()): ?>
<option value="<?= $cat->c_id ?>" <?= $_SESSION['abm_prod'] > 1 && $cat->c_id==$prod2edit->p_categoria_id ? 'selected' : ''; ?> >
<?= $cat->c_nombre ?>
</option>
<?php endwhile; ?>
</select>
</div>
<div class="abmformright">
<img src='<?= BASE_URL ?>productos/viewimg&p_id=<?= $prod2edit->p_id ?>' alt='Imagen producto' />
</div>
</div>
<p><input type="number" hidden="hidden" name="p_id" value="<?= isset($prod2edit->p_id) ? $prod2edit->p_id : ''; ?>" ></p>
<div class="boton3">
<input type="submit" class="boton" value="Confirmar">
<a href="<?=BASE_URL?>productos/gestion"><input type="button" class="boton" value="Cancelar"></a>
</div>
</form>
А вот часть контроллера и действие:
require_once 'models/mproductos.php';
require_once 'models/mimages.php';
Class ProductosController{
public function viewimg() {
$id = filter_input(INPUT_GET, 'p_id', FILTER_SANITIZE_NUMBER_INT);
if($id>0){
//Credenciales de conexion
$Host = 'localhost';
$Username = 'prueba';
$Password = '123456';
$dbName = 'macrotienda';
//Crear conexion mysql
$db = new mysqli($Host, $Username, $Password, $dbName);
//revisar conexion
if($db->connect_error){
die("Connection failed: " . $db->connect_error);
}
//Extraer imagen de la BD mediante GET
$result = $db->query("SELECT * FROM images WHERE i_producto = $id");
if($result->num_rows > 0){
$imgDatos = $result->fetch_assoc();
//Mostrar Imagen
header("Content-type: ".$imgDatos['i_mimetype']);
echo $imgDatos['i_content'];
}else{
echo 'Imagen no existe...';
}
}
}
// *************************************************************************
public function gestion() {
$productos = new mProductos();
$allproductos = $productos->Traer_Todos();
require_once 'views/products/gestion.php';
}
Уточнение: Как видно в действии "viewimg", это все соединение, то есть только в тестовом режиме, потому что на самом деле этот класс наследует параметры соединения, тестирует оба способа и оба получают объект базы данных ...
Вот это когда вы записываете изображение:
public function create() {
$insert = "insert into macrotienda.images values(null,".
" '$this->filename', ".
" '$this->mimetype', ".
" $this->height, ".
" $this->width, ".
" '$this->hwtext', ".
" $this->size, ".
" '$this->content', ".
" now(), ".
" $this->producto_id ) ";
$result = $this->conn->query($insert);
return $result;
здесь, когда вы назначаете эти данные:
$imagen = $_FILES['p_imagen'];
$ftype = $imagen['type'];
$fsize = $imagen['size'];
$ftmp = $imagen['tmp_name'];
$ftamaño = getimagesize($ftmp);
$image = new mimages();
$image->setFilename($imagen['name']);
$image->setHeight($ftamaño[0]);
$image->setWidth($ftamaño[1]);
$image->setHwtext($ftamaño[3]);
$image->setMimetype($ftype);
$image->setSize($fsize);
$image->setContent(addslashes(file_get_contents($ftmp)));
Я все еще новичок в PHP программировании ... как мне показать изображение?
СПАСИБО