it-swarm.com.de

Benutzerdefiniertes Modul mit AJAX aus der Datenbank löschen

Ich habe einige Zeit lang versucht, mich mit Joomlas com_ajax-Komponente zu beschäftigen, um sie in meinem benutzerdefinierten Modul zu verwenden. Das Modul zeigt Daten von einer Komponente an. Eines der Formularfelder ist vom Typ sql und erlaubt mehrere Elemente. Mein benutzerdefiniertes Modul verwendet eine foreach-Schleife, um diese Elemente anzuzeigen. Die Elemente werden in der Tabellenzelle savedproperties_sales Als durch Kommas getrennte Werte gespeichert.

Mein Ziel ist es, einen Löschknopf für jedes Element zu haben, der dieses Element aus der Datenbankzelle löscht, wenn er gedrückt wird.

Hier ist meine PHP-Funktion in meinem Modul helper.php

class ModTusimpleprofileHelper
{
    public function deletePropertysales($propertyid)
    {
        $db = JFactory::getDbo();
        $query = $db->getQuery(true);
        $conditions = array(
            $db->quoteName('savedproperties_sales') . ' = ' . $propertyid
        );
        $query->delete($db->quoteName('#__bdjupix_properties_sales'));
        $query->where($conditions);
        $db->setQuery($query);
        $result = $db->execute();
    }
}

Hier ist die JS in meinem Modul tmpl> default.php

( function($) {
$(document.body).on('click','.deleteproperty',function(){
    $.ajax({
        type: 'GET',
        url: "index.php?option=com_ajax&module=mod_tusimple_profile&Itemid=148&method=deletePropertysales&propertyid="+$(this).data('propertyid'),
        success:function(data){
            alert('Property Deleted');
        },
        error:function(){
            alert('Property Not Deleted');
        }
    });  
});
} )( jQuery );

Und schließlich ist dies mein PHP, um das Element und die Schaltfläche Löschen anzuzeigen, auch in tmpl> default.php

<?php $savedproperties_sales = explode( ',', $profile->savedproperties_sales ); ?>
<?php foreach ( $savedproperties_sales as $savedproperty_sales ) : ?>
<?php
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select( array( 'a.id', 'a.propertyid', 'a.displayaddress' ) )->from( $db->quoteName( '#__bdjupix_properties_sales', 'sales' ) )->where( $db->quoteName( 'sales.propertyid' ) . ' = '. $db->quote( $savedproperty_sales ) );
$db->setQuery( $query );
$results = $db->loadObject();
?>
<p><?php echo $results->address; ?></p>
<form>
<button type="submit" class="deleteproperty">Delete This Property</button>
</form>
<?php endforeach; ?>

Die Elemente werden perfekt angezeigt, aber wie Sie wahrscheinlich feststellen können, ist der Ajax völlig falsch. Ich spiele schon lange damit und komme nicht weiter. Wenn also jemand helfen kann, wäre ich sehr dankbar.

2
DesignSubway

Sicherheit

Vor allem - ich möchte Ihre Aufmerksamkeit darauf lenken:

Sie senden ungefilterte Eingaben der Benutzer an die Datenbank mit dem $propertyId. Unabhängig davon, welche andere Sicherheit besteht, sollten Sie beim Schreiben von Code bewährte Methoden befolgen und Benutzereingaben niemals vertrauen.

Lesen Sie hier, wie Sie mit Joomla sicheren Code schreiben und daran arbeiten, Ihren Code zu verbessern:


Für den AJAX:

Die Methode, die Sie über AJAX aufrufen möchten, muss konventionell benannt werden, z. B. change:

public function deletePropertysales($propertyid)

zu

public function deletePropertysalesAjax($propertyid)

Ich persönlich ziehe es auch vor, den Aufruf durch Übergabe des Anforderungsdatenobjekts aufzubauen. So ist es sauberer.

Beispiel:

var propertyid = $(this).data('propertyid');
var request = {
    'option'    : 'com_ajax',
    'module'    : 'tusimple_profile',
    'propertyid': propertyid,
    'method'    : 'deletePropertysales',
};

$.ajax({
    type    : 'POST',
    data    : request,
    success : function(response) {
        console.log(response.data);
    }
});

Joomla Ajax in Modulreferenzen:

2
FFrewin