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

  • Holyfuture
    hat ein Thema erstellt Preg_match abfrage sorgt für json parse error.

    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).

  • lstegelitz
    antwortet
    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

    Einen Kommentar schreiben:


  • hellbringer
    antwortet
    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.

    Einen Kommentar schreiben:


  • Dormilich
    antwortet
    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

    Einen Kommentar schreiben:


  • hellbringer
    antwortet
    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?

    Einen Kommentar schreiben:


  • Holyfuture
    antwortet
    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?

    Einen Kommentar schreiben:


  • hellbringer
    antwortet
    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?

    Einen Kommentar schreiben:


  • Holyfuture
    antwortet
    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.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:

Lädt...
X