Contao-Camp 2024
Ergebnis 1 bis 7 von 7

Thema: Fortlaufende Nummer im Anmeldeformular vergeben

  1. #1
    Contao-Fan Avatar von fusch
    Registriert seit
    25.03.2012.
    Ort
    München
    Beiträge
    498
    Contao-Projekt unterstützen

    Support Contao

    Standard Fortlaufende Nummer im Anmeldeformular vergeben

    Beim vergangenen Contao-Stammtisch in München haben wir u.a. folgendes Problem gelöst, das ich in einem Tutorial zusammengefasst habe.

    Die Anforderung war, eine fortlaufende Startnummer für eine Sportveranstaltung zu generieren und diese auch direkt mit der Bestätigungsmail an den Teilnehmer zu schicken.

    Vielleicht hilft es dem einen oder anderen.

    Viele Grüße
    Hella
    Mitglied des Contao User Treffen München
    Aktuelle Termine erfährst Du immer unter www.contao-bayern.de
    Komm' doch mal vorbei!

  2. #2
    Contao-Nutzer Avatar von Schmidty
    Registriert seit
    06.06.2011.
    Ort
    Pforzheim
    Beiträge
    201

    Frage Speichern mit Leads

    Hallo,

    Danke für die Anleitung.

    Ich habe die Vorgabe, die Anmeldedaten und die Anmeldenummer mit Leads zu speichern.
    Das funktioniert auch. Nur bei der Abfrage der max. Anmeldenummer aus der Leads-Tabelle hatte ich etwas Schwierigkeiten. Ich habe es mit nachfolgender SQL-Abfrage gelöst (Beispiel 02), weiß aber nicht, ob das die optimale Lösung ist.
    Anbei der entsprechende Skript-Ausschnitt sowie Screenshots von tl_lead und tl_lead_data. Das Anmeldeformular hat die id=6 und das versteckte Formularfeld mit der Anmeldenummer hat die id=38.

    Gibt es eine bessere Lösung?
    Wenn ja, bitte eine Anleitung für SQL-Anfänger, Danke.

    Screenshots: tl_lead.jpg / tl_lead_data.jpg

    PHP-Code:
    // Datenbankabfrage - Nimm aus der Tabelle "form_anmeldungen" den größten Wert in der Spalte anmeldenummer unter dem Alias maxanmeldenummer.

    // 01 - Auslesen der Anmeldenummer aus einer Datenbankspalte (ohne Leads)
    // $sql = "SELECT MAX(anmeldenummer) AS maxanmeldenummer FROM form_anmeldungen";

    // 02 - Auslesen der Anmeldenummer aus tl_lead_data
    // field_id = ID des versteckten Formularfelds mit der Anmeldenummer
    $sql "SELECT (value) AS maxanmeldenummer FROM `tl_lead_data` WHERE `field_id`='38' ORDER BY VALUE DESC LIMIT 1";

    // Ausführung der Datenbankabfrage
    $result Database::getInstance()->prepare($sql)->execute();

    //Kontrollausgabe der maxanmeldenummer
    echo '$result->maxanmeldenummer'
    Danke für Eure Tipps.

  3. #3
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.446
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    so (SELECT max.... ):

    PHP-Code:
    $sql "SELECT max(value) AS maxanmeldenummer FROM `tl_lead_data` WHERE `field_id`='38' ORDER BY VALUE DESC LIMIT 1"
    Das max fehlt. Damit wird der höchste Wert ermittelt.

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

    Standard

    Ich sehe eher das Problem darin, daß Du (laut Screenshot) in der Spalte tl_lead_data.value Zahlen und E-Mail-Adressen stehen hast. Was hättest Du den da gerne als Maximalwert?

    Edit: sorry, habe den Filter field:id=38 übersehen. Ist also hinfällig.

    Die Datenbankabfragen sollten nach meinem Verständnis aber identische Resultate liefern:

    Code:
    -- wie von @cliffen geschrieben
    SELECT max(value) AS maxanmeldenummer FROM `tl_lead_data` WHERE `field_id`='38' ORDER BY VALUE DESC LIMIT 1
    -- sollte ohne ORDER und LIMIT identisch sein, da MAX() nur eine Zeile im Ergebnis ergibt 
    SELECT max(value) AS maxanmeldenummer FROM `tl_lead_data` WHERE `field_id`='38'
    -- sollte wiederum das gleiche sein wie: alle Daten absteigend sortiert und davon die erste Zeile
    SELECT value AS maxanmeldenummer FROM `tl_lead_data` WHERE `field_id`='38' ORDER BY VALUE DESC LIMIT 1
    Die eleganteste Formulierung wäre für mich

    Code:
    SELECT max(value) AS maxanmeldenummer FROM `tl_lead_data` WHERE `field_id`='38'
    Geändert von fiedsch (29.01.2019 um 07:12 Uhr)
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  5. #5
    Contao-Nutzer Avatar von Schmidty
    Registriert seit
    06.06.2011.
    Ort
    Pforzheim
    Beiträge
    201

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    Die eleganteste Formulierung wäre für mich

    Code:
    SELECT max(value) AS maxanmeldenummer FROM `tl_lead_data` WHERE `field_id`='38'
    Danke -so habe ich das Ganze jetzt auch gelöst.

  6. #6
    Contao-Nutzer
    Registriert seit
    21.07.2009.
    Beiträge
    224

    Standard

    Funktioniert das noch unter C4.9 ?! oder muss man was noch beachten !?

    Vielen Dank schonmal!

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

    Standard

    Zitat Zitat von sfx Beitrag anzeigen
    Funktioniert das noch unter C4.9
    Ich denke, ja. Anstelle des Namespace AppBundle solltest Du App verwenden, dann müsste der autoload-Teil entfallen können.

    Probiere es doch einfach mal aus und berichte hier!
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

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
  •