Ошибка PHP, невозможно вставить изображение в базу данных - PullRequest
0 голосов
/ 05 января 2019

Я новичок в php, я пытаюсь вставить данные в базу данных, к сожалению, я успешно ввел имя и цену, но я застрял при вставке картинки (LONGBLOB), вот мой код

<?php
    $servername = "localhost";
    $username = "root";
    $password = "root";
    $dbname = "tbl_product";
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    if(isset($_POST['update']))
    {
        $name = $_POST['name'];
        $image = $_FILES['image'];
        $price = $_POST['price'];
        $statement = $conn->prepare('INSERT INTO tbl_product (name, image, price)
            VALUES (:name, :image, :price)');   
        $statement->execute([
                ':name' => $name,
                ':image' => $image,
                ':price' => $price,
        ]);
    }
?>

<div class="settings-row">
    <h3>Name</h3>
    <form action="insertscript.php" method="post" enctype="multipart/form-data"> 
        <div class="form-group">
            <input type="text" class="form-control" name="name">           

            <h3>Image</h3>
            Select image to upload:
            <input type="file" name="image">

            <h3>Price</h3>
            <input type="number" class="form-control small-input" name="price" >
            <input type="submit" value="Submit" name="update" id="update">
         </div>
    </form>
</div>

<? echo '<img src="data:image/jpeg;base64,'.base64_encode( $row['image'] ).'" class="img-responsive"/>';?><br />

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Согласно комментарию, который я сделал, кажется, что вы хотите сохранить фактические данные файла, а не путь к файлу, поэтому используйте file_get_contents для загруженного изображения - как это возможно ...

<?php

    $servername = "localhost";
    $username = "root";
    $password = "root";
    $dbname = "tbl_product";

    $conn = new PDO( "mysql:host=$servername;dbname=$dbname", $username, $password );
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );


    /*
        catch errors
    */
    try{
        /*
            test that imprtant variables are set 
        */
        if( isset( $_POST['update'], $_POST['name'], $_POST['price'] ) && !empty( $_FILES['image'] ) ) {

            $name = $_POST['name'];
            $price = $_POST['price'];

            /*
                get reference to uploaded image
            */
            $obj=(object)$_FILES['image'];
            $tmp=$obj->tmp_name;
            $error=$obj->error;

            /*
                if there were no errors with upload, proceed to insert into db
            */
            if( $error == UPLOAD_ERR_OK && is_uploaded_file( $tmp ) ){

                /*
                    as the column is a longblob it suggests that you wish to store the actual file rather than the path
                    - this will lead to a mahoosive database in quite a short time!!
                */
                $image=base64_encode( file_get_contents( $tmp ) );


                $statement = $conn->prepare('INSERT INTO tbl_product (`name`, `image`, `price`) VALUES (:name, :image, :price)');
                $args=array(
                    ':name'     => $name,
                    ':image'    => $image,
                    ':price'    => $price
                );

                $result = $statement->execute( $args );

            } else {
                throw new Exception('Upload failed');
            }
        }
    }catch( Exception $e ){
        exit( $e->getMessage() );
    }
?>

Чтобы отобразить изображение, которое было сохранено как данные в кодировке base64, как указано выше, необходимо изменить синтаксис для тега img. Например:

<img src='data:image/jpeg;base64, /9j/4AAQSkZJRgABAQEAYABgAAD//gA+Q1JFQVRPU...... etc etc 
0 голосов
/ 05 января 2019

Я думаю, что ваша база данных не совпадает с вашей таблицей .. попробуйте это и замените '---- datatable ---'. И вы должны конвертировать изображение в blob с помощью file_get_contents

<?php
if (isset($_POST)) {
  $servername = "localhost";
  $username = "root";
  $password = "root";
  $dbname = "----datatable---";
      $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
      // set the PDO error mode to exception
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  if(isset($_POST['update']))
  {
  $name = $_POST['name'];
  $image = file_get_contents($_FILES['image']['tmp_name']);
  $price = $_POST['price'];
  $statement = $conn->prepare('INSERT INTO tbl_product (name, image, price)
      VALUES (:name, :image, :price)');
  $statement->execute([
      ':name' => $name,
      ':image' => $image,
      ':price' => $price
  ]);
  }
}

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...