案例:
input_name = Abu
input_address = Earth
hobbies[0] = read
hobbies[1] = sport
hobbies[2] = eat
预期成果: 的阿布 - 地球 - 读运动吃
但结果:
警告:htmlspecialchars()要求参数1为字符串,数组 在第6行的/opt/lampp/htdocs/tester/listen.php中给出
阿布地球 -
注意:未初始化的字符串偏移量:0英寸 第16行的/opt/lampp/htdocs/tester/listen.php
注意:未初始化的字符串偏移量:1英寸 第17行的/opt/lampp/htdocs/tester/listen.php
注意:未初始化的字符串偏移量:2英寸 第18行/opt/lampp/htdocs/tester/listen.php
如何解决这个问题? 这是我的代码
的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 :(得分:1)
您的hobbies
输入字段是一个数组。修改$_POST
的迭代,以便它优雅地智能地处理数组:
foreach($_POST as $key => $value){
${$key} = is_array($value) ? array_map("filterText", $value) : filterText($value);
}