[WordPress] に対して 1 つのデータベースに格納されている値を入力したユーザーをチェックしよう常にエラーが返されますか。

スポンサーリンク

質問

私はワードプレスのサイトの登録制度の並べ替えに取り組んでいます。仕事の大部分は「素晴らしいフォーム プロ」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;
}

を合計する何が間違ってこの 修正 コードをまだが発生する私のコードでする読み取りとして間違って?

ありがとう !

答え

アレイがないものだと思う:

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

ワードプレスコデックス) からなる:

ジェネリック get_results 非を使用してデータベースから複数行の結果をプルすることができます

$actual_codes

配列は多次元配列行ごと格納、データベースからの結果の配列: 配列の配列と値の配列ではなくがあります。あなたのケースでこれらの配列は 1 つだけの要素を含むが、その要素は、

$actual_codes

の値を直接ので、これは常に失敗します:

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

データベース内のすべてのコードを選択結果を使用してコードに一致するしようとしているのではなく必要がありますを選択してその行にだけそのコードを含むデータベースから 0 または 1 行が返されるかどうかを参照してください

http://stackoverflow.com/questions/29236394/trying-to-check-a-user-entered-value-against-one-stored-in-database-always-retu

スポンサーリンク

Leave a Reply