zec*_*ude 1 php arrays session escaping
我在一个数组中有一系列会话变量.当我在我的一个字符串变量中使用引号时,我尝试使用addslashes,因此我最终可以将其插入到数据库中,但addslashes()函数不起作用.这是一个例子.
在评论字段中,我写道:
这是"评论"
我意识到这是一个问题,所以我在将其输入数据库之前添加了一个函数,该数据库运行一系列Session变量,包括comments变量.
$strip_fields = array($_SESSION['comments'],$_SESSION['employee_id'],$_SESSION['approved_by'],$_SESSION['delivery_email'],$_SESSION['full_name'],$_SESSION['first_name'],$_SESSION['last_name']);
foreach($strip_fields as $key => $value) {
$key = addslashes($key);
}
Run Code Online (Sandbox Code Playgroud)
运行此函数后,我尝试回显注释变量$ _SESSION ['comments']
这是"评论"
所以我可以看到,addslashes函数以某种方式不能像我使用它那样工作.为什么addslashes功能不能像我使用它那样工作?
这是我的解决方案 (我从两个建议中都使用了一点)
$strip_fields = array(
'employee_id', 'approved_by', 'delivery_email', 'full_name',
'first_name', 'last_name', 'title', 'title_2', 'dept_div',
'dept_div_2', 'email', 'comments', 'special_instructions'
);
foreach($strip_fields as $key) {
$_SESSION[$key] = $conn->real_escape_string($_SESSION[$key]);
}
Run Code Online (Sandbox Code Playgroud)
你的问题暗示你实际上想要修改$_SESSION变量的内容,但这似乎不是一个好主意,因为你只会在调用脚本时一次又一次地添加斜杠(只是一个没有看到所有的观察结果)你的代码).
此外,您不应该使用addslashes转义数据库,因为每个数据库(或数据库抽象层)都有自己的数据转义方式(例如mysql_real_escape_string,PDO预处理语句).
此外,$_SESSION数据库是持久化数据的不同方式,混合它们可能是一个糟糕的设计选择.
编辑后编辑......
如果你想将所有这些变量放入数据库中,并且在它们之前$_SESSION(如前所述可能不是最好的主意),并且你使用的是mysql php模块,那么你可以做类似的事情:
$db_names=array(
"comments",
"employee_id",
"approved_by",
"full_name",
"first_name",
"last_name"
);
$clean=array();
foreach($db_names as $name)
$clean[$name]=mysql_real_escape_string($_SESSION[$db_name]);
mysql_query("
INSERT INTO comments_table
(
comments,
employee_id,
approved_by,
full_name,
first_name,
last_name
)
VALUES
(
'{$clean["comments"]}',
'{$clean["employee_id"]}',
'{$clean["approved_by"]}',
'{$clean["full_name"]}',
'{$clean["first_name"]}',
'{$clean["last_name"]}'
)
");
Run Code Online (Sandbox Code Playgroud)
但是,最好不要使用mysql模块,而是使用mysqli或PDO.每个都有不同的(并且更好,由于多种原因)转义字符串的方式.