Php 尝试将用户输入的值与存储在数据库中的值进行核对;总是返回错误?

Php 尝试将用户输入的值与存储在数据库中的值进行核对;总是返回错误?,php,mysql,sql,wordpress,Php,Mysql,Sql,Wordpress,我正在为Wordpress网站设计一种注册系统。大部分工作是通过“强大的Forms Pro”WP插件完成的 在系统中,为每个已被“接受”的玩家生成一个代码。然后,玩家将收到一封包含代码的电子邮件,并希望在另一个表单的字段中输入该代码 我会把这个问题贴在强大的支持表格上,但是。。。它们对自定义代码没有帮助 基本上,问题是无论在字段中输入什么代码,错误消息总是会返回,即使代码实际上在数据库中也是如此。我不确定我做错了什么,也不确定如何在Wordpress中调试。我已经检查了我的字段值(暂时存储为全局

我正在为Wordpress网站设计一种注册系统。大部分工作是通过“强大的Forms Pro”WP插件完成的

在系统中,为每个已被“接受”的玩家生成一个代码。然后,玩家将收到一封包含代码的电子邮件,并希望在另一个表单的字段中输入该代码

我会把这个问题贴在强大的支持表格上,但是。。。它们对自定义代码没有帮助

基本上,问题是无论在字段中输入什么代码,错误消息总是会返回,即使代码实际上在数据库中也是如此。我不确定我做错了什么,也不确定如何在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;
}
add_filter('frm_validate_field_entry','validatePlayerPassCode',10,3);
函数validatePlayerPassCode($errors、$posted\u field、$posted\u value)
{
全球$wpdb;
全局$代码\输入\字段;
全局$code_字段;
如果($posted\u field->id==$code\u entry\u field){
$prefix=$wpdb->prefix;
$actual_codes=$wpdb->获取_结果(
$wpdb->prepare(
“从%s中选择元值,其中字段\u id=%d”,
$prefix.“frm_项目_metas”,
$code_字段
));
if(在数组中($posted_值,$actual_代码)){
返回;
}
$errors['field'.$posted\u field->id]='注册玩家失败,玩家密码不正确。

; } 返回$errors; }
总之,我的代码中有什么错误导致正确的代码仍然被解读为错误的


谢谢

您的阵列不是您所认为的:

$actual_codes = $wpdb->get_results(...);
将(从以下位置)为您提供:

通用的多行结果可以通过 得到结果

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

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

与其选择数据库中的所有代码并尝试将代码与结果匹配,不如只从包含该代码的数据库中选择该行,然后查看查询是否返回0或1行。

Ohhh好的,这很有意义。我唯一感到困惑的是建议的解决方案,可能是因为我睡眠不足,但是,你是说我应该更改SQL查询,以便查看它是否返回一行(如果不是合法代码,则返回零)?@fryedrycestyle是的,我会这样做。可能它只是像
。。。其中字段\u id=%d和meta\u value=%s
。好的,请确认。谢谢你的帮助。