Ergebnis 1 bis 5 von 5

Thema: Feldprüfung mit Datenbank Abfrage

  1. #1
    Contao-Nutzer
    Registriert seit
    26.12.2010.
    Beiträge
    39

    Standard Feldprüfung mit Datenbank Abfrage

    Hallo,

    Contao Version: 2.11.12

    Ich habe ein Formular mit einem Feld.
    Für dieses Feld habe ich eine eigene regexp Prüfung angelegt.
    Diese Prüfung soll den eingegebenen Feldwert in 2 Datenbank Tabellen prüfen.
    Und zwar wie folgt:

    1. Tabelle: Feldwert muß vorhanden sein und status = 3 haben.
    2. Tabelle: Feldwert darf nicht vorhanden sein!

    Folgendes habe ich bisher realisiert:

    PHP-Code:
    <?php
    class MyRegexps extends Backend
    {
        public function 
    checkActivkey($strRegexp$varValueWidget $objWidget)
        {
            if (
    $strRegexp == 'myCustomRegexp') {
                
    $objResult $this->Database->prepare("SELECT COUNT(mm_payments.activationkey) FROM mm_payments, mm_member_license WHERE mm_payments.activationkey = '" $varValue "' AND mm_payments.status='3' AND mm_member_license.activationkey != '" $varValue "'")
                ->
    limit(1);
                if (
    $objResult == '0') {
                    
    $objWidget->addError('The ' $objWidget->label ' is in use, not registered or not unlocked at this time".');
                }
                return 
    true;
            }
            return 
    false;
        }
    }
    Es soll als Ergebnis nur 0 (falsch) oder 1 (wahr) zurückgeben. (daher count)
    Leider funktioniert es nicht, wie es sollte.
    Es wird immer die Fehlermeldung ausgegeben, obwohl die query, wenn ich sie in der Datenbank direkt ausführe, funktioniert.

    Wo liegt der Fehler?

    Danke!
    Steffen
    Geändert von mrx02de (27.08.2013 um 20:23 Uhr)

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

    Support Contao

    Standard

    Moin Steffen,

    also ich würde so nun 2 Probleme ausmachen.

    Im DB Call fehlt am Ende (nach dem limit) das execute, quasi:

    PHP-Code:
    ..... ->limit(1)->execute(); 
    Dann wird die Query ausgeführt und danach ist in $objResult auch was drin.

    Da ist nun das 2. Problem, denn $objResult ist wie der Variablenname schon richtig sagt ein Objekt.

    Das hat nun Properties, die man abfragen kann.

    Wie man dabei ein Database COUNT abfragt weiß ich gerade nicht. Vlt. kannst die Query um einen Alias "as count" erweitern, den du dann wiederum so abfragst:

    PHP-Code:
    $objResult->count 
    Grüße, Cliff

  3. #3
    Contao-Nutzer
    Registriert seit
    26.12.2010.
    Beiträge
    39

    Standard

    Hallo Cliff,

    ich habe deine beiden Vorschläge umgesetzt.

    PHP-Code:
     <?php
    class MyRegexps extends Backend
    {
        public function 
    checkActivkey($strRegexp$varValueWidget $objWidget)
        {
            if (
    $strRegexp == 'myCustomRegexp') {
                
    $objResult $this->Database->prepare("SELECT COUNT(mm_payments.activationkey) AS count FROM mm_payments, mm_member_license WHERE mm_payments.activationkey =? AND mm_payments.status=? AND mm_member_license.activationkey !=?")
                ->
    limit(1)
                ->
    execute($varValue3$varValue);
                
    $erg $objResult->count;
                if (
    $erg == 0) {
                    
    $objWidget->addError('The ' $objWidget->label ' is in use, not registered or not unlocked at this time".');
                }
                return 
    true;
            }
            return 
    false;
        }
    }
    Im Debugmodus wird mir jedoch als Ergebnis folgendes ausgegeben:

    PHP-Code:
        [37] => Array
            (
                [
    0] => SELECT COUNT(mm_payments.activationkey) AS count FROM mm_paymentsmm_member_license WHERE mm_payments.activationkey ='68O9-5R23-X875' AND mm_payments.status=AND mm_member_license.activationkey !='68O9-5R23-X875' LIMIT 0,1
                
    [1] => 1 rows returned
                
    [2] => Array
                    (
                        [
    id] => 1
                        
    [select_type] => SIMPLE
                        
    [table] => 
                        [
    type] => 
                        [
    possible_keys] => 
                        [
    key] => 
                        [
    key_len] => 
                        [
    ref] => 
                        [
    rows] => 
                        [
    Extra] => Impossible WHERE noticed after reading const tables
                    
    )

            ) 
    Irgendwie kommt er mit der WHERE clausel nicht klar, obwohl diese in phpmyadmin getestet und auch funktioniert.
    Geändert von mrx02de (27.08.2013 um 21:46 Uhr)

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

    Support Contao

    Standard

    Hmmm, eigentlich muss der Übergabewert von execute ein array sein, also so:

    PHP-Code:
    ... ->execute(array($varValue3$varValue)); 
    Dann sollte das schon mal passen.

    Allerdings fehlt in der WHERE Clause eine Verknüpfung der beiden Tabellen.

    Könntest du sonst ggf. auch über ein SQL JOIN lösen.

    Grüße, Cliff

  5. #5
    Contao-Nutzer
    Registriert seit
    26.12.2010.
    Beiträge
    39

    Standard

    Hallo Cliff,

    erstmal vielen Dank für deine Hilfe.

    Mit dem Array hattest du recht.
    Soweit läuft jetzt auch alles.

    Allerdings fehlt in der WHERE Clause eine Verknüpfung der beiden Tabellen.
    Genau, aber das habe ich anders lösen können. Ich habe jetzt einfach 2 Abfragen statt einer gemacht und es funktioniert.
    Dadurch hab ich jetzt auch zwei detailierte Fehlermeldungen, die dem User angezeigt werden.

    Vielen Dank
    Steffen

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
  •