2016-07-24 3 views
0

아래는 내가 지금까지 가지고있는 파일이며, 마이크로 시간까지 업로드시 파일 이름을 바꾸고 "pdf-cv"라는 제목의 폴더로 옮긴다. 그러나 내가해야 할 일은 select 입력 (추가로, 이미 존재하지 않으면 디렉토리에 해당 폴더를 만들 수 있다면 좋을 것입니다.) 어떤 도움을 많이 주시면 감사하겠습니다.선택 입력을 기반으로 특정 디렉토리 폴더로 파일을 이동하는 방법은 무엇입니까?

: 사용자가 "Option1"을 선택한 다음 파일을 업로드하면 해당 파일이 "Option1"이라는 디렉토리의 폴더로 이동됩니다.

셀렉트 입력 :

<select id="categories" name="categories" class="categories"> 
<option value="">-- Select --</option> 
<option value="">option 1</option> 
<option value="">option 2 </option> 
<option value="">option 3 </option> 
</select> 

업로드 양식 :

<form action ="pdf_upload.php" id="cv_upload_form" method="post" enctype="multipart/form-data"> 
<div class="fileUpload text-center cv_select"> 
    <span>Select File</span> 
    <input type="file" name="file" class="upload" id="pdf_input" /> 
</div> 
<canvas class="center-block pdf_canvas" id="the-canvas" style=""><p class="preview_text">Preview</p></canvas>  
<input class="cv_upload" type="submit" value="Upload"> 
</form> 

pdf_upload.php 내용 :

<?php 

$uploaddir = "pdf-cv/"; 
$allowed_ext = "pdf"; 
$max_size = "5000000"; 

$extension = pathinfo($_FILES['file'] ['name']); 
$extension = $extension[extension]; 
$allowed_paths = explode(", ", $allowed_ext); 
for($i = 0; $i < count($allowed_paths); $i++) { 
if ($allowed_paths [$i] == "$extension") { 
    $ok = "1"; 
} 
} 


if ($ok == "1") { 
    if($_FILES['file']['size'] > $max_size) 
    { 
     print "File is too big!"; 
     exit; 
    } 


if(is_uploaded_file($_FILES['file']['tmp_name'])) 
{ 
$temp = explode(".", $_FILES["file"]["name"]); 
$newfilename = round(microtime(true)) . '.' . end($temp); 
move_uploaded_file($_FILES["file"]["tmp_name"],$uploaddir.''. $newfilename); 
header("Location: new_begining_index.php#home"); 
} 

print "Your CV has been successfully uploaded!";  

} else { 
print "Incorrect file extension!"; 
} 

?> 
+0

당신이 http://php.net/manual/en/control 이것에 대한 케이스/스위치를 사용할 수 있습니다 -structures.switch.php 및 POST 배열을 기반으로합니다. 그것은 가장 간단한 방법, IMO가 될 것입니다. –

+0

나는 슈퍼 전역을 사용하는 이론에서 이해하지만, 실제로 그것을 함께 모으는 방법을 잘 모르겠다. 간단한 예를 보여 주면 거기에서 갈 수 있습니까? –

+0

아래 답변을 참조하십시오. 나는 또한 그 방법을 염두에 뒀다. 사실이 작업을 수행하는 꽤 많은 방법들 –

답변

1

먼저 당신의 선택 입력 실제 값을 제공 할 것입니다 :

<select id="categories" name="categories" class="categories"> 
<option value="">-- Select --</option> 
<option value="Option1">option 1</option> 
<option value="Option2">option 2 </option> 
<option value="Option3">option 3 </option> 
</select> 

그런 다음 입력의 유효성을 검사하고 디렉토리가 존재하는지 확인하십시오.

이제
$uploaddir = "pdf-cv/"; 

// make sure a category was selected 
if (!isset($_POST['categories']) || trim($_POST['categories']) == '') { 
    die("no category selected"); 
} 

// validate input against a whitelist 
if (!in_array($_POST['categories'], array('Option1', 'Option2', 'Option3'))) { 
    die("don't hack me bruh"); 
} 

// make directory if it doesn't exist 
$newdir = $uploaddir . $_POST['categories']; 
if (!file_exists($newdir)) { 
    mkdir($newdir, 0755, true); 
} 

당신이 정상적으로 파일을 이동할 수 있습니다 :

나는 그 일을 가장 우아한 방법은 아니지만 상관없이 귀하의 질문에 대답해야 오류 검사, 아래의 예에서 die()을 사용하고 있습니다
move_uploaded_file($_FILES["file"]["tmp_name"], $newdir . '/' . $newfilename); 

$uploaddir의 경우 상대 경로가 아닌 절대 경로를 사용해야 할 수도 있습니다. 예 : /var/www/public_html/my_project/pdf-cv/. 당신이 당신의 절대 경로가 무엇인지 알 수없는 경우,이 일반적으로 $_SERVER 자동 전역에서 찾을 수 있습니다

echo '<pre>'; 
var_dump($_SERVER); 
echo '</pre>'; 
+0

감사합니다. 그래서 이것은 select 입력의 pdf-cv 내에 폴더를 생성해야합니까? –

+0

@KerrialBeckettNewham 네, 맞습니다. –

+0

은 계속 오류 메시지를 표시합니다. "나를 괴롭히지 마라."http://pastebin.com/7ry9KBiW –

관련 문제