尝试检查用户输入的值与存储在数据库中的值;总是返回错误?

时间:2015-03-24 15:18:39

标签: php mysql sql wordpress

我正在为Wordpress网站开发一种注册系统。大部分工作都是使用“Formidable Forms Pro”WP插件完成的。

在系统中,为每个已被“接受”的玩家生成代码。然后播放器会发送一封包含该代码的电子邮件,并且应该在另一个表单的字段中输入。

我会在Formidable支持表单上发布此问题但是......他们对自定义代码没有帮助。

基本上,问题在于,无论在字段中输入什么代码,都会始终返回错误消息,即使代码实际上在数据库中也是如此。我不确定我做错了什么 - 我不确定如何在Wordpress中调试它。我已经检查过我的字段值(暂时存储为全局变量)是正确的,它们是。

无论如何,这是有问题的php函数:

add_filter('frm_validate_field_entry', 'validatePlayerPassCode', 10, 3);
function validatePlayerPassCode($errors, $posted_field, $posted_value)
{
    global $wpdb;
    global $code_entry_field;
    global $code_field;

    if ($posted_field->id == $code_entry_field) {
        $prefix = $wpdb->prefix;

        $actual_codes = $wpdb->get_results(
            $wpdb->prepare(
                "SELECT meta_value FROM %s WHERE field_id = %d",
                $prefix . "frm_item_metas",
                $code_field
            ));

        if (in_array($posted_value, $actual_codes)) {
            return;
        }

        $errors['field'. $posted_field->id] = '<p>Failed to register player, player passcode incorrect.</p>';
    }

    return $errors;
}

总结一下,我的这段代码有什么不对,导致正确的代码仍然被误读?

谢谢!

1 个答案:

答案 0 :(得分:1)

你的阵列不是你想象的那样:

$actual_codes = $wpdb->get_results(...);

会得到你(来自WordPress codex):

  

可以从数据库中提取通用的多行结果   get_results。

因此,您的$actual_codes数组是一个多维数组,其中每一行都包含一个包含数据库结果的数组:您有一个数组数组而不是数组数组。在您的情况下,这些数组只包含一个元素,但该元素不是$actual_codes的直接值,因此总是会失败:

if (in_array($posted_value, $actual_codes)) {

您应该从数据库中选择具有该代码的那一行,并查看您的查询是返回0行还是1行,而不是选择数据库中的所有代码并尝试将代码与结果匹配。