0

我昨天在http://forge.prestashop.com/browse/PSCFI-6967报告了 prestashop 社区的一个错误。有人建议我解决它吗?

4

1 回答 1

0

好吧,既然您还没有发布次要版本,我已经采用了第一个和最后一个次要版本并对它们进行了区分(准确地说是 Customer.php 类)。

这是1.4.0.1

static public function customerExists($email, $return_id = false)
{
    if (!Validate::isEmail($email))
        die (Tools::displayError());

    $result = Db::getInstance()->getRow('
    SELECT `id_customer`
    FROM `'._DB_PREFIX_.'customer`
    WHERE `email` = \''.pSQL($email).'\'');

    if ($return_id)
        return intval($result['id_customer']);
    else
        return isset($result['id_customer']);
}

这是1.4.8.3

public static function customerExists($email, $return_id = false, $ignoreGuest = true)
{
    if (!Validate::isEmail($email))
        die (Tools::displayError());

    $result = Db::getInstance()->getRow('
    SELECT `id_customer`
    FROM `'._DB_PREFIX_.'customer`
    WHERE `email` = \''.pSQL($email).'\''
    .($ignoreGuest ? 'AND `is_guest` = 0' : ''));

    if ($return_id)
        return (int)($result['id_customer']);
    else
        return isset($result['id_customer']);
}

问题是,您使用的东西介于这两者之间并且更接近于较低的那个。

如您所见,后者有另一个可选参数 $ignoreGuest,默认为 true。因此,每个验证都被绕过。

您可以执行以下两种操作之一:

  • 如果您的任何组件与 1.5 不兼容,请升级到最新版本的 1.4 (http://code.google.com/p/prestashop/downloads/detail?name=prestashop_1.4.8.3.zip&can=2&q=)。如果是 - 一直到最新。
  • 另一方面,如果您只需要一个快速而肮脏的修复:将 Customer 类中的函数更改为此答案中的第二个。
于 2013-01-16T22:55:40.730 回答