it-swarm.com.de

Einfügen in eine Datenbank mit Ajax aus einem Joomla 3-Modul

Ich habe viele Anfragen zu Ajax erhalten, aber normalerweise geht es darum, Daten aus der Datenbank abzurufen. Ich habe mich gefragt, wie ich Daten einfügen kann, die direkt in einem Modul interagieren.

Ich habe ein Modul mit Listen, die aus der Datenbank abgerufen wurden, und ich möchte, dass registrierte Benutzer bestimmte Informationen aus dem Modul behalten können, auf die später zugegriffen werden soll. Es wäre in Ordnung, wenn sich neben jedem Element in der Liste eine Schaltfläche befindet, um es in einer Tabelle mit möglicherweise zwei Spalten zu speichern: Benutzer- und Element-ID.

Ich habe recherchiert und es scheint, dass es einfach ist, einen Wrapper zu verwenden, der ein PHP-Skript aufruft, das die Datensätze einfügt, aber ich bin sicher, dass dies ein Problem für die Sicherheit ist. Irgendwelche Ideen bitte?

3
WillyC

Das ist durchaus möglich. Überprüfen Sie dieses com_ajax-Beispiel und speichern Sie die Informationen in der Benutzersitzung:

Verwenden der Joomla Ajax-Oberfläche https://docs.joomla.org/Using_Joomla_Ajax_Interface

Ajax-Session-Modul https://github.com/Joomla-Ajax-Interface

Ajax-Session-Plugin https://github.com/Joomla-Ajax-Interface/Ajax-Session-Plugin

Wenn Sie Ihre eigenen Tabellen implementieren möchten, müssen alle Anforderungen der aktuellen Benutzer-ID im Modul nur für "registrierte" Benutzer zugeordnet werden.

2
Anibal

Sie benötigen eine Controller-Methode, die über eine Ajax-Anfrage aufgerufen werden kann ( kann helfen ).

Diese Methode wird mit der db-Instanz von joomla in die Datenbank eingefügt.

Dann brauchen Sie nur noch den Ajax durch ein onClick-Ereignis in Ihrem Modul aufzurufen.

1
Guilherme

Ich habe in letzter Zeit etwas Ähnliches gemacht, außer dass ich aus der Datenbank lösche. Ich vermute, Sie können den Code ändern, um ihn stattdessen zu aktualisieren.

Dies ist der Ajax-Aufruf in default.php

<script>
function ajaxDeleteEvent(finput)
{
    $.ajax({
        url:"index.php?   option=com_jobApplications&task=deleteApplication&id", 
        method:'POST',
        data: "id="+finput,
        success:
            function(data)
            {
                $("#container-"+finput).remove();
                console.log(data); 
            },
        error:
            function(e)
            {   
                console.log("u done goofed");
                console.log(e.message);
            }
    });
}
</script>

Und in controller.php habe ich

public function deleteApplication()
{
    $mainframe = JFactory::getApplication(); 
    $id = JRequest::getVar("id",null,"post","int");
    // Check if id is set
    if ( isset( $id ) )
    {
        // remove that application from database
        $db = JFactory::getDbo();
        $query = $db->getQuery(true);
        ...

    }   
    $mainframe->close();
}
1
Gicadin