2014-12-01 2 views
1

그래서 파일 업로드 기능을 작성하기 전까지 DB 필드가 많은 부분을 수정하지 않고 업데이트했기 때문에 조금 이상합니다. 이제 데이터베이스가 업데이트되는 것 같지 않지만 파일 업로드가 작동합니다. 모든 것은 단순히 관리 형태의 XML 파일에 적절한 이름을 지정하여 등, 잘 업데이트, 삽입 될 듯 : 내가 읽은 것을, 나는 데이터베이스 업데이트 논리를 작성해야Joomla MVC 구성 요소 - 파일 업로드로 데이터베이스 레코드 업데이트

<?xml version="1.0" encoding="utf-8"?> 
<form> 
    <fieldset> 
     <field 
      name="course_id" 
      type="hidden" /> 
     <field 
      name="course_name" 
      type="text" 
      label="Course Name: " 
      description="Full name of the course (up to 255 characters)" 
      default="" /> 
     <field 
      name="course_dept" 
      type="text" 
      label="Course Department: " 
      description="4 character department code. Examples: BIOL, CREL, CHEM" 
      default="" /> 
     <field 
      name="course_code" 
      type="text" 
      label="Course Code: " 
      description="4 digit course code which immediately preceeds department code" 
      default="" /> 
     <field 
      name="course_desc" 
      type="textarea" 
      label="Course Description: " 
      rows="10" 
      description="As seen in the academic calendar" 
      default="" /> 
     <field 
      name="course_graphic_url" 
      type="file" 
      label="Course Graphic: " 
      description="Graphical representation of the course" 
      accept="image/*" /> 
    </fieldset> 
</form> 

에서. 이전에 일하는 것 같았던 것은 이상한 일입니다. 이제 Joomla MVC 구성 요소 개발에 익숙하지 않아 어쩌면 내가 알지 못하는 한 몇 줄의 코드를 복사/붙여 넣을 수 있습니다.하지만 의심 스럽습니다. 여기에 내가 시도한 것이 있지만 어딘가에 떨어지는 것처럼 보입니다. 이 /admin/controllers/course.php입니다 :

<?php defined('_JEXEC') or die; 

jimport('joomla.application.component.controllerform'); 

class CourseListControllerCourse extends JControllerForm { 
protected $view_list = 'CourseList'; 

function save($key = null, $urlVar = null){ 
    // ---------------------------- Uploading the file --------------------- 
    // Neccesary libraries and variables 
    jimport('joomla.filesystem.folder'); 
    jimport('joomla.filesystem.file'); 

    $jinput = JFactory::getApplication()->input; 
    $files = $jinput->files->get('jform'); 
    $filename = $files['course_graphic_url']['name']; 
    $folder = JPATH_SITE . "/" . "images" . "/" . "courselist"; 

    // Create the folder if not exists in images folder 
    if (!JFolder::exists($folder)) { 
     JFolder::create($folder, 0777); 
    } 

    $src = $files['course_graphic_url']['tmp_name']; 
    $dest = JPATH_SITE . "/" . "images" . "/" . "courselist" . "/" . $filename; 

    if (isset($files['course_graphic_url'])) { 
     JFile::upload($src, $dest); 
    } 

    $db = JFactory::getDBO(); 
    $query = $db->getQuery(true); 
    $cid = $jinput->get('course_id'); 

    $fields = array($db->quoteName('course_graphic_url') . " = " . $db->quote($dest)); 
    $conditions = array($db->quoteName('course_id') . " = " . $cid); 

    $query 
     ->update($db->quoteName('#__courselist'))->set($fields)->where($conditions); 

    $db->execute($query); 

    return parent::save($key = null, $urlVar = null); 
    } 
} 

다행스럽게도 필자가 제공 한 충분한 정보 .. 나는 여전히 말을 열심히 그래서 주말 모드에 갇혀있어 : 사전에 P 감사!

편집 : 편집 페이지에있을 때 나타나는 url 변수는 저장 버튼을 클릭 할 때까지 전달할 수 없음을 알았습니다. 나는 값으로 숨겨진 입력 필드를 만들려고했는데, 오늘은 세상에있는 모든 것을 고칠 것이라고 기대했지만 운이 없었습니다.

나에게 이상한 점은 다른 모든 DB 필드가 추가 SQL이 필요없이 제대로 업데이트된다는 것입니다. 해당 필드가 해당 양식 필드의 값으로 갱신되었습니다. 나는 지금 바로 죄송합니다.

+0

[줌라 스택 교환 (http://joomla.stackexchange.com)에 이상 질문을 물어보십시오) – Lodder

+0

나는 것 확인! 고마워요 :) – dustaMaphone

답변

0

먼저 Joomla!의 GDP에 큰 감사드립니다. 나를 올바른 방향으로 이끌어 줄 스택 교환. 나는 그 문제가 아주 어리 석다 고 말해야 만한다. 당신이 내 코드에서 알 수 있듯이, 나는 질의 객체를 얻을 :

$query = $db->getQuery(true); 

내가 쿼리를 작성 :

$fields = array($db->quoteName('course_graphic_url') . " = " . $db->quote($dest)); 
$conditions = array($db->quoteName('course_id') . " = " . $cid); 

$query 
    ->update($db->quoteName('#__courselist'))->set($fields)->where($conditions); 

I, 그러나, 질의 객체를 설정하지 않는다 !!!! 새로 추가 된 코드입니다. 더미 무엇 : P

$db->setQuery($query); 
$db->execute($query); 
+0

미래에는 http://www.component-creator.com을 사용하여 무료로이 물건을 만들고 이것과 같은 시간을 절약 할 수 있습니다. 다행히도 문제를 발견했기 때문에 : –

+0

감사합니다. 내가 뭔가를 봤다고 생각하지만, relitavely 한 새로운 백엔드 개발자인 나는 이것이 어떻게 작동하는지 더 잘 이해하기 위해 직접 코드화하는 것이 가장 좋을 것이라고 생각했다. 미래에 나는 저 자신과 같은 옵션을 생각하면 시간을 절약 할 수 있습니다. 건배. – dustaMaphone