【发布时间】:2013-03-23 22:09:09
【问题描述】:
我在我的 2 步表单之一中使用此代码,这里我在步骤 2.php 验证表单输入并将其保存在会话中,然后在步骤 3.php 页面中我从会话中获取表单输入.我也将它们分配给 $formData 数组,因为我需要在最后阶段再次重新运行验证代码。
$name = $formData["name"] = $string->formatInput($session->getSession("mechanic_buy_name"), 1);
$garage_name = $formData["garage_name"] = $string->formatInput($session->getSession("mechanic_buy_garage_name"), 1, "None");
$address = $formData["address"] = $string->formatInput($session->getSession("mechanic_buy_address"), 1);
这里 $string->formatInput("STRING GOES HERE" , 1) 是我的包装函数,它添加了 addlashes 函数。
假设我在车库名称中输入了 ASWT 的技术
我使用这个 sql 查询将记录保存到数据库中
$sql = "INSERT INTO ". TABLE_MECHANICS ."";
$sql .= "(name, garage_name, address, town, county, postcode, mobile, landline, fax, email, website, services_other, start_date, duration, expiry_date, datecreated, datemodified) VALUES";
$sql .= "('$name', '$garage_name', '$address', '$town', '$county', '$postcode', '$mobile', '$landline', '$fax', '$email', '$website', '$services_other', '$start_date', '$duration', '$expiry_date', NOW(), NOW())";
$query = $mysql->query($sql);
但是当我通过 phpmyadmin 查看数据库时,我在引号前看不到任何转义字符
这就是,garage_name 在 phpmyadmin 中显示的内容 ASWT 的
而在应用了addlashes ($string->formatInput(...)) 之后它应该类似于ASWT\'s\'。
请告诉我我错在哪里以及为什么不应用 addlashes 功能。
这个语法正确吗?
$name = $formData["name"] = $string->formatInput($session->getSession("mechanic_buy_name"), 1);
当我回显它时,$name 没有显示转义字符。
非常感谢任何帮助。
【问题讨论】:
-
stripslashes()是任何 PHP 数据库相关问题的错误答案。它不适合为 mySQL 转义数据。如果您将其用于此目的,您的系统中将存在安全漏洞。 -
addslashes不适用于数据库字符串输入。阅读数据库转义(或准备好的语句,如果你有点野心)。特别是数据库转义仅适用于 SQL 命令上下文。斜线不应该保留在数据库中。
标签: php stripslashes