게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
(본삭금) 기초적인 php 이미지 업로드 방법에 대해 질문드려요 ㅠㅠ
게시물ID : programmer_16996짧은주소 복사하기
작성자 : onionsweet
추천 : 0
조회수 : 1708회
댓글수 : 5개
등록시간 : 2016/04/29 11:29:59
옵션
  • 본인삭제금지
안녕하세요. 저는 프로그래밍을 독학으로 공부한 지 이제 갓 한 달 넘은 파릇파릇한 쌩 초보 아재입니다~!
학원 같은 곳도 다닐 여건이 안 되어서, opentutorials.com을 통해 웹 어플리케이션 만들기 수업을 전부 듣고는 이제 막 실습을 해보려 하고 있습니다.
지금까지는 구글 검색을 통해 대부분 해결했습니다만, 한 가지 턱 하니 막혀서 도오오오오~저히 진행이 안되고 있습니다. 아무리 노오오오오력~을 해봐도 근본 없이 공부하는 입장이다 보니 힘드네요 ㅠㅠ
혹시 아시는 분은 구체적인 답변이 아니더라도, 어떤 키워드로 검색을 하면 답을 찾을 수 있을 지 정도만이라도 알려주시면 정말 정말 감사드리겠습니다~!! (_ _ )

제가 하려고 하는 것은 다음과 같습니다.

1. write.php 파일을 통해 제목과 글을 작성하고, 그림도 올립니다!
  ~ 파일명은 md5() 함수를 통해 새 이름으로 바꾸어 올렸습니다.

2. submit 버튼을 누르면 process.php 파일로 변수들을 넘긴 뒤 저장합니다.
  ~ 그림은 지정된 경로로 저장되어야 하고,
  ~ 변경된 파일명은 DB에 img 컬럼에 저장되어야 합니다.

다른 부분들은 모두 해결되었는데, 단 하나, 파일을 저장하는 프로세스를 어디다가 넣어야 하는지를 모르겠습니다.
테스트를 위해 upload.php 를 아래처럼 작성했습니다.

------------------------------------------------
[upload.php]
<?php
   if(isset($_FILES['image']))
   {
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_basename = substr($file_name, 0, strripos($file_name, '.'));
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
      $file_size =$_FILES['image']['size'];
      $file_tmp =$_FILES['image']['tmp_name'];
      $expensions= array("jpeg","jpg","png","png");

      if(in_array($file_ext,$expensions)=== false)
      {
         $errors = "extension not allowed. Please choose a JPEG, PNG or GIF file.";
      }

      if($file_size > 2097152)
      {
         $errors = "File size must be excately 2 MB.";
      }

      if(empty($errors)==true)
      {
        $newfilename = md5($file_basename).".".$file_ext;
            if (file_exists("img/".$newfilename)) {
              echo "You have already uploaded this file.";
            }
            else {
              move_uploaded_file($_FILES["image"]["tmp_name"], "img/" . $newfilename);
              echo "File uploaded successfully.";
            }
      }
      else
      {
         echo $errors;
      }
   }
?>
<html>
   <body>

      <form action="" method="POST" enctype="multipart/form-data">
         <input type="file" name="image" />
         <input type="submit"/>
         <!-- <ul>
            <li>Sent file: <?php echo $_FILES['image']['name'];  ?>
            <li>File size: <?php echo $_FILES['image']['size'];  ?>
            <li>File type: <?php echo $_FILES['image']['type'] ?>
         </ul> -->
      </form>

   </body>
</html>
------------------------------------------------

요거는 성공을 했습니다~!! 파일명이 말 바뀌어서 /img 폴더로 잘 올라갑니다!! 이거 하나 해내고 어찌나 기뻤는지 ㅠㅠ(이것도 며칠을 끙끙댔는지...)

그런데 이제 이것을 write.php 로 적용시키려고 했습니다.

------------------------------------------------
[write.php]
<article>
  <form action="process.php" method="post">
    <div class="form-group">
      <label for="title">Title</label>
      <input type="text" class="form-control" name ="title" id="title" placeholder="Enter the title here">
    </div>
    <div class="form-group">
      <label for="author">Writer</label>
      <input type="text" class="form-control" name ="author" id="author" placeholder="What is your ID?">
    </div>
    <div class="form-group">
      <label for="password">Password</label>
      <input type="password" class="form-control" name ="" id="password" placeholder="****">
    </div>

    <div class="form-group">

<!-- 여기 이하가 아까 upload.php에서 복사해서 집어넣은 부분입니다 -->
      <?php
         if(isset($_FILES['image']))
         {
            $errors= array();
            $file_name = $_FILES['image']['name'];
            $file_basename = substr($file_name, 0, strripos($file_name, '.'));
            $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
            $file_size =$_FILES['image']['size'];
            $file_tmp =$_FILES['image']['tmp_name'];
            $expensions= array("jpeg","jpg","png","png");

            if(in_array($file_ext,$expensions)=== false)
            {
               $errors = "extension not allowed. Please choose a JPEG, PNG or GIF file.";
            }

            if($file_size > 2097152)
            {
               $errors = "File size must be excately 2 MB.";
            }

            if(empty($errors)==true)
            {
              $newfilename = md5($file_basename).".".$file_ext;
                  if (file_exists("img/".$newfilename)) {
                    echo "You have already uploaded this file.";
                  }
                  else {
                    move_uploaded_file($_FILES["image"]["tmp_name"], "img/" . $newfilename);

                    echo "File uploaded successfully.";
                  }
            }
            else
            {
               echo $errors;
            }
         }
      ?>
      <label for="exampleInputFile">Image</label>
      <input type="file" id="exampleInputFile" name ="imgage">
      <p class="help-block">You can upload upto 2MB of JPEG or PNG file</p>
    </div>
    <input type="submit" class="btn btn-default btn-lg" method="POST" enctype="multipart/form-data">
  </form>
</article>
------------------------------------------------

...가장 모르겠는 부분이 저 빨간색 submit 부분입니다. submit 을 누르면 name="@@" 으로 지정된 값들이 process.php로 POST 방식으로 전달된다...고 생각합니다. 문제는 저 write.php에서 파일을 업로드 하면 파일 업로드가 안 된다는 점이에요 ㅠㅠ. 사실은 process.php에서 어떻게 받아야 할지를 모르겠습니다. 혹시 저 파일명 바꾼 뒤 이동시키는 부분을 process.php로 옮겨야 하는 것인지 뭔지 모르겠네요...

------------------------------------------------
[process.php]
<?php
require("lib/db.php");
require("config/config.php");
$conn = db_init($config["host"], $config["duser"], $config["dpw"], $config["dname"]);

$title = mysqli_real_escape_string($conn, $_POST['title']);
$author = mysqli_real_escape_string($conn, $_POST['author']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
// 여기쯤에 이미지 파일명을 변수로 받아와야 할 것 같은데, write.php에서 정의했던 $newfilename을 어찌 가져오는 건가요?
$sql = "SELECT * FROM user WHERE name='".$author."'";
$result = mysqli_query($conn, $sql);

if ($result->num_rows == 0) { //new user
  $sql = "INSERT INTO `user` (name, password) VALUES('".$author."', '111111')";
  mysqli_query($conn, $sql); // you need the $result when you need to see the result
  $user_id = mysqli_insert_id($conn); // find out the id(a Primary Key!!) which was made right before
}else {
  $row = mysqli_fetch_assoc($result);
  $user_id = $row['id'];
}

$sql = "INSERT INTO `recipe` (title, cat, author, img, ingredients, contents) VALUES('".$title."','".$cat."','".$user_id."','".$newfilename."')";
$result = mysqli_query($conn, $sql);
//혹시 되나 하고 $newfilename 냅다 집어넣어봤는데 안되네요 흐규흐규
header('Location: /index.php');
//after processing, redirect to designated page
 ?>
------------------------------------------------

며칠을 고민하다 제가 애용하던 오유! 프로그래머 게시판이 생각나 글 올려보았습니다.

조금이 조언이라도 해주실 수 있으시다면 정말 정말 감사드리겠습니다!!
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호