Не удалось сохранить файл изображения в таблице postgresql - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь сохранить файл изображения в таблице базы данных PSQL. Таблица 'images' имеет два поля: 'id' типа integer и 'image' типа bytea.

Я пытался изменить код сохранения изображения из учебника в Интернете. Но мой код вызывает ошибку и предупреждение.

Вот сообщение об ошибке:

Notice: Undefined index: image in C:\xampp\htdocs\maps\un.php on line 48

Warning: fopen(): Filename cannot be empty in C:\xampp\htdocs\maps\un.php on line 50
cannot read image 

Эти ошибки находятся в строках внутри if(isset($_POST["submit1"])){ блока

Как исправить эти ошибки?

Вот мой код:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Image Upload</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>

</head>
<body>
<?php
require("connection.php");
?>

<div class="container-fluid">
          <h1 align="center">Test Form </h1>

   <form action="" method="post" class="needs-validation" novalidate enctype="multipart/form-data"> 
    <h2> Field </h2>
  <div class="form-row">
    <div class="col-md-4 mb-3">
      <label for="validationCustom01">Field ID</label>
      <input type="number" class="form-control" name="field_id" id="field_id" placeholder="insert field id" value="" required>
      <div class="valid-feedback">
        0
      </div>
    </div>
      <div class="col-md-4 mb-3">
      <label for="validationCustom02">IMG</label>
      <input type="file" class="form-control" name="image" id="image" placeholder="insert image" value="" required>
      <div class="valid-feedback">

      </div>
    </div>      
   </div>

  <button class="btn btn-primary" name="submit1" type="submit">Insert Image</button>
</form>


    <?php

          if(isset($_POST["submit1"])){

              $file_name = $_POST["image"];

              $img = fopen($file_name, 'r') or die("cannot read image\n");
              $data = fread($img, filesize($file_name));

              $es_data = pg_escape_bytea($data);
              fclose($img);   


            try {

                $sql = "INSERT INTO images (field_id, image)
                VALUES ('".$_POST["field_id"]."','.$es_data.')";
                 // echo "<meta http-equiv='refresh' content='0'>";
                if ($conn->query($sql)) {
                     echo "<script type= 'text/javascript'>alert('New Record Inserted Successfully');</script>";
                          }
                          else{
                            echo "<script type= 'text/javascript'>alert('Data not successfully Inserted.');</script>";
                      }
                            $dbh = null;
                    }
                        catch(PDOException $e)
                    {
                        echo $e->getMessage();
                        }
                    }   

                    //$conn = null;

                    ?>

    </div>    
</body>
</html> 

1 Ответ

0 голосов
/ 06 ноября 2018

Файлы хранятся в суперглобальном $_FILES. В $_POST.
нет изображения Имя файла будет $_FILES["image"]["tmp_name"]. Это путь, по которому php временно загружает его, и вы можете справиться с этим.

Ссылка: https://secure.php.net/manual/en/reserved.variables.files.php
https://secure.php.net/manual/en/features.file-upload.php

PS: Ваш код уязвим для SQL-инъекций. Пожалуйста, используйте подготовленные заявления или PDO.

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