Ergebnis 1 bis 5 von 5

Thema: Daten per Ajax in die Datenbank schreiben funktioniert nicht

  1. #1
    Contao-Nutzer Avatar von DNS
    Registriert seit
    13.06.2010.
    Ort
    Kassel
    Beiträge
    174

    Standard Daten per Ajax in die Datenbank schreiben funktioniert nicht

    Hallo Community,

    ich versuche in meinem Frontend Modul unter Contao 3.5.15 vergeblich Daten per Ajax an die Datenbank zu senden. Folgenden Code habe ich auf Grundlage von http://www.cool-it.at/blog/Juni-2012...nem-CMS-System geschrieben.
    Wenn ich die Seite in der das Modul eingebunden ist direkt aufrufe, schreibt er einen Eintrag in die Datenbank aber natürlich ohne die POST Daten. Der Teil der die Daten in die Datenbank schreiben soll, schein also zu funktionieren.
    Irgendwas muss bei der Übergabe per Ajax schief laufen. Anbei auch ein Screenshot der Developer Tools.

    Wäre schön wenn jemand helfen könnte, ansonsten dreh ich noch durch

    PHP-Code:
    <?php
        
    if ($this->Input->get('isAjax') == '1') {

            
    $tstamp time();
            
    $pid intval($_POST['currentvideo']);
            
    $currenttime intval($_POST['current']);
            
    $duration intval($_POST['duration']);

            
    $objResult = \Database::getInstance()->prepare("SELECT * FROM tl_tpStatistic WHERE pid=? ")->execute($pid);
            if (
    $objResult->numRows 1) {
                
    $insert = array(
                    
    'tstamp' => $tstamp,
                    
    'pid' => $pid,
                    
    'currenttime' => $currenttime,
                    
    'duration' => $duration,
                );
                \
    Database::getInstance()->prepare("INSERT INTO tl_tpStatistic %s")->set($insert)->execute();
            } else {
                
    $update = array(
                    
    'tstamp' => $tstamp,
                    
    'pid' => $pid,
                    
    'currenttime' => $currenttime,
                    
    'duration' => $duration,
                );
                \
    Database::getInstance()->prepare("UPDATE tl_tpStatistic %s WHERE pid=?")->set($update)->execute($pid);
            }
            exit; 
    // IMPORTANT!
        
    }
    ?>
    <script>
    (function($) {
        $(document).ready(function() {
            var baseURL = window.location.href;
            setInterval(function(){
                $.ajax({
                    type: 'POST',
                    dataType: 'json',
                    url: baseURL + '?isAjax=1',
                    data: {
                        currentvideo : 3,
                        current : 50,
                        duration : 300
                    },
                    success:function(data){
                        console.log(data); //ist undefined
                        console.log( 'success' );
                    },
                    error: function(xhr, status, error) {
                        console.log( 'failure' );
                    },
                });

            }, 1000);

        });
    })(jQuery);
    </script>
    Bildschirmfoto 2016-08-23 um 15.03.37.png

  2. #2
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi,

    nutzt du denn die Erweiterung simple_Ajax, oder schickst du einfach deine Postdaten an die Seite und hängst "nur" ein Ajax=1 an? Denn das wird so nicht funktionieren.
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  3. #3
    Contao-Nutzer Avatar von DNS
    Registriert seit
    13.06.2010.
    Ort
    Kassel
    Beiträge
    174

    Standard

    Nee, die Erweiterung nutze ich nicht. Weisst du auch warum das ohne die Erweiterung nicht funktioniert?

  4. #4
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Ja, weil dein Request am "normalen" Contao scheitert! Genau dafür gibt es die simple_ajax. Die stellt dir einen HOOK zur Verfügung über den du dann deine Klasse aufrufen kannst. Alternativ erstellt dir deinen eigenen Entrypoint.


    Erstell dir einen eigenen ordner in deiner Erweiterung z.B. ajax

    /system/modules/deinModul/ajax/

    Dort rein kommt eine Datei:
    ajaxStats.php

    PHP-Code:

    <?php

    define
    ('TL_MODE''FE');
    define('BYPASS_TOKEN_CHECK'true);
    require_once(
    '../../../initialize.php');


    class 
    ajaxStats extends System
    {
       public function 
    __construct()
       {
          
    parent::__construct();

        
    // Zugriff auf alles was du brauchst.
         
    \Input::post('deineParamenter');

       \
    Database::getInstance()

       }
    }

    $x = new ajaxStats()
    Wichtig:

    Noch eine .htaccess in den gleichen Ordner, damit die Datei auch aufrufbar ist:
    Code:
    <IfModule !mod_authz_core.c>
      Order allow,deny
    Allow from all
    </IfModule>
    <IfModule mod_authz_core.c>
      Require all granted
    </IfModule>
    Und jetzt musst du eigentlich nur noch dein Javascript auf die Datei umleiten!
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  5. #5
    Contao-Nutzer Avatar von DNS
    Registriert seit
    13.06.2010.
    Ort
    Kassel
    Beiträge
    174

    Standard

    Viele Dank für die schnelle Hilfe, hat mir sehr weiter geholfen! Hab es jetzt erst mal mit simple_ajax gelöst, die andere Möglichkeit schaue ich mir auch noch mal genauer an.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •