使用php(通过链接和新窗口)在mysql数据库中显示保存为blob的图像

时间:2014-03-20 06:58:56

标签: javascript php mysql popup

我正在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>

如果有人可以帮助我,我会非常感激。提前谢谢。

1 个答案:

答案 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'];
    ?>