web-dev-qa-db-fra.com

Prétraitement des données de formulaire avant de les enregistrer dans la base de données

J'ai une série de cases à cocher sur mon formulaire qui, ensemble, forment un tableau lors du POST. Je souhaite enregistrer ces données sous forme de chaîne (par exemple, "##, ##, ##") avant de valider la base de données.

Voici ce que j'ai dans le fichier\models\composantname.php:

public function save($data)
{
    $input = JFactory::getApplication()->input;
    $filter  = JFilterInput::getInstance();

    if(isset($data['dancer_id'])) {     
        $data['dancer_id'] = implode(",", $data['dancer_id']);
    }

    if (parent::save($data))
    {
        return true;
    }

    return false;
}

Et voici le type de champ personnalisé que j'ai créé (\ models\fields\fieldname.php):

<div class="dancer"><input id="dancer_id" type="checkbox" name="dancer_id[]" value="XXX" />XXX</div> 

Tous les autres champs du formulaire sont sauvegardés à l'exception de celui-ci. Des pensées? De plus, je ne suis pas sûr de savoir comment les données $ sont transmises à la fonction save () ... j'ai peut-être manqué un appel quelque part? Pour aller aussi loin, j'ai suivi le tutoriel du composant HelloWorld MVC sur le site Joomla et la réponse en ce fil connexe .

2
Mhaddy

Je l'ai compris avec l'aide de quelqu'un des groupes Google Joomla DEV Google ( détails ): mon champ personnalisé dancer_id n'a pas été ajouté au tableau jform de la manière suivante:

<input id="dancer_id" type="checkbox" name="jform[dancer_id][]" value="2261" checked>

Une fois que j'ai fait, tout a fonctionné. Détails liés ci-dessus.

1
Mhaddy

Avez-vous essayé d'extraire directement le formulaire sans utiliser JFilterInput?

Essaye ça:

remplacer:

$filter  = JFilterInput::getInstance();

avec:

$dancers = $input->get('dancer','','array');

vous pouvez alors faire

$data['dancer_id'] = implode(",", $dancers);

De là, vous pouvez finir avec vos méthodes de sauvegarde

1
Terry Carter