为什么在下面的php代码修剪中,htmlspecialchars和stripslashes不起作用?

为什么在下面的php代码修剪中,htmlspecialchars和stripslashes不起作用?,php,arrays,Php,Arrays,我有一个表单,其中包含两个字段用户名和密码。我想将用户输入的值存储在名为stack的数组中 下面的代码将值存储在堆栈数组中,并显示带有我输入的精确值的数组。即使我的字段中有斜杠或任何html、javascript,它也会将其存储到数组中 我想知道我的错误在哪里,因为函数check()执行不正确 <?php $hostname = "localhost"; $username = "root"; $password = ""; $db = "test"; $stack = array();

我有一个表单,其中包含两个字段用户名和密码。我想将用户输入的值存储在名为stack的数组中

下面的代码将值存储在堆栈数组中,并显示带有我输入的精确值的数组。即使我的字段中有斜杠或任何html、javascript,它也会将其存储到数组中

我想知道我的错误在哪里,因为函数check()执行不正确

<?php
$hostname = "localhost";
$username = "root";
$password = "";
$db = "test";
$stack = array();
$connect = mysqli_connect($hostname,$username,$password,$db);
if(!$connect){
    die("Couldn't connect to the database");
    exit();
}
function check($data){
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
if(isset($_POST['login'])){
    foreach($_POST as $value){
        if($value == $_POST['login']){
        break;
        }
        else{
            check($value);
            array_push($GLOBALS['stack'],$value);
        }
    }
    print_r($stack);
}

?>

请检查注释行

<?php
$hostname = "localhost";
$username = "root";
$password = "";
$db = "test";
$stack = array();
$connect = mysqli_connect($hostname,$username,$password,$db);
if(!$connect){
    die("Couldn't connect to the database");
    exit();
}
function check($data){
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
if(isset($_POST['login'])){
    foreach($_POST as $value){
        if($value == $_POST['login']){
        break;
        }
        else{
            $value = check($value); //returned value is not captured
            array_push($GLOBALS['stack'],$value);
        }
    }
    print_r($stack);
}

?>
您有两个选择

  • 将check函数的返回值保存在变量中

    $value=支票($value)

  • 将功能检查($data)更改为功能检查(&$data)


我是否可以知道如何使用$value捕获返回值我已经更改了行。请比较我添加评论的那一行。它不起作用。在放入数组之前,它再次用斜杠和alltry echo$value向我显示值。无论我在字段中写了什么,它都会向我回显用户输入,包括所有空格和斜杠