Ergebnis 1 bis 9 von 9

Thema: Datenbankabfrage in einem Template möglich?

  1. #1
    Contao-Nutzer
    Registriert seit
    28.08.2009.
    Beiträge
    135

    Standard Datenbankabfrage in einem Template möglich?

    Guten Abend.

    Ich möchte das Nachrichten Template anpassen. Soweit habe ich in das new_full Template einen Button eingefügt. Bei Klick wird die Member ID und die News ID in einer Tabelle in der Datenbank gespeichert (jquery und ajax).
    Sinn des ganzen ist eine Art Lesebestätigung von bestimmten Nachrichten.
    Nur soll der Button nachdem das Lesen der Nachricht bestätigt wurde beim Neuladen der Seite nicht mehr angezeigt werden.
    Folgende Probleme:

    Ich komme anscheinend ausserhalb des News Templates nicht an die ID der Nachricht

    Ich kann zumindest mit meinen Versuchen nicht eine Datenbankabfrage gegen die Tabelle wo die Klicks gespeichert sind durchführen.

    Vielleicht weiß mir hier ja jemand eine Lösung, daß die Schlange sich nicht mehr in den Schwanz beisst.

  2. #2
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard AW: Datenbankabfrage in einem Template möglich?

    Hallo,
    quick and dirty:
    Ich würde einfach die Tabelle mit den Nachrichten um ein Textfeld erweitern und hier ein serialisiertes Array mit den IDs der Mitglieder, die die Nachricht bereits gelesen haben speichern. So ist es viel einfacher.

    Anders:
    Dort, wo Du die Auswahl der News machst den SQL-Befehl umschreiben. Dafür wirst Du aber ein Callback oder Hook brauchen. Mit einer einfachen Templateanpassung wird es da nicht getan sein.

    Viele Grüße,
    eS_IT


    Gesendet mit Tapatalk 2.
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

  3. #3
    Contao-Nutzer
    Registriert seit
    28.08.2009.
    Beiträge
    135

    Standard

    Kann man die Tabellen die Contaoeigen sind einfach so erweitern? Ich dachte die werden bei einem Datenbankupdate wieder "bereinigt".
    Ein serialisiertes Array brauche ich um die Daten eines Arrays abspeichern zu können? Um darauf dann aber wieder zugreifen zu können muss ich es aber erst wieder deserialisieren? Oder gibt es einen einfacheren Weg?

    Vielen Dank schon mal für den ersten Tip!

  4. #4
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Rudolpho Beitrag anzeigen
    Kann man die Tabellen die Contaoeigen sind einfach so erweitern? Ich dachte die werden bei einem Datenbankupdate wieder "bereinigt".
    Ein serialisiertes Array brauche ich um die Daten eines Arrays abspeichern zu können? Um darauf dann aber wieder zugreifen zu können muss ich es aber erst wieder deserialisieren? Oder gibt es einen einfacheren Weg?

    Vielen Dank schon mal für den ersten Tip!
    Du musst Dir einen Ordner unter TL_ROOT/system/modules erstellen und in Deinem neuen Ornder einen Ordner config mit der Datei database.sql. In dieser Datei kannst Du die Datenbank anpassen (s. hier).

    Serialisieren kannst Du ein Array mit
    PHP-Code:
    <?php $string serialize($arrayMitIDs); ?>
    diesen String kannst du einfach in der DB speichern. Wenn Du ihn brauchst bekommst Du ihn mit:
    PHP-Code:
    <?php $arrayMitIDs unserialize($string); ?>
    Du musst nur prüfen, ob die ID des Members schon im Array ist, falls nein hinzufügen und wieder in der DB speichern, falls ja wurde die Nachricht schon gelesen.

    Du solltest Dir aber überlegen, ob Du nicht einen anderen Weg wählst. Da ich die Voraussetzungen nicht kenne, kann ich Dir leider keinen Rat für das richtige Vorgehen geben. Eins steht aber fest, solche Operationen haben nichts im Template verloren.

    Viele Grüße,
    eS_IT
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

  5. #5
    Contao-Nutzer
    Registriert seit
    28.08.2009.
    Beiträge
    135

    Standard

    Sollten die Bedenken aus Sicherheitsgründen kommen so ist dies hier relativ unproblematisch, da es sich um eine interne Firmenseite handelt, auf die nur wenige (<10) Personen Zugriff haben.
    Das was ich basteln will ist Bestandteil des QMS und ist eine simple Kontrolle / Bestätigung, das simple Nachrichten gelesen wurden. Mein Problem beim Umsetzen ist meistens, daß ich grundlegende Kenntnisse in PHP habe jedoch beim objektorientierten Programmieren es mir sehr schnell zu abstrakt wird......

  6. #6
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Rudolpho Beitrag anzeigen
    Sollten die Bedenken aus Sicherheitsgründen kommen so ist dies hier relativ unproblematisch, da es sich um eine interne Firmenseite handelt, auf die nur wenige (<10) Personen Zugriff haben.
    Das was ich basteln will ist Bestandteil des QMS und ist eine simple Kontrolle / Bestätigung, das simple Nachrichten gelesen wurden.
    Die Bedenken sind weniger sicherheitstechnischer, als viel mehr projektorganisatorischer Natur. In den Templates sollte nur die Ausgabe gemacht werden und keine Logik implementiert werden. Dinge wie DB-Abfragen und die Verarbeitung der Daten gehören in eine eigene Klasse.

    Zitat Zitat von Rudolpho Beitrag anzeigen
    Mein Problem beim Umsetzen ist meistens, daß ich grundlegende Kenntnisse in PHP habe jedoch beim objektorientierten Programmieren es mir sehr schnell zu abstrakt wird......
    Wenn Du Hilfe brauchst, kann ich Dir gerne unter die Arme greifen (ich bin gut und günstig ). Weitere Infos findest Du hier und hier. Du kannst mir im Bedarfsfall gerne eine Mail schicken.

    Viele Grüße,
    eS_IT
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

  7. #7
    Contao-Nutzer
    Registriert seit
    28.08.2009.
    Beiträge
    135

    Standard

    Danke für das Angebot! Sollte ich so verzweifelt sein komme ich gerne auf das Angebot zurück. Unglücklicherweise packt mich bei solchen Problemen immer ein gewisser Ergeiz, der mir sagt du kannst es vielleicht doch.
    Ich werde mich mal reinlesen in die Datenbankgeschichte.
    Danke!

  8. #8
    Contao-Nutzer
    Registriert seit
    28.08.2009.
    Beiträge
    135

    Standard

    Ich hab´s jetzt erst mal so gelöst und funktioniert gut:
    Im Template news_full habe ich nur eine Zeile hinzugefügt, damit ich auf die Nachrichten ID zugriff habe
    Code:
    <div class="check" id="news_<?php echo $this->id; ?>"></div>
    Den Rest macht JQuery
    Code:
    <script type="text/javascript">
    $(document).ready(function() 
        {
        var news = $(".check").attr('id');
        var strip_news = news.replace('news_', '');
        var id = $(".sign").attr('id');
        var strip_id = id.replace('user_', '');
        $.ajax({
              type: "POST",
              url: "templates/check_member.php",
              data: {"member" : strip_id , "news" : strip_news},
              success: function(data) 
                          {
                          $(".sign").html(data);
                          $("span.bestaetigung").bind('click',(function() 
                                                                    { 
                                                                    $.ajax({
                                                                          type: "POST",
                                                                          url: "templates/bestaetigung.php",
                                                                          data: {"mitglied" : strip_id , "content" : strip_news},
                                                                          success: function() 
                                                                                    {
                                                                                    $(".sign").hide();
                                                                                    } 
                                                                            });
                                                                      })
                                          );
                          }
              });
        if ( $(".empty").length > 0 ) 
            {
            $(".mod_eventlist").hide();
            }
        });
    </script>
    Der erste Request Checkt in der Datenbank ob die Nachricht schon gelesen wurde:
    PHP-Code:
    <?php
    function filter($data
        {
        
    $data trim(htmlentities(strip_tags($data)));
        if (
    get_magic_quotes_gpc())
        
    $data stripslashes($data);
        
    $data mysql_real_escape_string($data);
        return 
    $data;
        }
      
    $db_host '';
      
    $db_user '';
      
    $db_pass '';
      
    $db_database ''
      
    $link = @mysql_connect($db_host,$db_user,$db_pass) or die('Unable to establish a DB connection');
      
    mysql_set_charset('utf8');
      
    mysql_select_db($db_database,$link);
      
    $memberid filter($_POST["member"]);
      
    $news filter($_POST["news"]);
      
    $gelesen mysql_query("SELECT * FROM int_news WHERE member_id = '".$memberid."' AND news_id = '".$news."'");
      
    $truefalse mysql_num_rows($gelesen);
      if (
    $truefalse == 0)
        {
        echo 
    '<p>Ich habe diese Mitteilung gelesen <span class="bestaetigung"></span></p>';
        }
      else 
        {
        echo 
    '<p>Ich habe diese Nachricht bereits gelesen</p>';
        }
    ?>
    Mit dem success des Request wird ein Click Event an den span gebunden der die Bestätigung in die Datenbank schreibt.

    Sicherlich nicht der Königsweg und ich hoffe kein richtiger Programmierer bekommt davon Kopfschmerzen, aber vielleicht hilfts ja jemanden auch weiter.

    Gruß Rudolpho

  9. #9
    Gesperrt
    Registriert seit
    23.06.2009.
    Ort
    Rheinfelden
    Beiträge
    322

    Standard

    Hi,

    das da
    Code:
    $db_host = '';
      $db_user = '';
      $db_pass = '';
      $db_database = ''; 
      $link = @mysql_connect($db_host,$db_user,$db_pass) or die('Unable to establish a DB connection');
      mysql_set_charset('utf8');
      mysql_select_db($db_database,$link);
    ist direkt im Template vielleicht nicht so geschickt - aus Sicherheitsgründen.
    Nimm doch die Funktion, die Contao direkt anbietet:

    Code:
    $this->import('Database');		
    mysql_query("SET NAMES 'utf8'");?>
    $gelesen = $this->Database->execute("SELECT * FROM int_news WHERE member_id = '".$memberid."' AND news_id = '".$news."'");

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
  •