web-dev-qa-db-fra.com

Joomla MVC Component Télécharger le fichier avec / Mise à jour du champ de la base de données

Je trouve donc cela un peu étrange car le champ de base de données était mis à jour sans effort, jusqu'à ce que je commence à écrire dans la fonctionnalité de téléchargement de fichier. Maintenant, la base de données ne semble pas se mettre à jour, mais le téléchargement de fichier fonctionne. Tout semblait insérer, mettre à jour, etc. Tout simplement en spécifiant les noms propres dans le fichier XML du formulaire d'administration:

<?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>

D'après ce que j'ai lu, je dois écrire la logique de mise à jour de la base de données. C'est bizarre que cela semble fonctionner avant. Maintenant que je suis nouveau dans le développement de composants Joomla MVC, je peux peut-être copier/coller quelques lignes de code qui l'auraient fait sans ma réalisation. Mais j'en doute. Voici ce que j'ai tenté mais il semble que je ne réussisse pas quelque part. Ceci est /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);
   }
}

J'espère que j'ai fourni assez d'informations .. Je suis toujours bloqué en mode week-end, il est donc difficile de dire: P Merci d'avance!

EDIT: Je me rends compte que la variable course_id, une variable url apparaissant lorsque je me trouve dans la page d'édition, n'était pas transmise (autant que je sache) lorsque le bouton de sauvegarde a été cliqué. J'ai tenté de créer un champ de saisie masqué avec <?php echo $_GET['course_id']; ?> _ comme valeur, dans l’espoir de régler tout ce qui ne va pas dans le monde aujourd’hui, mais sans succès.

Ce qui est étrange pour moi, c’est que tous les autres champs de la base de données se mettent à jour correctement, sans nécessiter de code SQL supplémentaire. Le champ approprié a été mis à jour avec les valeurs des champs de formulaire correspondants. JE SUIS SO CONFUSER IMMÉDIATEMENT.

5
dustaMaphone

Tout d’abord, merci à GDP de m’avoir conduit dans la bonne direction. Je dois dire que le problème était assez stupide. Comme vous le remarquerez dans mon code, je reçois un objet de requête:

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

Je construis la requête:

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

Cependant, je ne définit pas l'objet de requête !!!! Voici le code nouvellement ajouté. Quel mannequin: P

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

Je suggérerais de commencer par le code SQL en cours d'exécution et de revenir de là.

Juste avant d’exécuter une requête, ajoutez une ligne comme celle-ci: echo $query->dump(); die;

Il montrera le code SQL sur le point d'être exécuté. J'ajoute le die pour pouvoir actualiser continuellement la page sans avoir à remplir en permanence des formulaires, etc. pour voir les effets de mon débogage.

1
GDP