도움이필요한코린이
70
2021-11-09 09:33:52
6
119

php 다중파일 업로드 DB관련 질문드려요.


안녕하세요 . 아래가 insert.PHP 코드이구요. 제가 생각한 구조는 

기본적인 number, 글의 제목,내용 등을 담고있는 board 테이블과 

첨부파일의 num, 파일제목, 파일의 경로를 담고있는 upload_file 테이블 두개로 나뉘어서

board의 number는 Auto increment이구요. upload_file 테이블에서의 num은 첨부파일 유효성 검사를 해서

파일이 들어왔을경우에만 해당하는 게시글의 number를 board 테이블에서 가져와 

해당 번호로 다중파일을 같은번호의 여러 컬럼으로 업로드 시키는 구조입니다.

그런데 컬럼이 여러개가 업로드가 되지않아 질문 드립니다..ㅜㅜㅜ


<?php
    $conn = mysqli_connect('localhost:3307','root','304789','board_quest'); // db 접속

   
   
    function getLocalIP()   // ip 받아오는 펑션
{
    $sIP = $_SERVER['SERVER_ADDR'];
    if ($sIP =='127.0.0.1') {
        $aAddr = gethostbynamel(php_uname('n'));
        $sIP = $aAddr[0];
    }

    return $sIP;
}

$user_name = $_POST['user_name']; // write.php에서 이름, 제목, 내용을 받아와 변수에 넣어줌
$user_msg = $_POST['content'];
$user_title = $_POST['title'];
$user_ip = getLocalIP(); // 사용자의 ip 정보가 담긴 변수 생성
$date_time = date("Y-m-d h:i:s"); // 글이 작성된 연월일시가 담긴 date 변수 생성

$countfiles = count($_FILES['file']['name']); // write.php에서 file을 받았다면 받은 파일의 개수를 count 함수를 이용해 저장
$dir = './files/'; // 파일이 저장될 디렉토리 주소 지정


// 글쓰기 코드

$sql = "INSERT INTO board (name,title,content,user_ip,date_time) VALUES ('$user_name','$user_title','$user_msg','$user_ip','$date_time')";
// 글쓰기 버튼 실행시 db에 이름, 제목, 내용, ip, 연월일시가 저장됨


$result = mysqli_query($conn, $sql);


    if ($result === false){
        echo '저장하지 못했습니다.'; // 성공적으로 db에 저장됏는지 확인하기위한 if문
        error_log(mysqli_error($conn));
    }else{
        echo '저장 성공';
    }


// 다중 파일 업로드, 다운로드 코드
$this_num = mysqli_insert_id($conn); // 방금 INSERT한 id값 가져오기

if(!empty($_FILES['file']['name'])&&isset($_FILES['file']['name'])
   && count(array_filter($_FILES['file']['name']))) // 첨부파일의 유무 확인
{
    for($i = 0; $i < $countfiles; $i++){ 첨부파일의 개수만큼 반복
        $filename = $_FILES['file']['name'][$i];

        $sql = "INSERT INTO upload_file (num,file_name,file_dir)
                VALUES ('$this_num','$filename','$dir')";
        $result = mysqli_query($conn,$sql);
        move_uploaded_file($_FILES['file']['tmp_name'][$i],$dir.$filename);
        echo '업로드 성공'; 문제부분입니다. 첨부파일의 개수가 3개이면 에코가
                            세번 잘 표출 되는데 upload_file db에는 컬럼이
                            3개가 인설트되지않고 하나의 컬럼만 인설트됩니다.
                            왜 그런지 이유와 해결방법을 좀 알고싶습니다..
       
    }
}
else{
    echo '업로드 실패1';
}
   

    mysqli_close($conn);
    print "<hr/><a href='index.php'> 메인 화면으로 이동하기</a>";
?>

0
  • 답변 6

  • TeraGo
    850
    2021-11-09 11:23:19

    php 면 그누보드 참고하세요..


    제일 깔끔하고 편합니다.

  • 도움이필요한코린이
    70
    2021-11-09 11:28:20

    감사합니다. 참고할께요!

  • 멘붕날코딩
    7
    2021-11-09 11:29:20

    sql문을 화면에 찍어보세요..

  • 호이구름이
    86
    2021-11-09 14:07:59

    혹시 upload_file 테이블 num 컬럼이  PK이거나 unique값인가요..?

    오류 메세지는 따로없나요? php, mysql 설정에서 에러 표시를 활성화 시켜서 확인해보세요.

  • 도움이필요한코린이
    70
    2021-11-09 17:06:40

    정말 부끄럽습니다.. upload_file 테이블 num이 PK였네요.. 덕분에 또 하나 배웠습니다.

    오류메세지는 따로 출력되는게 없었습니다.

    <?php

    error_reporting(E_ALL);
    ini_set("display_errors", 1);

    ?>


    이렇게 하는거맞나요?
  • 호이구름이
    86
    2021-11-11 09:32:02

    네 해당파일 최상단이나 코어파일쪽에 작성하시면 됩니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.