使用PHP的自定义HTML表单-带有AJAX/用户名验证的帮助

时间:2017-03-23 作者:H.Norman

我目前在我的页面上创建了一个工作注册表。这是一个HTML表单,我编写了PHP,让它在我们的WP\\U用户表中创建用户,并通过电子邮件向我们发送表单中的信息。PHP在函数中。php文件,它的工作没有问题,但当前必须提交,如果创建的用户名已经存在,它将在空白索引页上显示错误消息,然后重定向回表单。我们希望它在表单上验证并显示用户名是否可用。我认为这必须用AJAX来完成,但我不确定。下面是函数中的PHP代码。php:

    if (username_exists($user)){

echo \'Username already exists. Please wait while we redirect you back to the form\';
    die("<meta http-equiv=\\"refresh\\" content=\\"5;url=".$_SERVER[\'HTTP_REFERER\']."\\"/>");


}

if ( !username_exists( $user )  && !email_exists( $email ) ) {
   $user_id = wp_create_user( $user, $pass, $email );
   if( !is_wp_error($user_id) ) {
       //user has been created
       $user = new WP_User( $user_id );
       $user->set_role( \'subscriber\' );

       wp_mail( $to, $email_subject, $message, $headers);


       //Redirect
       wp_redirect( \'http://www.dev.smithhonig.com/thank-you\' );
       exit;
   } else {
       //$user_id is a WP_Error object. Manage the error
   }
}
同样,这非常有效,但我们希望在表单上单击用户名字段时尝试一个选项进行验证。我不太熟悉AJAX,也不太熟悉在哪里为WP实现它,所以我想在这里使用最佳实践。非常感谢。

更新时间:

下面是我正在使用的AJAX调用的一些代码。

jQuery(document).ready(function(){
jQuery(\'#username\').on(\'change\', function(){
    let user = jQuery(this).val();
    jQuery.ajax({
        type: \'POST\',
        url: \'<WP_AJAX_URL_HERE>\',
        data: {action: \'verify_username\', username: user},
        success: function(data){
            console.log(data);
            // Write code to show the message to user here
        },
        error: function(err){
            console.log(err);
        }
    });
});
});
以及函数文件中的其他PHP:

add_action( \'wp_ajax_verify_username\', \'check_username\' );
add_action( \'wp_ajax_nopriv_verify_username\', \'check_username\' );
function check_username(){
$username = $_POST[\'username\'];
if( username_exists( $username ) ) {
    echo $username . \' already taken.\';
}else {
    echo \'Hurray \' . $username . \' is available.\';
}

exit;
}

1 个回复
最合适的回答,由SO网友:scott 整理而成

这就是我让AJAX为我工作的原因

我消化了这篇教程。https://codex.wordpress.org/AJAX_in_Plugins

由于jQuery依赖于jQuery,我创建了一个外部JS文件并在jQuery之后排队。

我创建了一个PHP函数,通过响应发送的内容来响应AJAX调用。

当这起作用时,我让PHP函数发送我需要的数据。

我想你的东西应该有用。如果let 声明给您一个错误,请尝试var 相反我知道这很愚蠢,但如果var 如果不起作用,则错误位于表达式的右侧。

我会替换url: \'<WP_AJAX_URL_HERE>\' 具有ajaxurl 看看这是否有帮助。

相关推荐

从<?php_head();?>中删除css&js

我已经处理这个问题好几天了,事实是我找不到解决办法。我已经在wp头中手动添加了代码。现在我需要删除它自动生成的这些行我要消除的行包括:<link rel=\"stylesheet\" id=\"create-css\" href=\"http://www.myweb.com/wp-content/themes/movil/create.css?ver=4.9.8\" type=\"text/css\" media=\"all\" data-inprogress=\"\"> &