복붙노트

PHP 코드를 사용하여 MySQL 데이터베이스에 이미지를 업로드하는 방법

PHP

PHP 코드를 사용하여 MySQL 데이터베이스에 이미지를 업로드하는 방법

HTML 양식에서 데이터베이스에 이미지를 저장하려고합니다. 이 작업을 수행하기 위해 PHP 코드를 작성했습니다. 이 프로그램은 오류 메시지를 생성하지 않고 MySQL 데이터베이스에 이미지 데이터를 삽입하지 않습니다. 친절하게 확인하십시오. 여기 내 코드에서 발췌 부분을 공유하고 있습니다.

        /*-------------------
    IMAGE QUERY 
    ---------------*/


    $file   =$_FILES['image']['tmp_name'];
    if(!isset($file))
    {
      echo 'Please select an Image';
    }
    else 
    {
       $image_check = getimagesize($_FILES['image']['tmp_name']);
       if($image_check==false)
       {
        echo 'Not a Valid Image';
       }
       else
       {
        $image = file_get_contents ($_FILES['image']['tmp_name']);
        $image_name = $_FILES['image']['name'];
        if ($image_query = mysql_query ("insert into product_images values (1,'$image_name',$image )"))
        {
          echo $current_id;
         //echo 'Successfull';
        }
        else
        {
          echo mysql_error();
        }
       }
   }
        /*-----------------
    IMAGE QUERY END
    ---------------------*/

    <form action='insert_product.php' method='POST' enctype='multipart/form-data' ></br>
            File        : <input type='file' name= 'image' >
    </form>

해결법

  1. ==============================

    1.먼저 이미지 열이 BLOB 유형인지 확인해야합니다.

    먼저 이미지 열이 BLOB 유형인지 확인해야합니다.

    나는 당신의 SQL 테이블에 대해 아무 것도 모른다. 그러나 나는 내 자신을 예제로 만들려고 노력할 것이다.

    필드 id (int), image (blob) 및 image_name (varchar (64))이 있습니다.

    따라서 코드는 다음과 같아야합니다 (ID는 항상 '1'이고이 mysql_query를 사용합니다).

    $image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); //SQL Injection defence!
    $image_name = addslashes($_FILES['image']['name']);
    $sql = "INSERT INTO `product_images` (`id`, `image`, `image_name`) VALUES ('1', '{$image}', '{$image_name}')";
    if (!mysql_query($sql)) { // Error handling
        echo "Something went wrong! :("; 
    }
    

    여러 가지면에서 잘못하고 있습니다. mysql 함수를 사용하지 마십시오. PDO 또는 MySQLi를 사용하십시오. 디스크에 파일 위치를 저장하는 것도 고려해야합니다. 이미지를 저장하기 위해 MySQL을 사용하는 것은 Bad Idea ™라고 생각됩니다. 이미지와 같은 큰 데이터로 SQL 테이블을 처리하는 것은 문제가 될 수 있습니다.

    또한 HTML 양식이 표준을 벗어났습니다. 다음과 같이 표시되어야합니다.

    <form action="insert_product.php" method="POST" enctype="multipart/form-data">
        <label>File: </label><input type="file" name="image" />
        <input type="submit" />
    </form>
    

    파일을 처리하고 BLOB으로 저장하는 경우, mysql_real_escape_string ()을 사용하여 데이터를 이스케이프 처리해야합니다. 그렇지 않으면 구문 오류가 발생합니다.

  2. ==============================

    2.몇 가지 세부 정보 만 있습니다.

    몇 가지 세부 정보 만 있습니다.

    `이미지 '블롭

    $ image = addslashes (file_get_contents ($ _ FILES [ 'image'] [ 'tmp_name'])));

    $ sql = "INSERT INTO`product_images` (`id`,`image`) VALUES ( '1', '{$ image}')";

  3. ==============================

    3.

    First, you should not try to store the image in the database. Because this is not the right method to do. IF you want to then code is.
    
       <?php
       include("config.php");
    
      if(isset($_POST['but_upload'])){
    
       $name = $_FILES['file']['name'];
       $target_dir = "upload/";
       $target_file = $target_dir . basename($_FILES["file"]["name"]);
    
       // Select file type
       $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
    
       // Valid file extensions
       $extensions_arr = array("jpg","jpeg","png","gif");
    
       // Check extension
       if( in_array($imageFileType,$extensions_arr) ){
    
        // Convert to base64 
        $image_base64 = base64_encode(file_get_contents($_FILES['file']['tmp_name']) );
        $image = 'data:image/'.$imageFileType.';base64,'.$image_base64;
        // Insert record
        $query = "insert into images(image) values('".$image."')";
        mysqli_query($con,$query);
    
        // Upload file
        move_uploaded_file($_FILES['file']['tmp_name'],$target_dir.$name);
       }
    
      }
      ?>
    
      <form method="post" action="" enctype='multipart/form-data'>
        <input type='file' name='file' />
        <input type='submit' value='Save name' name='but_upload'>
      </form>
    

    검색의 경우        $ sql = "id = 1 인 이미지에서 이미지 선택";  $ result = mysqli_query ($ con, $ sql);  $ row = mysqli_fetch_array ($ result);  $ image_src2 = $ row [ 'image'];  ?>  

  4. ==============================

    4.INTO DB에 삽입하는 방법?

    INTO DB에 삽입하는 방법?

    <html>
        <head>
            <title>Uploads</title>
        </head>
        <body>
            <input type="file" name="file_array[]"/>
            <input type="file" name="file_array[]"/>
            <input type="file" name="file_array[]"/>
            <input type="submit" name="submit"/>
        </body>
    </html>
    
    <?php
        if(isset($_FILES['file_array']))
        {
            $name_array = $_FILES['file_array']['name'];
            $tmp_name_array = $_FILES['file_array']['tmp_name'];
            $type_array = $_FILES['file_array']['type'];
          $size_array = $_FILES['file_array']['size'];
            $error_array = $_FILES['file_array']['error'];
            $dir = "slideshow";
    
            for($i = 0; $i<count($tmp_name_array); $i++)
            {
                if(move_uploaded_file($tmp_name_array,"slideshow/".$name_array))
                {
                    echo $name_array[$i]."Upload is complete<br>";
    
                }  else {
                    echo"Move_uploaded_file function failed for".$name_array[$i]."<br>";
                }
            }
        }
    ?>
    
  5. from https://stackoverflow.com/questions/17717506/how-to-upload-images-into-mysql-database-using-php-code by cc-by-sa and MIT license