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):

    Code
    public function save($data)
    {
    // Manipuliere zu Speicherndes.
     [TU WAS MIT $data]
    // Ab zur Eltern-Klasse.
        return parent::save($data);
    }
  • vielen Dank für die schnelle Antwort.


    Wie kann ich einen bestimmten Wert aus dem Feld "Password" vor dem Speichern in der DB verändern? z.B. verschlüsseln.


    Können Sie mir bitte ein Beispiel geben.


    Vielen Dank im Voraus.

  • 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).

    Code
    public function save($data)
    {
    // Manipuliere zu Speicherndes.
    $data['Password'] = password_hash($data['Password'] ... PARAMETER ... );
    // Ab zur Eltern-Klasse.
        return parent::save($data);
    }


    Zu "... PARAMETER ..." siehe https://secure.php.net/manual/de/function.password-hash.php

  • 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.

  • 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;
    }
    }