[英]How to display all the data of a table stored in a MySQL database in PHP
我試圖以 blob 格式顯示包含圖像的表的數據,但我只能顯示最后插入的記錄。 我想顯示所有記錄及其各自的圖像,當添加新記錄時,它將與表數據的 rest 一起顯示。
MYSQL
noticias: idNoticia(PK), idUser(FK), titulo, imagen(LONGBLOB), texto, fecha
PHP - insertarNoticias.php
include('./DB.php');
session_start();
$idUser = $_SESSION['usuario'][0];
$titulo = $_POST['titulo-noticia'];
$texto = $_POST['texto-noticia'];
$fecha = $_POST['fecha-noticia'];
$nombreImagen = $_FILES['imagen']['name'];
$carpetaDestino = $_SERVER['DOCUMENT_ROOT'] . '/masterD/trabajo_final_php/img/';
move_uploaded_file($_FILES['imagen']['tmp_name'], $carpetaDestino . $nombreImagen);
$conexion = DB::conn();
$imagen = fopen($carpetaDestino . $nombreImagen, "r");
$archivoBytes = fread($imagen, intval(filesize($carpetaDestino . $nombreImagen)));
fclose($imagen);
$sentencia = 'INSERT INTO noticias (idUser, titulo, imagen, texto, fecha) VALUES (:idUser, :titulo, :imagen, :texto, :fecha)';
$consulta = $conexion->prepare($sentencia);
$consulta->bindParam(':idUser', $idUser);
$consulta->bindParam(':titulo', $titulo);
$consulta->bindParam(':imagen', $archivoBytes);
$consulta->bindParam(':texto', $texto);
$consulta->bindParam(':fecha', $fecha);
$consulta->execute();
$consulta->closeCursor();
$conexion = null;
PHP - mostrarNoticias.php
include('./DB.php');
session_start();
$titulo = '';
$imagen = '';
$texto = '';
$fecha = '';
$conexion = DB::conn();
$sentencia = 'SELECT * FROM noticias';
$consulta = $conexion->prepare($sentencia);
$consulta->execute();
while ($row = $consulta->fetch(PDO::FETCH_ASSOC)) {
$titulo = $row['titulo'];
$imagen = $row['imagen'];
$texto = $row['texto'];
$fecha = $row['fecha'];
}
$consulta->closeCursor();
$conexion = null;
PHP - adminNoticias.php
<?php
include('./mostrarNoticias.php');
?>
<form class="form" action="./insertarNoticias.php" method="post" id="crear-noticia" enctype="multipart/form-data">
<div class="form-label">
<input type="file" name="imagen" class="form-control mb-3" id="imagen-noticia" required>
<input type="text" class="form-control mb-3" name="titulo-noticia" id="titulo-noticia" placeholder="Título noticia" required>
<input type="text" class="form-control mb-3" name="texto-noticia" id="texto-noticia" placeholder="Texto noticia" required>
<input type="date" class="form-control mb-3" name="fecha-noticia" id="fecha-noticia" required>
</div>
<button type="submit" class="btn btn-success col-12 text-center">
Crear noticia
</button>
</form>
<div class="grid-container pt-4" id="ver-noticias">
<div class="grid-item">
<?php
echo "<h4>$titulo</h4>";
echo "<p>$texto</p>";
echo "<p>$fecha</p>";
echo "<img width='300' height='160' src='data:image/png; base64," . base64_encode($imagen) . "'>";
?>
</div>
</div>
@LuqMan 這就是我的意思
現在它是這樣顯示的
<div class="grid-container">
<div class="grid-item">
<h4></h4>
<p></p>
<p></p>
<img>
<h4></h4>
<p></p>
<p></p>
<img>
</div>
</div>
我希望它看起來像這樣:
<div class="grid-container">
<div class="grid-item">
<h4></h4>
<p></p>
<p></p>
<img>
</div>
<div class="grid-item">
<h4></h4>
<p></p>
<p></p>
<img>
</div>
</div>
您正在循環獲取數據,覆蓋相同的變量。 您需要在循環中顯示變量。 最好創建一個 function 來顯示每一行並從循環中調用它。
一種解決方案如下 -
將包含向下移動到顯示所在的位置
PHP - adminNoticias.php
<form class="form" action="./insertarNoticias.php" method="post" id="crear-noticia" enctype="multipart/form-data">
<div class="form-label">
<input type="file" name="imagen" class="form-control mb-3" id="imagen-noticia" required>
<input type="text" class="form-control mb-3" name="titulo-noticia" id="titulo-noticia" placeholder="Título noticia" required>
<input type="text" class="form-control mb-3" name="texto-noticia" id="texto-noticia" placeholder="Texto noticia" required>
<input type="date" class="form-control mb-3" name="fecha-noticia" id="fecha-noticia" required>
</div>
<button type="submit" class="btn btn-success col-12 text-center">
Crear noticia
</button>
</form>
<div class="grid-container pt-4" id="ver-noticias">
<?php
include('./mostrarNoticias.php');
?>
</div>
並在這里顯示每一行
PHP - mostrarNoticias.php
include('./DB.php');
session_start();
$titulo = '';
$imagen = '';
$texto = '';
$fecha = '';
$conexion = DB::conn();
$sentencia = 'SELECT * FROM noticias';
$consulta = $conexion->prepare($sentencia);
$consulta->execute();
while ($row = $consulta->fetch(PDO::FETCH_ASSOC)) {
$titulo = $row['titulo'];
$imagen = $row['imagen'];
$texto = $row['texto'];
$fecha = $row['fecha'];
?>
<div class="grid-item">
<?php
echo "<h4>$titulo</h4>";
echo "<p>$texto</p>";
echo "<p>$fecha</p>";
echo "<img width='300' height='160' src='data:image/png; base64," . base64_encode($imagen) . "'>";
?>
</div>
<?php
}
$consulta->closeCursor();
$conexion = null;
…………
這里分享了非常簡單的解決方案,但也可能有其他選擇。 您的代碼中的問題是,您的 while 循環繼續其循環,並且循環中的變量在每次迭代時都替換其值。 您可以將每個變量轉換為數組,然后在您想要使用 foreach 循環顯示表格的代碼中使用它們。 但最簡單的解決方案如下:
PHP - mostrarNoticias.php
$output='';
while ($row = $consulta->fetch(PDO::FETCH_ASSOC)) {
$titulo = $row['titulo'];
$imagen = $row['imagen'];
$texto = $row['texto'];
$fecha = $row['fecha'];
$output .= "<h4>$titulo</h4>
<p>$texto</p>
<p>$fecha</p>
<img width='300' height='160' src='data:image/png; base64," . base64_encode($imagen) . "'>";
}
PHP - adminNoticias.php在您的 adminNoticias 文件中,將以下 div 替換為使用從包含所有記錄的先前 while 循環中獲取的 output。
<div class="grid-container pt-4" id="ver-noticias">
<div class="grid-item">
<?php
echo $output;
?>
</div>
</div>
如果您需要任何解釋,我將不勝感激:-)
根據您的評論編輯的版本
DIV 元素可以嵌入 while 循環中,如下所示:
PHP - mostrarNoticias.php
$output='';
while ($row = $consulta->fetch(PDO::FETCH_ASSOC)) {
$titulo = $row['titulo'];
$imagen = $row['imagen'];
$texto = $row['texto'];
$fecha = $row['fecha'];
$output .= "<div class='grid-container pt-4' id='ver-noticias'>";
$output .= "<div class='grid-item'><h4>$titulo</h4>";
$output .="<p>$texto</p>
<p>$fecha</p>
<img width='300' height='160' src='data:image/png; base64," . base64_encode($imagen) . "'></div></div>";
}
現在在 adminNoticias.php 文件中打印 Output
<?php
echo $output;
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.