Ankündigung

Einklappen
Keine Ankündigung bisher.

Preg_match abfrage sorgt für json parse error

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Preg_match abfrage sorgt für json parse error

    Hallöchen,
    aktuell arbeite ich an einer live check avaibility. Die Error und die entsprechenden Meldungen funktionieren soweit so gut, wenn ich aber in den validation Zweig und zur dementsprechenden preg_match abfrage komme, gibt mir json einen parse error. Liegt es eventuell an dem preg match oder an meiner Abfrage? Die Abfragen werden alle über PHP gesteuert und zuletzt wird ein json object an das ajax übergeben. Ganzer PHP code:

    PHP-Code:
    <?php

    class Registration
    {

        public 
    $userReg '!/[~`!#$%\^&*+=\-\[\]\\\';,/{}|\\":<>\?]/';

        public 
    $mailReg "/^([a-zA-Z0-9-_]*)[.]{0,1}([a-zA-Z0-9-_]*)[@]([a-zA-Z0-9-_]*[.]{1}[a-zA-Z]{2,3})$/";

        public function 
    Connection()
        {
            static 
    $connection null;

            if (
    $connection == null) {
                
    $connection = new PDO('mysql:host=localhost;dbname=planer''root''root');
            }

            return 
    $connection;
        }

        public function 
    getQuery($col$data)
        {
            
    /*
             * $col = tabellen spalte
             * $data = referenzenwert
             */
            
    $result $this->Connection()->prepare("SELECT * FROM users WHERE $col = ?");

            
    $result->execute(array($data));
            
    $statement $result->fetchColumn();

            return 
    $this->inputCheck($statement$data);

        }

        public function 
    inputCheck($statement$data)
        {
            if (!
    strlen($data) < 3) {
                if (
    $statement 0) {
                    return 
    json_encode(array("dataExists" => true));
                } else {
                    return 
    $this->stringValidation($data);
                }
            } else {
                return 
    json_encode(array("inputLength" => true));
            }
        }

        public function 
    stringValidation($data)
        {
            if (
    $data === $_POST['username']) {
                if (!
    preg_match($this->userReg$data)) {
                    return 
    json_encode(array("state" => true));
                }
            }

            
    /*
            if ($data == $_POST['username']) {
                if (!preg_match($this->userReg, $data)) {
                    return json_encode(array("state" => true));
                } else {
                    return json_encode(array("notValidate" => true));
                }
            } else if ($data == $_POST['mail']) {
                if (!preg_match($this->mailReg, $data)) {
                    return json_encode(array("state" => true));
                } else {
                    return json_encode(array("notValidate" => true));
                }
            }*/

            //return false;
        
    }

        public function 
    returnState()
        {
            return 
    json_encode(array("state" => true));
        }
    }


    $obj = new Registration();
    $response = array();

    if (!empty(
    $_POST['username'])) {
        
    header("Content-Type: application/json");
        echo 
    json_encode($obj->getQuery("username"$_POST['username']));
    }

    if (!empty(
    $_POST['mail'])) {
        
    header("Content-Type: application/json");
        
    $obj->getQuery("mail"$_POST['mail']);
    }
    Edit:
    Komischerweise gibt es einen Formatierungs-Error wenn ich den PHP Tag benutze. Deswegen poste ich mal einen Link zum Code (https://1337.cat/53).


  • #2
    $ ist ein Sonderzeichen, das in Doppel-Quote ("") eine bestimmte Bedeutung hat. Warum verwendest du nicht einfache Quotes?

    Kommentar


    • #3
      Zitat von hellbringer Beitrag anzeigen
      $ ist ein Sonderzeichen, das in Doppel-Quote ("") eine bestimmte Bedeutung hat. Warum verwendest du nicht einfache Quotes?
      Keine Ahnung, warum sollte ich sie nicht verwenden? Ich war mir über diese bestimmte Bedeutung nicht bewusst, deswegen habe ich einfach " genommen.

      Kommentar


      • #4
        Zitat von Holyfuture Beitrag anzeigen
        Keine Ahnung, warum sollte ich sie nicht verwenden? Ich war mir über diese bestimmte Bedeutung nicht bewusst, deswegen habe ich einfach " genommen.
        Nicht das PHP-Handbuch gelesen?

        Kommentar


        • #5
          Zitat von hellbringer Beitrag anzeigen

          Nicht das PHP-Handbuch gelesen?
          Ich habe mir damals alles selber beigebracht und hab da wohl einige Dinge überlesen, hehe. Ich werd' mich informieren. Ich habe übrigens den Fehler gefunden. Ich musste $this-userReg in json encodieren. Wieso das so ist weiß ich aber nicht, da ja doch der String noch nicht übergeben wird. Kann mich jemand aufklären?

          Kommentar


          • #6
            Zitat von Holyfuture Beitrag anzeigen
            Ich habe übrigens den Fehler gefunden. Ich musste $this-userReg in json encodieren.
            Jetzt hast du einen ziemlichen Käse, der irgendwas tut.

            Warum schreibst du nicht ein paar Testfälle und lässt diese durchlaufen?

            Kommentar


            • #7
              Ich musste $this-userReg in json encodieren.
              Backslashes haben in JSON eine besondere Bedeutung. Steht auch so im JSON-Handbuch.

              Es gibt in PHP auch einen eingebauten Test für E-Mail-Adressen. sh. http://php.net/manual/de/filter.filters.validate.php

              Kommentar


              • #8
                Ich würde diesen Regex-Check generell wegschmeißen. z.B. meine E-Mail-Adresse, die ich tagtäglich verwende, ist laut dieser Regex ungültig.

                Kommentar


                • #9
                  http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html

                  Das ist die RFC-822 konforme RegExp für den Email Check - und es wird allerwelts empfohlen, sie NICHT zu benutzen, weil sie so kompliziert und langsam ist...

                  Aber vielleicht hilft auch dieser Artikel:
                  https://stackoverflow.com/questions/...lar-expression


                  Grundsätzlich kann man sagen, das man sich diesen ganzen Validierungskram bei email Adressen sparen kann - semantische Korrektheit sagt halt garnichts darüber aus, ob diese email auch gültig ist.

                  Es gibt nur ein Verfahren zur Sicherstellung: double-optin
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar

                  Lädt...
                  X