2016-12-30 4 views
0

Fall sein:htmlspecialchars() erwartet 1 Parameter-String

input_name = Abu 
input_address = Earth 
hobbies[0] = read 
hobbies[1] = sport 
hobbies[2] = eat 

Erwartetes Ergebnis: Abu-Erde-Lese-Sport-eat

aber Ergebnis:

Warning : htmlspecialchars() erwartet Parameter 1 als String, Array in /opt/lampp/htdocs/tester/listen.php in Zeile 6

Abu-Earth-

Hinweis: nicht initialisierte Zeichenfolge-Offset: 0 in /opt/lampp/htdocs/tester/listen.php on line 16

Hinweis: nicht initialisierte Zeichenfolge-Offset: 1 in /opt /lampp/htdocs/tester/listen.php auf der Leitung 17

Hinweis: nicht initialisierte Zeichenfolge offset: 2 in /opt/lampp/htdocs/tester/listen.php auf Leitung 18

Wie behebe ich das? Dieses mein Code

index.php

<script src="https://code.jquery.com/jquery-3.1.1.min.js" charset="utf-8"></script> 
<script src="http://cdn.jsdelivr.net/jquery.validation/1.15.1/jquery.validate.min.js" charset="utf-8"></script> 

<form method="post" id="frm_test" name="frm_test"> 
    <input type="text" name="input_name" value="" required> 
    <input type="text" name="input_address" value="" required> 
    <input type="text" name="hobbies[0]" value=""> 
    <input type="text" name="hobbies[1]" value=""> 
    <input type="text" name="hobbies[2]" value=""> 
    <button type="submit">Submit Data</button> 
</form> 

<script type="text/javascript"> 
    $(function(){ 
    $('#frm_test').validate({ 
      submitHandler: function() { 
     postData("frm_test",""); 
      } 
     } 
     ); 
    }); 

    function postData(frm, id){ 
    $.post("listen.php",$("#"+frm).serialize(),function(r){ 
     console.log(r); 
    }); 
    } 
</script> 

listen.php

<?php 
    function filterText($string) 
    { 
    $conn = mysqli_connect("localhost","root","","dbname"); 
    $filter = mysqli_real_escape_string($conn, stripslashes(strip_tags(htmlspecialchars($string,ENT_QUOTES)))); 
    return $filter; 
    } 

    foreach($_POST as $key=>$value){ 
    ${$key} = filterText($value); 
    } 

    echo $input_name."-"; 
    echo $input_address."-"; 
    echo $hobbies[0]."-"; 
    echo $hobbies[1]."-"; 
    echo $hobbies[2]."-"; 
?> 
+0

beginnen mit 'print_r ($ _ POST)' –

Antwort

1

Ihre hobbies Eingabefeld ist ein Array. Ändern Sie bitte Ihre Iteration für $_POST so dass es Arrays anmutig auf intelligente Weise behandelt:

foreach($_POST as $key => $value){ 
    ${$key} = is_array($value) ? array_map("filterText", $value) : filterText($value); 
} 
+0

dank Geck, funktioniert wie Charme :) –

+0

@AbuAyyub Wenn die Antwort beantwortet Ihre Frage richtig, bitte akzeptieren es, und upvote es, wenn Sie die Privilegien haben, anstatt Chaty Kommentare zu verwenden. – SOFe

+0

wie man array_map einfügt, wenn die Funktion zwei Argumente verwendet, zB setze $ conn außerhalb der Funktion $ conn = mysqli_connect ("localhost", "root", "", "dbname"); Funktion filterText ($ conn, $ string) { $ filter = mysqli_real_escape_string ($ conn, stripeslashes (strip_tags (htmlspecialchars ($ string, ENT_QUOTES)))); Rückgabe $ Filter; } –

Verwandte Themen