繁体   English   中英

Joomla MVC组件-使用文件上传更新数据库记录

[英]Joomla MVC Component - Updating Database Record With File Upload

因此,我觉得有些奇怪,因为在开始编写文件上载功能之前,数据库字段的更新工作不费吹灰之力。 现在数据库似乎没有更新,但是文件上传正常。 只要在管理表单的XML文件中指定适当的名称,一切似乎都可以插入,更新等。

<?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预先感谢!

编辑:我意识到Course_id是我在编辑页面中时出现的url变量,但单击保存按钮时并未传递(据我所知)。 我试图创建一个隐藏的输入字段作为值,希望我能解决当今世界上所有错误但没有运气的问题。

对我来说奇怪的是,每个其他数据库字段都在正确更新,而无需其他SQL。 使用相应表单字段中的值更新了相应的字段。 我现在很困惑。

首先,非常感谢Joomla的GDP! 使用Stack Exchange引导我朝正确的方向发展。 我不得不说这个问题是一个愚蠢的问题。 您会在我的代码中注意到,我得到了一个查询对象:

$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);

但是,我不设置查询对象!!!! 这是新添加的代码。 真假人:P

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM