CI 묻고 답하기

제목 php 수정시 기존 파일명 유지를 하기 위한 조언 부탁 드립니다.
글쓴이 madman 작성시각 2014/11/18 09:30:11
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 14118   RSS
안녕하세요. php 코드를 유지보수 하다가 궁금한 점이 있어 문의 드리고자 합니다.

게시판에서 파일을 등록-수정하는 폼이 있는데, 수정할 때 기존 파일명이 있어서  파일은 놔두고 다른 폼을 수정하면 파일이 null처리되는 오류가 있습니다. 파일을 변경하지도 않았는데 수정 버튼 클릭하면 파일이 사라진단 소리죠.

그래서 기존의 소스를 보니 아래와 같이 되어 있는데



 

<?
//view
?>
<form name="test">
<table>
 <tr>
  <td><input type="file" name="hint_sound" /></td>
 </tr>
 <tr>
  <td>
    <button>save</button>
  </td>
 </tr>
</table>
</form>




<?
//controller
public function setData()
{
 $no = $this->input->post('no'); // primary key
 $hint_sound = $this->file_upload('hint_sound');  // 위의 form에서 받은 파일명 불러오는 부분

 if($hint_sound['success']) // 파일이 있으면
 {
  $hint_sound = $hint_sound['msg'];
 } else { // 파일이 없으면
  $hint_sound = null;
 }

 $data = array(
  'HINT_SOUND' => ($hint_sound != null) ? $hint_sound['orig_name'] : null,
  'HINT_SOUND_FILE' => ($hint_sound != null) ? $hint_sound['full_path'] : null
 );

 $no = ($no == '' || $no == null) ? null : (int)$no;

 if($this->Problem_model->setProblem($this->utf8Toeuckr($data), $no))
 {
  echo "success";
 } else {
  echo "failed";
 }
}
?>




<?
//model
public function setProblem($data, $no = null)
{
 if($no == null)
  return $this->db->insert('PROBLEM_TABLE', $data);
 else
 {
  $this->db->where('NO', $no);
  return $this->db->update('PROBLEM_TABLE', $data);
 }
}

?>

 





간단히 해당 부분만 추려서 올려본 것입니다. 위의 코드 중에서



 
 if($hint_sound['success']) // 파일이 있으면
 {
  $hint_sound = $hint_sound['msg'];
 } else { // 파일이 없으면
  $hint_sound = null;
 }

 



이 부분이 문제인듯 한데요.. 제가 짠건 아니고 기존의 소스인데 폼에 등록된 파일이 없을 경우 input 폼에서

받아온 hint_sound 변수가 null 처리되도록 되어 있더군요. 그러니 파일은 수정 안 하고 다른거 수정할 때 파일은 기존 등록된 그대로 유지가 되어야 하는데 db에서 null처리되는 오류가 있더군요.



어쨌든 그래서 수정을 하려 하는데, 어떻게 바꿔주면 좋을지가 고민이네요. 참고로 보면 아시는 분들도 많겠지만 codeigniter 프레임워크로 되어 있고 제가 이 프레임워크는 익숙치가 않아서... 조언 좀 주셨으면 합니다.
 다음글 로그인 할때 SSL 체크 질문 있습니다. (5)
 이전글 파일 업로드 할때 암호화와 복호화를 질문드립니다. (6)

댓글

변종원(웅파) / 2014/11/18 14:40:32 / 추천 0
codeigniter라고 php로직이 달라지지 않습니다.

수정일때는 no를 컨트롤러에서 가져와서 뷰로 전달하시면 됩니다.