안녕하세요. 저는 프로그래밍을 독학으로 공부한 지 이제 갓 한 달 넘은 파릇파릇한 쌩 초보 아재입니다~!
학원 같은 곳도 다닐 여건이 안 되어서, 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
?>
------------------------------------------------
며칠을 고민하다 제가 애용하던 오유! 프로그래머 게시판이 생각나 글 올려보았습니다.
조금이 조언이라도 해주실 수 있으시다면 정말 정말 감사드리겠습니다!!