【问题标题】:Stripslashes not workingStripslashes 不工作
【发布时间】: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


【解决方案1】:

如果您使用的是 mysql 扩展(您不应该这样做),我会使用 mysql_real_escape_string 而不是添加斜杠。或者 mysqli_real_escape_string 如果你使用 mysqli 扩展。或者使用准备好的语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多