Ergebnis 1 bis 23 von 23

Thema: Anmeldeformular nur anzeigen, wenn nicht bereits angemeldet

  1. #1
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard Anmeldeformular nur anzeigen, wenn nicht bereits angemeldet

    Hallo zusammen

    Ich habe das Formular auf einer geschützten Seite, damit sich nur registrierte Mitglieder anmelden können.
    Gibt es eine Möglihckeit, das Formular nur anzuzeigen, wenn das Mitglied noch nicht für diesen Event angemeldet ist bzw. wie habe ich im Template event_full Zugriff auf die bereits angemeldeten Personen?

    Herzlichen Dank für Eure Hilfe!

  2. #2
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Habe nun geshen, dass die Daten in der Tabelle tl_lead_data zu finden sind und aus dem template darauf zugegriffen werden kann.
    Da diese Tabelle etwas speziell aufgebaut ist (id /pid und name/value) sehe ich noch nicht genau wie ich die Abfrage machen muss, um zu prüfen, ob das aktive Mitglied beim zugehörigen event bereits eingetragen ist.
    Hat vielleicht jemand schon etwas ähnliches umgesetzt oder sonst einen Denkanstoss? Danke

  3. #3
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Da es zeitlich etwas drängt, wäre die Hilfestellung auch als bezahlte Unterstützung denkbar (Thread kann bei Bedarf verschoben werden)

  4. #4
    Administratorin Avatar von lucina
    Registriert seit
    19.06.2009.
    Ort
    Kiel (DE)
    Beiträge
    7.379
    Partner-ID
    152
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Moderation: Da es für Kleinaufträge ein paar Eckdaten zu beachten gibt: Stelle es doch bitte in dem Bereich selbst ein.

  5. #5
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    habe ich gemacht

  6. #6
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.173

    Standard

    Zitat Zitat von Luminanz Beitrag anzeigen
    Hallo zusammen

    Ich habe das Formular auf einer geschützten Seite, damit sich nur registrierte Mitglieder anmelden können.
    Gibt es eine Möglihckeit, das Formular nur anzuzeigen, wenn das Mitglied noch nicht für diesen Event angemeldet ist bzw. wie habe ich im Template event_full Zugriff auf die bereits angemeldeten Personen?

    Herzlichen Dank für Eure Hilfe!
    Um welche Contao-Version geht es? Welche Version von calendar_extended?
    Gruß Kester

    Kein Support via PN ohne vorherige Absprache.

  7. #7
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Es handelt sich um Contao 3.5.35.
    von calendar-extended habe ich die aktuellste Version von github manuell installiert.

  8. #8
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.173

    Standard

    ok, dann hast du zumindest insofern Pech, als dass es von der Erweiterung her da nichts geben wird. calendar_extended für Contao 3.5.x erhält nur noch wichtige Bugfixes. Evtl. baue ich so eine Prüfung in das calendar-extended-bundle für Contao 4.x ein. Muss ich mal sehen.

    Viel Erfolg.

    UPDATE: Evtl. mache ich es ja doch im Rahmen deines Kleinauftrages.
    Geändert von kmielke (26.07.2018 um 18:53 Uhr)
    Gruß Kester

    Kein Support via PN ohne vorherige Absprache.

  9. #9
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Zitat Zitat von kmielke Beitrag anzeigen
    calendar_extended für Contao 3.5.x erhält nur noch wichtige Bugfixes.
    Kein Problem, das war mir bewusst.

  10. #10
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    In meinem Fall braucht es eigentlich nicht mehr viel! Lediglich die Datenbankabgfragen sind mir nicht klar:
    PHP-Code:
    <?php
    //event_full.html5

    //Username (emailadresse) des aktuell angemeldeten Mitgliedes
    $this->import('FrontendUser','user');
    $username $this->user->username;

    //ID des ausgewähten Events
    $event_id $this->id;

    //Abfragen Datenbank tl_lead_data

    //Abfrage 1:
    //ist $username in value enthalten, falls ja, Ausgabe von entsprechenden "pid" (können mehrere sein, da sich Mitglieder bei mehreren Events anmelden können)

    //Abfrage 2:
    //ist bei diesen "pid" die eventid enthalten, welche $event_id entspricht

    //das resultat (true/false) könnte dann in einer Variable gespeichert werden, so könnte das formular nur dann angezeigt werden, wenn das Mitglied bei diesem Event noch nicht angemeldet ist

    ?>
    Hier noch ein screenshot von der Datenbanktabelle (nur ein Eintrag bzw. eine Anmeldung):
    Bildschirmfoto 2018-07-25 um 18.43.54.png
    Geändert von Luminanz (26.07.2018 um 21:43 Uhr)

  11. #11
    Contao-Fan
    Registriert seit
    27.06.2010.
    Beiträge
    539

    Standard

    Anhand deines Codeschnipsels wahrscheinlich so:

    PHP-Code:
    <?php
    //event_full.html5

    //Username (emailadresse) des aktuell angemeldeten Mitgliedes
    $username = \FrontendUser::getInstance()->username;

    //ID des ausgewähten Events
    $eventId $this->id;

    //Abfragen Datenbank tl_lead_data

    //Abfrage 1:
    //ist $username in value enthalten, falls ja, Ausgabe von entsprechenden "pid" (können mehrere sein, da sich Mitglieder bei mehreren Events anmelden können)
    $stmt = \Database::getInstance()->prepare('SELECT id FROM tl_lead_data WHERE value=? AND pid=?')
    ->
    execute($username$eventId);

    //Abfrage 2:
    //ist bei diesen "pid" die eventid enthalten, welche $event_id entspricht

    //das resultat (true/false) könnte dann in einer Variable gespeichert werden, so könnte das formular nur dann angezeigt werden, wenn das Mitglied bei diesem Event noch nicht angemeldet ist

    if ($stmt->numRows 0) {
        
    // Das Anmeleformular nicht ausgeben
    } else {
        
    // Das Anmeldeformular ausgeben
    }

    ?>

  12. #12
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Hallo Richard

    Vielen herzlichen Dank für die Hilfe.
    Probiere es heute Abend sofort aus!

  13. #13
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Funktioniert leider noch nicht ganz.
    Die ID des Events steht nicht in pid, sondern leider auch in value, siehe Datenbank:Bildschirmfoto 2018-07-25 um 18.43.54.png
    Daher sind vermutlich zwei abfragen nötig...

  14. #14
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Müsste wohl so ungefähr gehen, die zweite Datenbankabfrage ist mir aber nicht klar:

    PHP-Code:
    <?php



    //Username (emailadresse) des aktuell angemeldeten Mitgliedes
    $username = \FrontendUser::getInstance()->username;

    //ID des ausgewähten Events
    $eventId $this->id

    //Datensätze auslesen, wo sich das Mitglied angemeldet hat
    $stmt = \Database::getInstance()->prepare('SELECT pid FROM tl_lead_data WHERE value=?')
    ->
    execute($username);

    //nur die Datensätze aus der ersten Abfrage prüfen, ob name=eventid AND value=$eventId
    $stmt2 ;

    if (
    $stmt2->numRows 0) {
        
    // Das Anmeleformular nicht ausgeben
        
    echo "bereits angemeldet";
    } else {
        
    // Das Anmeldeformular ausgeben
        
    echo "noch nicht angemeldet";
    }


     
    ?>

  15. #15
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.972

    Standard

    Ich denke, in einem sollte es so gehen:

    Code:
    -- Anzahl der Records zur $eventid, die zu einem "Record" gehören, dessen pid in der Liste aller pid ist, die zum User gehören
    SELECT COUNT(*) FROM tl_lead_data WHERE name='eventid' AND value=? AND pid IN (
      -- alle pid zu denen User bereits angemeldet ist
      SELECT pid FROM tl_lead_data WHERE name='email' AND value=?  
    )
    
    -- Parameter für die ?:
    --  * $eventId
    --  * $username
    -- 
    -- Ergebnis: COUNT(*) == 1 (also Treffer) => User bereits angemeldet
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  16. #16
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Hallo fiedsch

    Vielen Dank für deine Hilfe.

    Erhalte leider noch einen syntax-error, aber von der Logik her scheint es wohl zu stimmen

    PHP-Code:
    <?php

    //Username (emailadresse) des aktuell angemeldeten Mitgliedes
    $username = \FrontendUser::getInstance()->username;

    //ID des ausgewähten Events
    $eventId $this->id

    //Datensätze auslesen, wo sich das Mitglied angemeldet hat
    $stmt = \Database::getInstance()->prepare('SELECT COUNT(*) FROM tl_lead_data WHERE name='eventid' AND value=? AND pid IN (
      -- alle pid zu denen User bereits angemeldet ist
      SELECT pid FROM tl_lead_data WHERE name='
    email' AND value=?  
    )'
    )
    ->
    execute($eventId$username);


    if (
    $stmt->numRows 0) {
        
    // Das Anmeleformular nicht ausgeben
        
    echo "bereits angemeldet";
    } else {
        
    // Das Anmeldeformular ausgeben
        
    echo "noch nicht angemeldet";
    }

     
    ?>

  17. #17
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Den syntax error konnte ich beheben (Anführungszeichen), aber leider wird überall "bereits angemeldet" ausgegeben, auch wenn dies nicht der Fall ist:

    PHP-Code:
     <?php

    //Username (emailadresse) des aktuell angemeldeten Mitgliedes
    $username = \FrontendUser::getInstance()->username;

    //ID des ausgewähten Events
    $eventId $this->id

    //Datensätze auslesen, wo sich das Mitglied angemeldet hat
    $stmt = \Database::getInstance()->prepare('SELECT COUNT(*) FROM tl_lead_data WHERE name="eventid" AND value=? AND pid IN (
      -- alle pid zu denen User bereits angemeldet ist
      SELECT pid FROM tl_lead_data WHERE name="email" AND value=?  
    )'
    )
    ->
    execute($eventId$username);


    if (
    $stmt->numRows 0) {
        
    // Das Anmeleformular nicht ausgeben
        
    echo "bereits angemeldet";
    } else {
        
    // Das Anmeldeformular ausgeben
        
    echo "noch nicht angemeldet";
    }

     
    ?>

  18. #18
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.173

    Standard

    Hi Luminanz,

    wenn du das Problem doch so lösen möchtest, solltst du deine Kleinauftrag wieder löschen, oder?

    Gruß Kester
    Gruß Kester

    Kein Support via PN ohne vorherige Absprache.

  19. #19
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Zitat Zitat von kmielke Beitrag anzeigen
    Hi Luminanz,

    wenn du das Problem doch so lösen möchtest, solltst du deine Kleinauftrag wieder löschen, oder?

    Gruß Kester
    habe den Kleinauftrag vorläufig auf inaktiv gesetzt. Danke für den Hinweis

  20. #20
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.972

    Standard

    Dein (denk-)Fehler ist numRows > 0. Du bekommst immer eine Zeile zurück. Der Wert ist 0 oder 1.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  21. #21
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Danke für den Hinweis. Habe es nun so probiert:

    PHP-Code:
    <?php

    //Username (emailadresse) des aktuell angemeldeten Mitgliedes
    $username = \FrontendUser::getInstance()->username;

    //ID des ausgewähten Events
    $eventId $this->id

    //Datensätze auslesen, wo sich das Mitglied angemeldet hat
    $stmt = \Database::getInstance()->prepare('SELECT COUNT(*) FROM tl_lead_data WHERE name="email" AND value=? AND pid IN (
      -- alle pid zu denen User bereits angemeldet ist
      SELECT pid FROM tl_lead_data WHERE name="eventid" AND value=?  
    )'
    )
    ->
    execute($username$eventId);


    echo 
    $eventId;
    echo 
    $username;


    if (
    $stmt == 1) {
        
    // Das Anmeleformular nicht ausgeben
        
    echo "bereits angemeldet";
    } else {
        
    // Das Anmeldeformular ausgeben
        
    echo "noch nicht angemeldet";
    }

     
    ?>
    Leider wird aber trotzdem immer eine 1 ausgegeben, auch wenn niemand angemeldet ist

  22. #22
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.972

    Standard

    Probier mal COUNT(*) as n und $stmt->n > 0
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  23. #23
    Contao-Nutzer Avatar von Luminanz
    Registriert seit
    02.02.2011.
    Beiträge
    198

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    Probier mal COUNT(*) as n und $stmt->n > 0
    Funktioniert perfekt! Herzlichen Dank! Ich bin happy

    Hier der funktionierende code:
    PHP-Code:
    <?php

    //Username (emailadresse) des aktuell angemeldeten Mitgliedes
    $username = \FrontendUser::getInstance()->username;

    //ID des ausgewähten Events
    $eventId $this->id

    //Datensätze auslesen, wo sich das Mitglied angemeldet hat
    $stmt = \Database::getInstance()->prepare('SELECT COUNT(*) as n FROM tl_lead_data WHERE name="email" AND value=? AND pid IN (
      -- alle pid zu denen User bereits angemeldet ist
      SELECT pid FROM tl_lead_data WHERE name="eventid" AND value=?  
    )'
    )
    ->
    execute($username$eventId);


    if (
    $stmt->0) {
        
    // Das Anmeleformular nicht ausgeben
        
    echo "bereits angemeldet";
    } else {
        
    // Das Anmeldeformular ausgeben
        
    echo "noch nicht angemeldet";
    }

     
    ?>

Aktive Benutzer

Aktive Benutzer

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

Berechtigungen

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