You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress表单验证后重定向遇解析错误求助

问题分析与解决方案

首先你代码里的语法错误是触发parser error的直接原因:

  • 在错误提示的那行($ajax_handler->add_error_message( 'Incorrect Password! Please try again...),你遗漏了闭合的单引号,正确写法应为:
    $ajax_handler->add_error_message( 'Incorrect Password! Please try again...' );
    

除了语法错误,代码还有几个关键问题需要修正:

1. 数据库连接参数顺序错误

mysqli构造函数的参数顺序是「主机, 用户名, 密码, 数据库名」,你写反了用户名和数据库名:

// 错误写法
$conn = new mysqli("localhost","mydatabase","myuser","mypass");
// 正确写法
$conn = new mysqli("localhost","myuser","mypass","mydatabase");

2. 存在SQL注入风险

直接把用户输入的$email拼进SQL语句会引发严重的SQL注入漏洞,必须用预处理语句替代:

// 替换原查询代码
$stmt = $conn->prepare("SELECT * FROM tablename WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
$stmt->close();

3. 密码验证逻辑不安全

直接明文对比密码极度危险,WordPress内置了密码哈希验证机制,应该用wp_check_password()函数:

// 假设用户表密码字段为哈希存储
if(wp_check_password($password, $row['password'])){
    // 验证通过的逻辑
}

4. AJAX场景下重定向无效

Elementor Pro表单采用AJAX提交,直接用header('Location: ...')不会触发浏览器跳转,需通过ajax_handler返回跳转指令:

// 替换原header跳转代码
$ajax_handler->add_response_data( 'redirect_url', 'https://www.mywebsite.com' );
$ajax_handler->success();
exit;

修正后的完整代码

add_action( 'elementor_pro/forms/new_record', function( $record, $ajax_handler ) {
    $form_name = $record->get_form_settings( 'form_name' );

    if($form_name=='userloginform'){
        // 修正数据库连接参数顺序
        $conn = new mysqli("localhost","myuser","mypass","mydatabase");
        // 检查连接错误
        if ($conn->connect_error) {
            $ajax_handler->add_error_message( '数据库连接失败,请稍后重试' );
            return;
        }

        $raw_fields = $record->get( 'fields' );
        $fields = [];
        foreach ( $raw_fields as $id => $field ){
            $fields[ $id ] = $field['value'];
        }
        $email=trim($fields['email']);
        $password=trim($fields['pass']);

        // 使用预处理语句防止SQL注入
        $stmt = $conn->prepare("SELECT * FROM tablename WHERE email = ?");
        $stmt->bind_param("s", $email);
        $stmt->execute();
        $result = $stmt->get_result();
        $row = $result->fetch_assoc();
        $stmt->close();
        $conn->close();

        if(!empty($row)){
            // 使用WordPress内置函数验证密码(假设密码为哈希存储)
            if(wp_check_password($password, $row['password'])){
                // AJAX场景下的正确重定向方式
                $ajax_handler->add_response_data( 'redirect_url', 'https://www.mywebsite.com' );
                $ajax_handler->success();
                exit;
            }else{
                $ajax_handler->add_error_message( '密码错误!请重试...' );
            }
        }else{
            $ajax_handler->add_error_message( '未找到该邮箱,请输入有效的邮箱地址...' );
        }
    }
} );

注意:修改代码中的数据库信息、表名,确保用户表的密码字段是通过WordPress的wp_hash_password()哈希存储的,否则wp_check_password()无法正常验证。

内容的提问来源于stack exchange,提问作者Muhammad Irfan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 23:25:19