Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL:图像成功保存到数据库,但未能在网页上显示_Php_Mysql_Pdo - Fatal编程技术网

PHP/MySQL:图像成功保存到数据库,但未能在网页上显示

PHP/MySQL:图像成功保存到数据库,但未能在网页上显示,php,mysql,pdo,Php,Mysql,Pdo,我的系统有一个很奇怪的问题。我已经创建了一个系统将图像上传到数据库并显示它。问题是,图像已成功上载,但它将返回消息“上载失败!”。然后,已上载的图片不显示。下面是我的代码: <body> <div class="wrapperDiv"> <form action="" method="post" id="form" enctype="multipart/form-data"> U

我的系统有一个很奇怪的问题。我已经创建了一个系统将图像上传到数据库并显示它。问题是,图像已成功上载,但它将返回消息“上载失败!”。然后,已上载的图片不显示。下面是我的代码:

    <body>

        <div class="wrapperDiv">
            <form action="" method="post" id="form" enctype="multipart/form-data">
                Upload image : 
                <input type="file" name="uploadFile" value="" />
                <input type="submit" name="submitBtn" value="Upload" />
            </form>


            <?php
            $last_insert_id = null;
            include('db2.php');
            if(isset($_POST['submitBtn']) && !empty($_POST['submitBtn'])) {
                if(isset($_FILES['uploadFile']['name']) && !empty($_FILES['uploadFile']['name'])) {
                    //Allowed file type
                    $allowed_extensions = array("jpg","jpeg","png","gif");

                    //File extension
                    $ext = strtolower(pathinfo($_FILES['uploadFile']['name'], PATHINFO_EXTENSION));

                    //Check extension
                    if(in_array($ext, $allowed_extensions)) {
                        //Convert image to base64
                        $encoded_image = base64_encode(file_get_contents($_FILES['uploadFile']['tmp_name']));
                        $encoded_image = $encoded_image;
                        $query = "INSERT INTO tbl_images SET encoded_image = '".$encoded_image."'";
                        $sql = $conn->prepare($query);
                        $sql -> execute();
                        //$results = $sql -> fetchAll(PDO::FETCH_OBJ);
                        echo "File name : " . $_FILES['uploadFile']['name'];
                        echo "<br>";
                        if($sql->rowCount() > 1 ) {
                            echo "Status : Uploaded";
                            $last_insert_id = $conn-> lastInsertId(); 
                        } else {
                            echo "Status : Failed to upload!";
                        }
                    } else {
                        echo "File not allowed";
                    }
                }

                if($last_insert_id) {
                    $query = "SELECT encoded_image FROM tbl_images WHERE id= ". $last_insert_id;
                    $sql = $conn->prepare($query);
                    $sql -> execute();
                    if($sql->rowCount($sql) == 1 ) {
                        //$row = mysqli_fetch_object($result);
                        while($row = $sql->fetch(PDO::FETCH_ASSOC)) {
                        echo "<br><br>";
                        echo '<img src="'.$row->encoded_image.'" width="250">';

                        }
                    }
                }
            }
            ?>
        </div>
    </body>

上载图像:

您首先做了一些错误的事情,当存储在数据库中时,您对图像进行了编码,因此您必须再次对其进行解码,并且src in标记获取url而不是图像内容,只是像这样回显内容:

header('Content-type: image/jpeg');
echo base64_decode($row->encoded_image);

encoded_图像。“”width=“250”>
但无论如何,将图像存储在数据库中不是一个好的选择,您的数据库会变得太重,无法快速响应,并且内存太大。您可以将图像名称存储在数据库中,然后将文件从服务器中的特定位置移走,您可以这样显示

echo '<img src="specialRoot/'.$row->image_name.'" width="250">';
echo“image_name.”“width=“250”>;
将图像存储在文件夹中。。 我已经在根目录中创建了uploads文件夹,您可以在任何地方创建文件夹,并在获取图像时写入路径

<body>

    <div class="wrapperDiv">
        <form action="" method="post" id="form" enctype="multipart/form-data">
            Upload image : 
            <input type="file" name="uploadFile" value="" />
            <input type="submit" name="submitBtn" value="Upload" />
        </form>


        <?php
        $last_insert_id = null;
        include('db2.php');
        if(isset($_POST['submitBtn']) && !empty($_POST['submitBtn'])) {
            if(isset($_FILES['uploadFile']['name']) && !empty($_FILES['uploadFile']['name'])) {
                //Allowed file type
                $allowed_extensions = array("jpg","jpeg","png","gif");
                $name = $_FILES['uploadFile']['name'];
                $target_dir = "uploads/";   //give path of your folder where images are stored.
                $target_file = $target_dir . basename($_FILES["uploadFile"]["name"]);
                $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

                //Check extension
                if( in_array($imageFileType,$allowed_extensions) ){
                    //Convert image to base64

                    $image_base64 = base64_encode(file_get_contents($_FILES['uploadFile']['tmp_name']) );
                    $encoded_image = 'data:image/'.$imageFileType.';base64,'.$image_base64;

                    //$encoded_image = base64_encode($_FILES['uploadFile']['tmp_name']);
                    //$encoded_image = $encoded_image;
                    $query = "INSERT INTO tbl_images SET encoded_image = '".$encoded_image."'";
                    $sql = $conn->prepare($query);
                    $result = $sql -> execute();
                    move_uploaded_file($_FILES['uploadFile']['tmp_name'],$target_dir.$name);
                    echo "File name : " . $_FILES['uploadFile']['name'];
                    echo "<br>";

                    if($result == 1) {
                        echo "Status : Uploaded";
                        $last_insert_id = $conn->insert_id;
                    } else {
                        echo "Status : Failed to upload!";
                    }
                } else {
                    echo "File not allowed";
                }
            }

            if($last_insert_id) {

               $query = "SELECT encoded_image FROM tbl_images WHERE id= ". $last_insert_id;
                $result = $conn->query($query);
                while($row = $result->fetch_assoc()){
                    echo '<img src="'.$row['encoded_image'].'" width="250">';
                }
            }
        }
        ?>
    </div>
</body>

上载图像:

如果(在数组(strtolower($ext),$allowed_extensions)中){我想您需要在图像编码字符串之前的src标记之间添加add data:image/png。@VikashDhiman echo'encoded_image.“width=”250“>”;像这样吗failed@manu你能在上面的问题上编辑我的代码吗?我还是不明白
<body>

    <div class="wrapperDiv">
        <form action="" method="post" id="form" enctype="multipart/form-data">
            Upload image : 
            <input type="file" name="uploadFile" value="" />
            <input type="submit" name="submitBtn" value="Upload" />
        </form>


        <?php
        $last_insert_id = null;
        include('db2.php');
        if(isset($_POST['submitBtn']) && !empty($_POST['submitBtn'])) {
            if(isset($_FILES['uploadFile']['name']) && !empty($_FILES['uploadFile']['name'])) {
                //Allowed file type
                $allowed_extensions = array("jpg","jpeg","png","gif");
                $name = $_FILES['uploadFile']['name'];
                $target_dir = "uploads/";   //give path of your folder where images are stored.
                $target_file = $target_dir . basename($_FILES["uploadFile"]["name"]);
                $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

                //Check extension
                if( in_array($imageFileType,$allowed_extensions) ){
                    //Convert image to base64

                    $image_base64 = base64_encode(file_get_contents($_FILES['uploadFile']['tmp_name']) );
                    $encoded_image = 'data:image/'.$imageFileType.';base64,'.$image_base64;

                    //$encoded_image = base64_encode($_FILES['uploadFile']['tmp_name']);
                    //$encoded_image = $encoded_image;
                    $query = "INSERT INTO tbl_images SET encoded_image = '".$encoded_image."'";
                    $sql = $conn->prepare($query);
                    $result = $sql -> execute();
                    move_uploaded_file($_FILES['uploadFile']['tmp_name'],$target_dir.$name);
                    echo "File name : " . $_FILES['uploadFile']['name'];
                    echo "<br>";

                    if($result == 1) {
                        echo "Status : Uploaded";
                        $last_insert_id = $conn->insert_id;
                    } else {
                        echo "Status : Failed to upload!";
                    }
                } else {
                    echo "File not allowed";
                }
            }

            if($last_insert_id) {

               $query = "SELECT encoded_image FROM tbl_images WHERE id= ". $last_insert_id;
                $result = $conn->query($query);
                while($row = $result->fetch_assoc()){
                    echo '<img src="'.$row['encoded_image'].'" width="250">';
                }
            }
        }
        ?>
    </div>
</body>