我正在PHP中实现一个功能,其中大部分已经实现。我是PHP的新手,所以我不是很习惯它。
但我的示例的目标是将图像存储在数据库中(带有一些其他属性,如id和name)。然后,每当我将图像作为blob保存到数据库时,它会在表格中列出记录,但不是在表格中显示图像,我应该看到链接ilke“查看图片”,每当我打开该链接时,会出现一个弹出窗口包含存储在DB中的图像。
我的表有三列:id(int),name(varchar)和img(blob)。
我尝试了以下操作,但没有工作:
echo "<td><a href='#openModal'><img src='" + $row[2] + "' />Ver imagen</a></td>";
我知道我现在没有使用最佳做法,但我会重构这一点,首先我需要它,到目前为止我有:
<html>
<head><title>Ejemplo de carga de imagen</title></head>
<body>
<form enctype="multipart/form-data" action=
"<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="10000000" />
<p>Id</p><input type="text" name="id" /><br/>
<p>Imagen</p><input name="userfile" type="file" />
<input type="submit" value="Submit" />
</form>
<?php
if(!isset($_FILES['userfile']))
{
echo '<p>Por favor seleccione un archivo</p>';
}
else
{
try {
$msg= upload();
echo $msg;
}
catch(Exception $e) {
echo $e->getMessage();
echo 'La imagen no pudo ser cargada';
}
}
function upload() {
include "file_constants.php";
$maxsize = 10000000;
if($_FILES['userfile']['error']==UPLOAD_ERR_OK) {
if(is_uploaded_file($_FILES['userfile']['tmp_name'])) {
if( $_FILES['userfile']['size'] < $maxsize) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
if(strpos(finfo_file($finfo, $_FILES['userfile']['tmp_name']),"image")===0) {
$imgData =addslashes (file_get_contents($_FILES['userfile']['tmp_name']));
mysql_connect($host, $user, $pass) OR DIE (mysql_error());
mysql_select_db ($db) OR DIE ("No se puede seleccionar bd".mysql_error());
$id = (int)$_POST['id'];
$sql = "INSERT INTO tb_doc_img
(codigo, descripcion, data)
VALUES
('$id', '{$_FILES['userfile']['name']}', '{$imgData}');";
mysql_query($sql) or die("Error in Query: " . mysql_error());
$msg='<p>Imagen guardada en bd</p>';
$result = mysql_query("SELECT * FROM tb_doc_img");
if (!$result) {
die("Query to show fields from table failed");
} else {
echo "<table border='1'>";
while($row = mysql_fetch_row($result))
{
echo "<tr>";
echo "<td>$row[0]</td>";
echo "<td>$row[1]</td>";
echo "<td><a href='#openModal'><img src='" + $row[2] + "' />Ver imagen</a></td>";
echo "</tr>";
}
echo "</table>";
}
$fields_num = mysql_num_fields($result);
}
else
$msg="<p>Archivo seleccionado no es una imagen.</p>";
}
else {
$msg='<div>Tamaño de archivo muy grande</div>
<div>El límete de carga es '.$maxsize.' bytes</div>
<div>Archivo '.$_FILES['userfile']['name'].' con peso '.$_FILES['userfile']['size'].
' bytes</div><hr />';
}
}
else
$msg="No se pudo cargar el archivo.";
}
else {
$msg= file_upload_error_message($_FILES['userfile']['error']);
}
return $msg;
}
function file_upload_error_message($error_code) {
return 'Error al procesar la imagen';
}
?>
</body>
</html>
如果有人可以帮助我,我会非常感激。提前谢谢。
答案 0 :(得分:1)
尝试以下逻辑
<?php
$image = mysql_query("SELECT * FROM images");
?>
获取ID的循环
<?php
while($row = mysql_fetch_assoc($image))
{
echo '<a href="imgage.php?id='.$row[1].'">image_name</a>';
}
?>
然后创建页面
image.php
<?php
$query = mysql_query("SELECT image FROM images WHERE id = ".$_GET['id']);
$row = mysql_fetch_assoc($query);
header("Content-type: image/jpeg");
echo $row['image'];
?>