Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 18
Like Tree3Likes

Thema: $_POST Variable bleibt leer nach senden

  1. #1
    uvcmd ist offline Jungspund
    registriert
    23-02-2017
    Beiträge
    20

    $_POST Variable bleibt leer nach senden

    Guten Tag.

    Ich habe folgendes Problem:
    Ich möchte die Eingabe eines Nutzers in einem Input Feld überprüfen. Die Verbindung zwischen Javascript-Datei und PHP-Skript funktioniert. Allerdings wird kein Wert in der nötigen Variable gespeichert.
    Der Code sieht wie folgt aus:

    Code:
            <script>
                function userRequest() {
                    if (window.XMLHttpRequest) {
                        request = new XMLHttpRequest();
                    }
                    else if (window.ActiveXObject) {
                        try {
                            request = new ActiveXObject('Msxml2.XMLHTTP');
                        }
                        catch (e) {
                            try {
                                request = new ActiveXObject('Microsoft.XMLHTTP');
                            }
                            catch (e) {}
                        }
                    }
                    
                    if (!request) {
                        alert("Kann keine XMLHTTP-Instanz erzeugen");
                        return false;
                    }
                    else {
                        var url = "ajax/register.php";
                        var user = document.getElementById('user').value;
                        request.open('post', url, true);
                        request.setRequestHeader('Content_Type', 'application/x-www-form-urlencoded');
                        request.send('user=1&a=1');
                        request.onreadystatechange = userInterpret;
                    }
                }
                
                function userInterpret() {
                    switch (request.readyState) {
                        case 4:
                            if (request.status != 200) {
                                alert ("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status);
                            }
                            else {
                                var usererror = request.responseText;
                                document.getElementById('usererror').innerHTML = usererror;
                                alert(usererror);
                            }
                            break;
                        default:
                            break;
                    }
                }
            </script>
    HTML-Code:
    <input id="user" type="text" name="user" maxlength="16" placeholder="Benutzername" value="<?php echo $user; ?>" onchange="userRequest()" /><br/>
    PHP-Code:
    <?php
        header
    ('Content-Type: text/html; charset=utf-8');
        
    header('Cache-Control: must-revalidate, pre-check=0, no-store, no-cache, max-age=0, post-check=0');
        
        
    $user $_POST['user'];
        
        if (
    strlen($user) < 3) {
            
    $usererror "Der Name braucht mindestens 3 Zeichen!";
        }
        elseif (!
    preg_match("/^[a-zA-Z0-9äöüÄÖÜ]+$/"$user)) {
            
    $usererror "Es dürfen nur deutsche Buchstaben und Zahlen im Namen verwendet werden!";
        }
        elseif (
    strlen($user) > 16) {
            
    $usererror "Der Name darf maximal 16 Zeichen enthalten!";
        }
        else {
            
    $usererror "";
        }
        
        echo 
    "<i>".$usererror."</i>";
    ?>
    Ich habe schon geprüft, bei $print_r($_POST) erhalte ich ein leeres Array.

    Weiß wer woran das liegt?

    MfG. UV

  2. #2
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.683

    AW: $_POST Variable bleibt leer nach senden

    Zitat Zitat von uvcmd Beitrag anzeigen
    Weiß wer woran das liegt?
    Content_Type !== Content-Type

    PS: ein globales XHR-Objekt ist keine gute Idee und auch unnötig. In userInterpret kannst du über this darauf zugreifen.
    uvcmd likes this.

  3. #3
    uvcmd ist offline Jungspund
    registriert
    23-02-2017
    Beiträge
    20

    AW: $_POST Variable bleibt leer nach senden

    Vielen Dank für die Antwort.
    Kannst du bitte genauer ausführen, was ich genau mit "this" aufrufen kann und was unnötig ist?

  4. #4
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.683

    AW: $_POST Variable bleibt leer nach senden

    Einfach in der userInterpret() request durch this austauschen... und natürlich in der userRequest() am Anfang ein var request; einfügen.

  5. #5
    uvcmd ist offline Jungspund
    registriert
    23-02-2017
    Beiträge
    20

    AW: $_POST Variable bleibt leer nach senden

    Danke, das hat alles soweit geklappt.

    Wie funktioniert das denn aber mit mehreren Werten?
    Ich habe nun den Code wie folgt erweitert:

    Code:
    var url = "ajax/register.php";
    var user = document.getElementById('user').value;
    var password = document.getElementById('password').value;
    var passwordb = document.getElementById('passwordb').value;
    request.open('post', url, true);
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    request.send('user='+user+'&password='+password+'&passwordb='+passwordb);
    request.onreadystatechange = userInterpret;
    Bei userInterpret:

    Code:
    var error = this.responseText;
                                
    var usererror = error.getElementById('usererror');
    var passworderror = error.getElementById('passworderror');
                                
    document.getElementById('usererror').innerHTML = usererror;
    document.getElementById('passworderror').innerHTML = passworderror;
    HTML-Code:
    <span id="usererror"></span>
    <input id="user" type="text" name="user" maxlength="16" placeholder="Benutzername" value="<?php echo $user; ?>" onchange="userRequest()" />
    <span id="passworderror"></span>
    <input id="password" type="password" name="password" maxlength="64" placeholder="Passwort" value="<?php echo $password; ?>" onchange="userRequest()" />
    <input id="passwordb" type="password" name="passwordb" maxlength="64" placeholder="Passwort bestätigen" value="<?php echo $passwordb; ?>" onchange="userRequest()" />
    PHP-Code:
        if (strlen($password) > 64) {
            
    $passworderror "Das Passwort darf maximal 64 Zeichen lang sein!";
        }
        elseif (
    strlen($password) < 8) {
            
    $passworderror "Das Passwort braucht mindestens 8 Zeichen!";
        }
        elseif (
    $password !== $passwordb) {
            
    $passworderror "Die Passwörter unterscheiden sich. Bitte nochmal eingeben.";
        }
        else {
            
    $passworderror "";
        }
                
        
        echo 
    "<span id=\"usererror\"><i>".$usererror."</i></span>";
        echo 
    "<span id=\"passworderror\"><i>".$passworderror."</i></span>"
    Geändert von uvcmd (01-03-2017 um 11:38 Uhr)

  6. #6
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.683

    AW: $_POST Variable bleibt leer nach senden

    Da sollte auf jeden Fall etwas in der Fehlerkonsole (Wo finde ich die Fehlerkonsole?) stehen... responseText ist, die auch schon der Name vermuten lässt, Text - also ein String. Du solltest deine Antwort vom Server besser nicht im HTML-Format schicken, sondern entweder in XML oder JSON. Letzteres kannst du mit JSON.parse() direkt in ein JS-Objekt umwandeln.

  7. #7
    uvcmd ist offline Jungspund
    registriert
    23-02-2017
    Beiträge
    20

    AW: $_POST Variable bleibt leer nach senden

    Ich habe nun eine Lösung gefunden. Die Stelle ich jetzt vor. Falls irgendwelche Anmerkuungen da sind, würde ich sie gerne erfahren:

    Code:
            <script>
                function userRequest(fieldname) {
                    var request = false;
    
                    if (window.XMLHttpRequest) {
                        request = new XMLHttpRequest();
                    }
                    else if (window.ActiveXObject) {
                        try {
                            request = new ActiveXObject('Msxml2.XMLHTTP');
                        }
                        catch (e) {
                            try {
                                request = new ActiveXObject('Microsoft.XMLHTTP');
                            }
                            catch (e) {}
                        }
                    }
                    
                    if (!request) {
                        alert("Kann keine XMLHTTP-Instanz erzeugen");
                        return false;
                    }
                    else {
                        var url = "ajax/register.php";
                        
                        if (fieldname == "passwordb" || fieldname == "password") {
                            var password = document.getElementById('password').value;
                            var passwordb = document.getElementById('passwordb').value;
                            var passwords = [password, passwordb];
                            var fieldvalue = JSON.stringify(passwords);
                        }
                        else {
                            var fieldvalue = document.getElementById(fieldname).value;
                        }
                        
                        request.open('post', url, true);
                        request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                        request.send('fieldname='+fieldname+'&fieldvalue='+fieldvalue);
                        request.onreadystatechange = userInterpret;
                    }
                }
                
                function userInterpret() {
                    switch (this.readyState) {
                        case 4:
                            if (this.status != 200) {
                                alert ("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+this.status);
                            }
                            else {
                                var error = this.responseText;
                                if (error.match(/<span id="usererror"><i>(.*)<\/i><\/span>/) != null) {
                                    var usererror = error.match(/<span id="usererror"><i>(.*)<\/i><\/span>/);
                                    document.getElementById('usererror').innerHTML = usererror[1];
                                }
                                else if (error.match(/<span id="passworderror"><i>(.*)<\/i><\/span>/) != null) {
                                    var passworderror = error.match(/<span id="passworderror"><i>(.*)<\/i><\/span>/);
                                    document.getElementById('passworderror').innerHTML = passworderror[1];
                                }
                                else {
                                }
                            }
                            break;
                        default:
                            break;
                    }
                }
            </script>
    HTML-Code:
    <i><span id="usererror"><?php echo $usererror; ?></span></i><br/>
    <input id="user" type="text" name="user" maxlength="16" placeholder="Benutzername" value="<?php echo $user; ?>" onchange="userRequest('user')" /><br/>
    <i><span id="passworderror"><?php echo $passworderror; ?></span></i><br/>
    <input id="password" type="password" name="password" maxlength="64" placeholder="Passwort" value="<?php echo $password; ?>" onchange="userRequest('password')" />
    <input id="passwordb" type="password" name="passwordb" maxlength="64" placeholder="Passwort bestätigen" value="<?php echo $passwordb; ?>" onchange="userRequest('passwordb')" /><br/>
    PHP-Code:
    <?php
        header
    ('Content-Type: text/html; charset=utf-8');
        
    header('Cache-Control: must-revalidate, pre-check=0, no-store, no-cache, max-age=0, post-check=0');

        
    $fieldname $_POST['fieldname'];
        
    $fieldvalue $_POST['fieldvalue'];

        switch(
    $fieldname) {
            case 
    "user":
                if (
    strlen($fieldvalue) < 3) {
                    
    $usererror "Der Name braucht mindestens 3 Zeichen!";
                }
                elseif (!
    preg_match("/^[a-zA-Z0-9äöüÄÖÜ]+$/"$fieldvalue)) {
                    
    $usererror "Es dürfen nur deutsche Buchstaben und Zahlen im Namen verwendet werden!";
                }
                elseif (
    strlen($fieldvalue) > 16) {
                    
    $usererror "Der Name darf maximal 16 Zeichen enthalten!";
                }
                else {
                    
    $usererror "";
                }
                
    $checkuser $db->prepare("SQL-Code");
                
    $checkuser->execute(array("user" => $fieldvalue));
                while (
    $ucheck $checkuser->fetch()) {
                    if (
    strcasecmp($ucheck['value'], $fieldvalue) == 0) {
                        
    $usererror "Der Name wird bereits verwendet. Wähle einen anderen Namen!";
                    }
                }
                echo 
    "<span id=\"usererror\"><i>".$usererror."</i></span>\n";
                break;
            case 
    'password':
            case 
    'passwordb':
                
    $fieldvalue json_decode(stripslashes($_POST['fieldvalue']));
                if (
    strlen($fieldvalue[0]) > 64) {
                    
    $passworderror "Das Passwort darf maximal 64 Zeichen lang sein!";
                }
                elseif (
    strlen($fieldvalue[0]) < 8) {
                    
    $passworderror "Das Passwort braucht mindestens 8 Zeichen!";
                }
                elseif (
    $fieldvalue[0] !== $fieldvalue[1]) {
                    
    $passworderror "Die Passwörter unterscheiden sich. Bitte nochmal eingeben.";
                }
                else {
                    
    $passworderror "";
                    }
                echo 
    "<span id=\"passworderror\"><i>".$passworderror."</i></span>\n";
        }
    ?>

  8. #8
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.683

    AW: $_POST Variable bleibt leer nach senden

    Warum machst du die Überprüfungen auf dem Passwort überhaupt auf dem Server und nicht lokal? Das ist sinnvoller, sicherer und verlässlicher. Und bis auf das Prüfen, ob der Name schon vergeben wurde, kannst du die Überprüfungen auf den Benutzernamen auch lokal machen. Entlastet deinen Server und du könntest gleich beim oninput prüfen...

    Außerdem funktioniert dein Code nicht, wenn das Passwort oder der Benutzername ein "&" enthält... JSON.stringify() != encodeURIComponent()

  9. #9
    uvcmd ist offline Jungspund
    registriert
    23-02-2017
    Beiträge
    20

    AW: $_POST Variable bleibt leer nach senden

    Danke für die Anmerkung. Ich habe nun, bis auf die Datenbankabfrage, alles Clientseitig eingerichtet.

    Ich habe allerdings einen Bug. Sobald ich sinnlos die E-Mail Felder mit vielen Zeichen befülle (z.B. "sdfasdfasdfasdfasdfasdfasdfasdfa"), hängt sich die Website auf.
    Eine Idee, warum das so ist? Liegt das am Match?

    Code:
            <script>
                function userRequest(fieldname, step) {
                    switch (fieldname) {
                        case "user":
                            var fieldvalue = document.getElementById(fieldname).value;
                            var usererror = "";
                            if (fieldvalue.length < 3) {
                                usererror = "Der Name braucht mindestens 3 Zeichen!";
                            }
                            else if (fieldvalue.length > 16) {
                                usererror = "Der Name darf maximal 16 Zeichen enthalten!";
                            }
                            else if (!fieldvalue.match(/^[a-zA-Z0-9äöüÄÖÜ]+$/)) {
                                usererror = "Es dürfen nur deutsche Buchstaben und Zahlen im Namen verwendet werden!";
                            }
                            else {
                                usererror = "";
                            }
                            document.getElementById('usererror').innerHTML = usererror;
                            document.getElementById('user').className = "user_error";
                            if (usererror == "") {
                                document.getElementById('user').className = "user";
                            }
                            break;
                        case "password":
                        case "passwordb":
                            var fieldvalue1 = document.getElementById('password').value;
                            var fieldvalue2 = document.getElementById('passwordb').value;
                            var passworderror = "";
                            if ((fieldvalue1.length || fieldvalue2.length) > 64) {
                                passworderror = "Das Password darf maximal 64 Zeichen lang sein!";
                            }
                            else if ((fieldvalue1.length || fieldvalue2.length) < 8) {
                                passworderror = "Das Passwort braucht mindestens 8 Zeichen!";
                            }
                            else if (step == 1 && fieldvalue2 == "") {
                                fieldvalue2 = fieldvalue1;
                            }
                            else if (fieldvalue1 != fieldvalue2) {
                                passworderror = "Die Passwörter unterscheiden sich. Bitte nochmal eingeben.";
                            }
                            else {
                                passworderror = "";
                            }
                            document.getElementById('passworderror').innerHTML = passworderror;
                            document.getElementById('password').className = "password_error";
                            document.getElementById('passwordb').className = "passwordb_error";
                            if (passworderror == "") {
                                document.getElementById('password').className = "password";
                                document.getElementById('passwordb').className = "passwordb";
                            }
                            break;
                        case "email":
                        case "emailb":
                            var fieldvalue3 = document.getElementById('email').value;
                            var fieldvalue4 = document.getElementById('emailb').value;
                            var emailerror = "";
                            var validation = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
                            if ((fieldvalue3.match(validation) || fieldvalue4.match(validation)) == null) {
                                emailerror = "Diese E-Mail-Adresse ist ungültig!";
                            }
                            else if ((fieldvalue3.length || fieldvalue4.length) > 32) {
                                emailerror = "Die E-Mail-Adresse darf maximal 32 Zeichen lang sein.";
                            }
                            else if (step == 1 && fieldvalue4 == "") {
                                fieldvalue4 = fieldvalue3;
                            }
                            else if (fieldvalue3 != fieldvalue4) {
                                emailerror = "Die E-Mail-Adressen unterscheiden sich. Bitte nochmal eingaben.";
                            }
                            else {
                                emailerror = "";
                            }
                            document.getElementById('emailerror').innerHTML = emailerror;
                            document.getElementById('email').className = "email_error";
                            document.getElementById('emailb').className = "emailb_error";
                            if (emailerror == "") {
                                document.getElementById('email').className = "email";
                                document.getElementById('emailb').className = "emailb";
                            }
                            break;
                    }
                    
                    var request = false;
                    
                    if (fieldname == "user" || fieldname == "email") {
                       if (fieldname == "email") {
                           fieldvalue = fieldvalue3;
                       }
                       if (window.XMLHttpRequest) {
                            request = new XMLHttpRequest();
                        }
                        else if (window.ActiveXObject) {
                            try {
                                request = new ActiveXObject('Msxml2.XMLHTTP');
                            }
                            catch (e) {
                                try {
                                    request = new ActiveXObject('Microsoft.XMLHTTP');
                                }
                                catch (e) {}
                            }
                        }
                        if (!request) {
                            alert("Kann keine XMLHTTP-Instanz erzeugen");
                            return false;
                        }
                        else {
                            var url = "ajax/register.php";
                            request.open('post', url, true);
                            request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                            request.send('fieldname='+fieldname+'&fieldvalue='+fieldvalue);
                            request.onreadystatechange = userInterpret;
                        }
                    }
                }
                
                function userInterpret() {
                    switch (this.readyState) {
                        case 4:
                            if (this.status != 200) {
                                alert ("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+this.status);
                            }
                            else {
                                var error = this.responseText;
                                if (error.match(/<span id="usererror"><i>(.*)<\/i><\/span>/) != null) {
                                    var usererror = error.match(/<span id="usererror"><i>(.*)<\/i><\/span>/);
                                    if (usererror[1] != "") {
                                        document.getElementById('usererror').innerHTML = usererror[1];
                                        document.getElementById('user').className = "user_error";
                                    }
                                }
                                else if (error.match(/<span id="emailerror"><i>(.*)<\/i><\/span>/) != null) {
                                    var emailerror = error.match(/<span id="emailerror"><i>(.*)<\/i><\/span>/);
                                    if (emailerror[1] != "") {
                                        document.getElementById('emailerror').innerHTML = emailerror[1];
                                        document.getElementById('email').className = "email_error";
                                        document.getElementById('emailb').className = "emailb_error";
                                    }
                                }
                                else {
                                }
                            }
                            break;
                        default:
                            break;
                    }
                }
            </script>
    Geändert von uvcmd (08-03-2017 um 13:55 Uhr)

  10. #10
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.683

    AW: $_POST Variable bleibt leer nach senden

    Zitat Zitat von uvcmd Beitrag anzeigen
    Die E-Mail-Adresse darf maximal 32 Zeichen lang sein.
    Warum? Ich habe einige Mail-Adressen, die länger sind.

    Aber wenn du schon auf die Länge prüfst, warum machst du das nicht vor dem match?
    Außerdem ist deine RegExp suboptimal (Performance) und falsch (inhaltlich). Z.B. Hans-joachim.Meier@post.web-entry.berlin wird nicht als gütige E-Mail-Adresse erkannt. Warum verwendest du nicht <input type="email">? Dann macht der Browser die Prüfung für dich.

  11. #11
    uvcmd ist offline Jungspund
    registriert
    23-02-2017
    Beiträge
    20

    AW: $_POST Variable bleibt leer nach senden

    Danke für die Tipps.

    Ich habe die Länge auf 64 B erweitert. Welcher Wert wäre für die E-Mail am besten geeignet?
    Ich mache die überprüfung durch den Browser nicht, weil der Browser das erstmal unterstützen muss, aber das größere Problem ist wohl, dass es mit meinem Websitedesign keinen einklang findet.
    Ich denke, die Lösung wäre für mich in dem Fall, dass keine RegExp zur Prüfung nutze, sondern die Adresse mit FILTER_VALIDATE_EMAIL serverseitig Prüfe. Zumal diese ja sowieso zur Datenbankprüfung verschickt wird.

    Falls du keine weiteren bzw. besseren Alternativen vorschlägst, würde ich das so machen.

  12. #12
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.637

    AW: $_POST Variable bleibt leer nach senden

    Das deutsche Javascript Forum http://forum.jswelt.de http://forum.jswelt.de/images/logoJsWeltForumV4_32x22.png
    Sorry wenn ich manchmal ohne Hallo und nur klein schreibe! Dann bin ich nicht unfreundlich sondern mit nervigem kleinem Touch Tablet zugange

  13. #13
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.683

    AW: $_POST Variable bleibt leer nach senden

    Zitat Zitat von uvcmd Beitrag anzeigen
    Ich habe die Länge auf 64 B erweitert. Welcher Wert wäre für die E-Mail am besten geeignet?
    Warum überhaupt beschränken? Rein theoretisch kann eine Email-Adresse beliebig lang sein.

    Zitat Zitat von uvcmd Beitrag anzeigen
    weil der Browser das erstmal unterstützen muss
    Dafür gibt es Polyfills...

  14. #14
    uvcmd ist offline Jungspund
    registriert
    23-02-2017
    Beiträge
    20

    AW: $_POST Variable bleibt leer nach senden

    Weil man doch mit einem bestimmten Wert rechnen will. Aus verschiedensten Gründen. Sogar Google gibt einen Maximalwert von 30 vor.

  15. #15
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.683

    AW: $_POST Variable bleibt leer nach senden

    Zitat Zitat von uvcmd Beitrag anzeigen
    Sogar Google gibt einen Maximalwert von 30 vor.
    Das kann ich mir nicht vorstellen. Oder meinst du bei gMail? Da ist es klar, da das ja eigentlich ein Benutzername ist. Da ist die Beschränkung aber auch nur auf dem Teil vor dem @.

    Zitat Zitat von uvcmd Beitrag anzeigen
    Weil man doch mit einem bestimmten Wert rechnen will.
    Dann nimm' einen Wert, der die komplett zu groß erscheint. Du kennst sicher das berümte Zitat von Bill Gates... oder das Problem mit IPv4.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 14-05-2010, 18:34
  2. Variable leer?!?!
    Von yggdrasil84 im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 07-02-2009, 19:08
  3. $_POST Variable analysieren
    Von petz_e im Forum Serverseitige Programmierung
    Antworten: 5
    Letzter Beitrag: 17-03-2008, 16:26
  4. Antworten: 3
    Letzter Beitrag: 30-03-2007, 15:15
  5. per js $_POST Variable im Browser leeren
    Von sono im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 20-01-2006, 23:08

Lesezeichen

Berechtigungen

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