Ankündigung

Einklappen
Keine Ankündigung bisher.

Eingabewert wird immer abgeschnitten nach &

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

  • Eingabewert wird immer abgeschnitten nach &

    Ich habe ein Formular welches Eingaben der Nutzer speichert ohne die Seite neu zu laden.

    Funktioniert alles tadellos, wenn jedoch bei firstname ein Wert mit einem & Zeichen eingeben wird (zB Jens&Mareike), wird nur Jens abgespeichert... Jemand eine Idee?

    Daten kommen von einem Formular, werden hier verabreitet:

    PHP-Code:
    $conn = new mysqli($servername$username$password$dbname);
    // Check connection
    if ($conn->connect_error) {
    die(
    "Connection failed: " $conn->connect_error);
    }
    $p1link $_POST['firstname1'];
    $userid $_POST['lastname1'];

    if (
    preg_match("/starlife/i"$p1link)) {
    $sql "UPDATE wpny_usermeta SET meta_value = '$p1link' WHERE user_id = '$userid' AND meta_key = 'starlink';";
    } else {
    echo 
    "Ihre Eingabe enthält keinen gültigen Link des Anbieters<br />";
    }

    if (
    $conn->query($sql) === TRUE) {
    echo 
    'Erfolgreich gespeichert<br /><a href="/dashboard/"><img src="/images/schritt6.png" border="0"></a>';
    } else {
    echo 
    "Speichern nicht erfolgreich";
    }

    $conn->close(); 
    PHP-Code:
    function ajax_post(){
        
    // Create our XMLHttpRequest object
        
    var hr = new XMLHttpRequest();
        
    // Create some variables we need to send to our PHP file
        
    var url "/forms/script1.php";
        var 
    fn document.getElementById("first_name1").value;
        var 
    ln document.getElementById("last_name1").value;
        var 
    vars "firstname1="+fn+"&lastname1="+ln;
        
    hr.open("POST"urltrue);
        
    // Set content type header information for sending url encoded variables in the request
        
    hr.setRequestHeader("Content-type""application/x-www-form-urlencoded");
        
    // Access the onreadystatechange event for the XMLHttpRequest object
        
    hr.onreadystatechange = function() {
            if(
    hr.readyState == && hr.status == 200) {
                var 
    return_data hr.responseText;
                
    document.getElementById("status1").innerHTML return_data;
            }
        }
        
    // Send the data to PHP now... and wait for response to update the status div
        
    hr.send(vars); // Actually execute the request
        
    document.getElementById("status1").innerHTML "arbeite...";



  • #2
    Du beachtest den Kontextwechsel nicht.

    Stell dir mal vor was hier dann rauskommt:
    PHP-Code:
     var vars "firstname1="+fn+"&lastname1="+ln
    Code:
    firstname1=Jens&Mareike&lastname1=wieauchimmer
    wenn jedoch bei firstname ein Wert mit einem & Zeichen eingeben wird (zB Jens&Mareike), wird nur Jens abgespeichert.
    Und jetzt denk ich in das System rein. & ist ein besonderes Zeichen. Alles klar? Nach Jens ist es halt einfach aus.
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Ja so erscheint es logisch, wobei ich nicht verstehe, wieso es dann nach dem zweiten & wieder weitergeht...

      Wenn ich es zu Ende denke, käme nur in Frage:

      entfernen:

      PHP-Code:
      var vars "firstname1="+fn+"&lastname1="+ln
      das:

      PHP-Code:
      hr.send(vars); 
      ersetzen durch:

      PHP-Code:
      hr.send(fn);
      hr.send(ln); 
      auch wenn das sicher falsch gedacht ist...

      Kommentar


      • #4
        PHP-Code:
        var vars "firstname1="+fn+"&lastname1="+ln
        https://stackoverflow.com/a/332888

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          PHP-Code:
          function ajax_post(){
              
          // Create our XMLHttpRequest object
              
          var hr = new XMLHttpRequest();
              
          // Create some variables we need to send to our PHP file
              
          var url "/forms/script1.php";
              var 
          fn document.getElementById("first_name1").value;
              var 
          encodedUrl encodeURIComponent(fn);
                  
          console.log(encodedUrl);
              var 
          ln document.getElementById("last_name1").value;
              var 
          vars "firstname1="+encodedUrl+"&lastname1="+ln;
              
          hr.open("POST"urltrue);
              
          // Set content type header information for sending url encoded variables in the request
              
          hr.setRequestHeader("Content-type""application/x-www-form-urlencoded");
              
          // Access the onreadystatechange event for the XMLHttpRequest object
              
          hr.onreadystatechange = function() {
                  if(
          hr.readyState == && hr.status == 200) {
                      var 
          return_data hr.responseText;
                      
          document.getElementById("status1").innerHTML return_data;
                  }
              }
              
          // Send the data to PHP now... and wait for response to update the status div
              
          hr.send(vars); // Actually execute the request
              
          document.getElementById("status1").innerHTML "arbeite...";

          DANKE!

          Kommentar


          • #6
            oder:
            PHP-Code:
            var vars "firstname1="+encodeURIComponent(fn)+"&lastname1="+encodeURIComponent(ln); 
            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Ja, es sollten schon alle Parameter behandelt werden, sonst drohen die gleichen Probleme beim Nachnamen. PHP hat ja dafür die schöne Funktion http_build_query().
              Habe dafür hier was ähnliches für natives Javascript gefunden:
              PHP-Code:
              var params = {
                  
              firstname1document.getElementById("first_name1").value,
                  
              lastname1document.getElementById("last_name1").value
              };

              var 
              esc encodeURIComponent;
              var 
              query Object.keys(params)
                  .
              map(=> esc(k) + '=' esc(params[k]))
                  .
              join('&'); 
              ungetestet!
              PHP-Klassen auf jspit.de und github

              Kommentar


              • #8
                Warum einfach, wenns auch umständlich geht.
                Code:
                $.post('/forms/script1.php', $('#myForm').serialize());

                Kommentar


                • #9
                  Und hat im PHP Subforum eigenltich nichts verloren.

                  MOD: Verschoben von PHP-Einsteiger
                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar

                  Lädt...
                  X