JoomlaCamp 2018 Essen - 03.02.2017 in Essen

inputfeld auslesen und vor dem Speichern in die DB den Wert verschlüsseln

    inputfeld auslesen und vor dem Speichern in die DB den Wert verschlüsseln

    Hallo an Alle in diesem Forum.

    ich versuche jetzt einen anderen Ansatz.

    Vielleicht kann mir ja jemand helfen.



    Es gibt doch eine Klasse, welche die Daten aus den Inputfelder der Form in die DB schreibt.

    public function getForm($data = array(), $loadData = true)
    {
    $app = JFactory::getApplication();


    $form = $this->loadForm('com_location.location', 'location', array('control'=>'jform', 'load_data'=>$loadData));
    if (empty($form))
    {
    return false;
    }
    return $form;
    }

    Kann man jetzt nicht einfach das entsprechende Feld suchen und verschlüsseln?

    Ist das die Klasse? siehe oben.

    Vielen Dank für Eure Hilfe.
    Hängt immer vom Kontext ab, aber eine "standardmäßige Legacy-Komponente" bietet u.a. auch die Möglichkeit die save-Methode im Model "umzubiegen", (ggf. auch die im Controller):

    Quellcode

    1. public function save($data)
    2. {
    3. // Manipuliere zu Speicherndes.
    4. [TU WAS MIT $data]
    5. // Ab zur Eltern-Klasse.
    6. return parent::save($data);
    7. }
    Joomla-Fachmann: ghsvs.de
    Das hängt von der gewünschten Komplexität und Sicherheit der Verschleierung ab, wo man sich erst mal einlesen sollte (= Mein Disclaimer zu meinem untigen Code).

    Quellcode

    1. public function save($data)
    2. {
    3. // Manipuliere zu Speicherndes.
    4. $data['Password'] = password_hash($data['Password'] ... PARAMETER ... );
    5. // Ab zur Eltern-Klasse.
    6. return parent::save($data);
    7. }

    Zu "... PARAMETER ..." siehe secure.php.net/manual/de/function.password-hash.php
    Joomla-Fachmann: ghsvs.de
    Vielen Dank für Deine Hilfe.

    Ich versuche jetzt das entsprechende Feld anzusprechen.
    Bich ich an der richtigen Stelle?

    $data = JFactory::getApplication()->getUserState('com_location.edit.location.data', array());

    if ($data['password'] = 'password'){
    $data['Password'] = '222222';
    return parent::save($data);
    }

    Vielen Dank.
    Versteh nicht ganz. Bei einer eigenen Legacy-Komponente, kann man in seinem eigenen Model die o.g. save-Funktion einsetzen (exakt so wie gepostet einfach rein ins Model), um in den normalen Speichervorgang Joomlas reinzugrätschen.

    Irgendwer trägt ins Feld "Password" eines Formulars was ein und klickt Speichern.

    Mein Code hasht (""verschlüsselt"") dann den eingegebenen Wert und dieser ""verschlüsselte"" Wert wird dann anstatt dem Klartext, den Irgendwer eingegeben hat, in der Datenbank gespeichert.

    Man muss das Array $data nicht erst selbst auslesen. Das ist schon mit den Formulardaten befüllt, die Irgendwer eingegeben hat, wenn die Methode/Function save($data) im eigenen Model aufgerufen wird.

    Joomla durchläuft die Methode/Function save($data) automatisch, wenn im eigenen Model vorhanden.
    Joomla-Fachmann: ghsvs.de
    ich stehe auf der Leitung,

    wo kann ich die Funktion einbauen?

    Kannst Du mir bitte helfen?

    Vielen Dank.

    defined('_JEXEC') or die;

    class LocationModelLocation extends JModelAdmin
    {
    protected $text_prefix = 'COM_LOCATIONS';

    // Get the table definition to be able to read or write location details
    public function getTable($type = 'location', $prefix = 'LocationTable', $config = array())
    {
    return JTable::getInstance($type, $prefix, $config);
    }

    // Get the form definition from /forms/location.xml
    public function getForm($data = array(), $loadData = true)
    {
    $app = JFactory::getApplication();


    $form = $this->loadForm('com_location.location', 'location', array('control'=>'jform', 'load_data'=>$loadData));
    if (empty($form))
    {
    return false;
    }
    return $form;
    }

    // Populate the form with data
    protected function loadFormData()
    {
    $data = JFactory::getApplication()->getUserState('com_location.edit.location.data', array());

    if (empty($data))
    {
    $data = $this->getItem();
    }
    return $data;
    }
    }

forum.joomla.de is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters the trademark holder in the United States and other countries.