在 Php 页面中显示来自数据库的图像

Display image from database in Php page

我试着用图片做在线测验,我需要你的help/advice。我的图像存储在 ID 为 "image" 的数据库中。我的上传工作正常,图像存储在数据库中...但我无法在问题中显示图像。

我成功显示了图像和名称的图标,但不是图像。图像存储在 base64_encode 数据库中,这是我数据库中的结构。

我的代码的结果在这里:http://imageshack.com/a/img922/6874/U4hkbj.jpg

我把名字放在那里是为了验证我与数据库的连接,这在最终代码中不是必需的。

这里是显示图片的代码:

 require_once("scripts/connect_db.php");
    $res=mysqli_query($connection, "SELECT * FROM questions WHERE id='$question'");

            echo "<table>";
            while($row=mysqli_fetch_array($res)) {

                echo "<tr>";
                echo "<td>";?> <img src= data:image/png;base64 ' . $row['image']; .  '  > <?php echo "</td>";
                echo "<td>" ; echo $row["name"]; echo" </td>";

                echo "</tr>";

            }
            echo "</table>";

这是我用图片显示问题的代码:

   <?php 
   session_start();
   require_once("scripts/connect_db.php");
   $arrCount = "";
    if(isset($_GET['question'])){
$question = preg_replace('/[^0-9]/', "", $_GET['question']);
$output = "";
$answers = "";
$q = "";
$sql = mysqli_query($connection, "SELECT id FROM questions");
$numQuestions = mysqli_num_rows($sql);
if(!isset($_SESSION['answer_array']) || $_SESSION['answer_array'] < 1){
    $currQuestion = "1";
}else{
    $arrCount = count($_SESSION['answer_array']);
}
if($arrCount > $numQuestions){
    unset($_SESSION['answer_array']);
    header("location: index.php");
    exit();
}
if($arrCount >= $numQuestions){
    echo 'finished|<p>There are no more questions. Please enter your first and last name and click next</p>
            <form action="userAnswers.php" method="post">
            <input type="hidden" name="complete" value="true">
            <input type="text" name="username">
            <input type="submit" value="Finish">
            </form>';
    exit();
}


    require_once("scripts/connect_db.php");
    $res=mysqli_query($connection, "SELECT * FROM questions WHERE id='$question'");

            echo "<table>";
            while($row=mysqli_fetch_array($res)) {

                echo "<tr>";
                echo "<td>";?> <img src= data:image/png;base64 ' . $row['image']; .  '  > <?php echo "</td>";
                echo "<td>" ; echo $row["name"]; echo" </td>";

                echo "</tr>";

            }
            echo "</table>";




    $singleSQL = mysqli_query($connection, "SELECT * FROM questions WHERE id='$question' LIMIT 1");
                    while($row = mysqli_fetch_array($singleSQL)){
        $id = $row['id'];
        $thisQuestion = $row['question'];
        $type = $row['type'];
        $question_id = $row['question_id'];
        $q = '<h2>'.$thisQuestion.'</h2>';
        $sql2 = mysqli_query($connection, "SELECT * FROM answers WHERE question_id='$question' ORDER BY rand()");
        while($row2 = mysqli_fetch_array($sql2)){
            $answer = $row2['answer'];
            $correct = $row2['correct'];
            $answers .= '<label style="cursor:pointer;"><input type="radio" name="rads" value="'.$correct.'">'.$answer.'</label> 
            <input type="hidden" id="qid" value="'.$id.'" name="qid"><br /><br />
            ';

        }
        $output = ''.$q.','.$answers.',<span id="btnSpan"><button onclick="post_answer()">Submit</button></span>';
        echo $output;
       }
    }
?>

我是 php 的新人,这是我的第一个项目,我真的需要你的帮助来解决我的问题。

非常感谢您的帮助和关注!

编辑:图像使用以下代码存储在数据库中:

if (isset($_FILES['image'])) {
$name = $_FILES['image']['tmp_name'];
$image = base64_encode(
    file_get_contents(
        $_FILES['image']['tmp_name']
    )
);

您忘记了引号和逗号的换行,并且您没有回显 $row['image']。变化:

<img src= data:image/png;base64 ' . $row['image']; .  '  >

至:

<img src="data:image/png;base64,<?= $row['image'] ?>"  >

或(与您的全局语法一致)到:

echo '<img src="data:image/png;base64,' . $row['image'] . '">';

编辑:

我在你最后的评论中看到了 pastebin。首先,我认为它不是 HTML 来源,而是来自页面检查器的来源(在 DOM 渲染之后)。如果查看代码,您会发现没有任何 <img> 标记。您呈现的代码是:

<div id="answers">/9j/(...)/2Q=="&gt;<h2>
                  └────────────┘
                   base64 image

base64 编码的图像是正确的(如您所见here),但它没有被正确的 <img> 标签包裹:

<img src="data:image/png;base64,/9j/(...)/2Q==">
                                └────────────┘
                                 base64 image

看到你的代码:

echo "<table>";
while($row=mysqli_fetch_array($res)) {
    echo '<img src="data:image/png;base64,' . $row['image'] . '">';
}
echo "</table>";

即使<table><img></table>无效HTML,我认为问题不在你的HTML,而是在你的javascript,可能在getQuestion() 功能:深入测试以检索正确的代码。