2016-10-09 3 views
-1

다음 이미지 업로드 페이지가 있습니다 :PHP 다중 데이터를 MySQL 데이터베이스에 삽입하는 동안

9 개의 범주가 나열된 다중 선택 상자. 이미지 대체 텍스트의 텍스트 입력 필드입니다. 여러 파일 업로드 필드.

목표는 한 번에 여러 이미지를 업로드하고 alt 텍스트의 텍스트 입력을 각각 저장하며 선택한 카테고리를 각각 저장할 수있게하는 것입니다.

내가 쓴 스크립트가 반드시 스크립트에 내장 된 오류이기 때문에 필자가 작성한 스크립트는 반드시 실패하지는 않습니다. Sorry, there was a problem uploading your images..

<?php 
include($_SERVER['DOCUMENT_ROOT'].'/settings/functions.php'); 
include($_SERVER['DOCUMENT_ROOT'].'/settings/config.php'); 
include($_SERVER['DOCUMENT_ROOT'].'/php/top-notification.php'); 
include($_SERVER['DOCUMENT_ROOT'].'/php/nav.php'); 
?> 

<div class="container"> 
<?php 
// Connect to database 
$conn = getConnected("lucycypher"); 
// Don't execute upload script unless "upload" is clicked 
if(isset($_POST['submit'])) { 
    // This is the directory where images will be saved 
    $target = $_SERVER['DOCUMENT_ROOT']."/gallery/"; 

    // This gets all the other information from the form 
    $img_category = implode(',', $_POST['img_category']); 
    $img_name = $_POST['img_name']; 

    // Count the image files 
    if(count($_FILES['img_file']['tmp_name'])) { 
     // Loop through each file 
     foreach ($_FILES['img_file']['tmp_name'] as $img_file) { 
      // moves the image 
      if(move_uploaded_file($img_file, $target)) { 
       // if upload is a success query data into db 
       mysqli_query($conn, "INSERT INTO gallery_img (img_name, img_category, img_location) VALUES ('$img_name', '$img_category', '$img_file')") ; 
       echo '<div class="alert alert-success margin-top">Your imags were successfuly uploaded.</div>'; 
      } 
      else { 
       echo '<div class="alert alert-danger margin-top">Sorry, there was a problem uploading your images.</div>'; 
      } 
     } 
    } 
} 
?> 

<form class="form-horizontal" method="POST" enctype="multipart/form-data" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>"> 
<fieldset> 

<!-- Form Name --> 
<legend>Upload Image</legend> 

<!-- Select Multiple --> 
<div class="form-group"> 
     <label class="col-md-4 control-label" for="img_category">Category</label> 
     <div class="col-md-4"> 
      <select id="img_category" name="img_category[]" class="form-control" multiple="multiple"> 
        <option value="horror">Horror</option> 
        <option value="occult">Occult</option> 
        <option value="goth">Goth</option> 
        <option value="industrial">Industrial</option> 
        <option value="fashion">Fashion</option> 
        <option value="fetish">Fetish</option> 
        <option value="avante-garde">Avante-Garde</option> 
        <option value="cosplay">Cosplay</option> 
        <option value="nude">Nude</option> 
      </select> 
     </div> 
</div> 

<!-- Text input--> 
<div class="form-group"> 
     <label class="col-md-4 control-label" for="img_name">Name:</label> 
     <div class="col-md-4"> 
     <input id="img_name" name="img_name" type="text" placeholder="Image Name" class="form-control input-md" required=""> 

     </div> 
</div> 

<!-- File Button --> 
<div class="form-group"> 
     <label class="col-md-4 control-label" for="img_file">Image</label> 
     <div class="col-md-4"> 
      <input id="img_file" name="img_file[]" class="input-file" type="file" multiple> 
     </div> 
</div> 

<!-- Button --> 
<div class="form-group"> 
     <label class="col-md-4 control-label" for="submit">Ready?</label> 
     <div class="col-md-4"> 
      <button type="submit" name="submit" class="btn btn-primary">Upload</button> 
     </div> 
</div> 

</fieldset> 
</form> 


</div> 

<?php include($_SERVER['DOCUMENT_ROOT'].'/php/footer.php'); ?> 

그리고 내 데이터베이스 레이아웃은 다음과 같습니다 :

전체 페이지는 여기 내가 여러 카테고리를 선택하면 이미지 파일을 선택하고 아무것도 얻을 수없는 텍스트 상자에 텍스트를 입력

ID    mediumint(10) AUTO_INCREMENT 
img_name  varchar(50) 
img_category varchar(200) 
img_location blob 
img_time  timestamp  on update CURRENT_TIMESTAMP 

데이터베이스에 추가되고 이미지가 서버에 업로드되지 않습니다.

난 그냥 Sorry, there was a problem uploading your images. 오류가 발생합니다.

gallery 디렉토리에는 775 권한이 있습니다.

+0

당신의 목표는 directrory 수 있습니다.'$ 대상 = $ _SERVER [ 'DOCUMENT_ROOT'] "/ 갤러리 /";'하는 맞을 수 있지만 대상에 업로드 할 파일을 추가하여 더 이상 대상 디렉토리가 없도록하십시오. 그래서이 줄을 지워야합니다. '$ target = $ target. basename ($ _ FILES [ 'img_file'] [ 'tmp_name']); ' – Franco

+0

삭제되었습니다. 업로드를 다시 시도했습니다. 같은 결과. –

+0

'img_location' 컬럼의 데이터 타입이'blob' 인 이유는 무엇입니까? 서버에 파일을 업로드하고 있습니까? –

답변

2

같은 코드에서 몇 가지 결함이 있습니다 : 여기이 선에서

  • 봐,

    if(move_uploaded_file($img_file, $target)) { ... 
    

    $target 대상 파일 이름을 지정하는 문자열이어야한다, 그것은이 안 디렉토리 경로.

  • 서버에 이미지를 업로드하기 때문에 데이터베이스에도 이미지를 저장할 필요가 없습니다. 서버에 이미지를 업로드하고 데이터베이스에 경로를 저장하기 만하면됩니다. 따라서 img_location 열의 데이터 형식을 VARCHAR으로 변경하십시오.

전반적으로, 당신의 코드는 다음과 같아야합니다

if(isset($_POST['submit'])) { 
    $count = count($_FILES['img_file']['name']); 

    for($i = 0; $i < $count; ++$i){ 
     $target = $_SERVER['DOCUMENT_ROOT']."/gallery/"; 
     $target = $target . basename($_FILES['img_file']['name'][$i]); 

     $img_category = implode(",", $_POST['img_category']); 
     $img_name = $_POST['img_name']; 
     if(move_uploaded_file($_FILES['img_file']['tmp_name'][$i], $target)){ 
      mysqli_query($conn, "INSERT INTO gallery_img (img_name, img_category, img_location) VALUES ('$img_name', '$img_category', '$target')") ; 
      echo '<div class="alert alert-success margin-top">Your imags were successfuly uploaded.</div>'; 
     }else { 
      echo '<div class="alert alert-danger margin-top">Sorry, there was a problem uploading your images.</div>'; 
     } 
    } 
} 
+0

이것은 하나의 문제를 해결했습니다. 이제 이미지가 업로드됩니다. 그러나 아무 정보도 데이터베이스에 입력되지 않았습니다. –

+0

@JesseElser 아, 한 가지 실수가 있습니다. 대답의 첫 번째 점은 잘못되었습니다. $ img_category = implode (",", $ _POST [ 'img_category']);'. 내 대답을 업데이트했습니다. –

+0

이제 데이터가 입력되고 있지만 두 번째 이미지를 업로드하려고 할 때 두 번째 이미지가 첫 번째 이미지에 첨부됩니다. I.E. 'house.jpg'라는 이미지와'car.jpg' 이미지를 동시에 업로드하면'car.jpg'가'house.jpgcar.jpg'로 이름이 변경됩니다. 필자는이 스크립트를 업데이트하여 파일 이름을 텍스트 상자로 바꾸는 방법을 알아 냈습니다. 예를 들어'Images Of Sunset' 텍스트 상자에 입력하면 해당 텍스트로 업로드 된 이미지의 이름은 Images_Of_Sunset.jpg 및 Images_Of_Sunset_2.jpg로 바뀝니다. –

관련 문제