Get user input from a form

时间:2012-12-11 作者:William

我正在尝试创建一个表单,允许用户在前端更新其信息。我刚刚开始学习PHP(我对C非常了解)。如果我使用此代码在WordPress页面上创建表单,当用户按下“更新”按钮,然后更新数据库时,我如何从用户那里获取信息?

function Insert_AccountTable_1()
{
    $current_user = wp_get_current_user();

    if ($current_user->ID != 0)
    {
        return <<<HTML
            <form class="AlumniForm" method="post">
            <h3>Name</h3>
            <br>
            <table>
                <tbody>
                    <tr>
                        <th><label for="Username">Username</label></th>
                        <td><span>$current_user->user_login</span></td>
                        <td><span class="description">Usernames cannot be changed.</span></td>
                    </tr>
                    <tr>
                        <th><label for="current_user_firstname">First Name</label></th>
                        <td><input id="current_user_firstname" type="text" name="current_user_firstname" value="$current_user->user_firstname"/></td>
                    </tr>
                    <tr>
                        <th><label for="current_user_lastname">Last Name</label></th>
                        <td><input id="current_user_lastname" name="current_user_lastname" type="text" value="$current_user->user_lastname"/></td>
                    </tr>
                    <tr>
                        <th><label for="current_user_displayname">Display Name<span class="description">(required)</span></label></th>
                        <td><input id="current_user_displayname" type="text" value="$current_user->display_name"/></td>
                    </tr>
                </tbody>
            </table>

            <h3>Contact Info</h3>
            <br>
            <table>
                <tbody>
                    <tr>
                        <th><label for="current_user_email">E-mail<span class="description">(Required)</span></label></th>
                        <td><input id="current_user_email" type="text" value="$current_user->user_email"/></td>
                    </tr>
                    <tr>
                        <th><label for="current_user_url">Website</label></th>
                        <td><input id="current_user_email" type="text" value="$current_user->user_url"/></td>
                    </tr>
                </tbody>
            </table>
            <input type="submit" name="current_user_submitupdates">Update</input>
            </form>
HTML;
    }
    else
    {
        return <<<HTML
        <h3>Error - User not logged in</h3>
HTML;
    }
}

add_shortcode(\'InsertAccountTableI\', \'Insert_AccountTable_1\');

1 个回复
SO网友:fuxia

使用wp-admin/admin-post.php 作为窗体操作处理程序,并将自定义函数作为回调绑定到该函数。

电子邮件更新的简单示例。我们将使用名为[userform] 这里,但您也可以使用模板。

add_shortcode( \'userform\', \'wpse_75723_userform\' );
add_action( \'admin_post_update_user_email\', \'wpse_75723_update\' );

/**
 * Create the form.
 */
function wpse_75723_userform()
{
    $here = esc_url( home_url( $_SERVER[\'REQUEST_URI\'] ) );

    if ( ! is_user_logged_in() )
        return  \'You have to <a href="\' . wp_login_url( $here ) . \'">log in</a> to use this page.\';

    $action  = admin_url( \'admin-post.php\');
    $user_id = get_current_user_id();

    return "<form method=\'post\' action=\'$action\'>
    <input type=\'hidden\' name=\'action\' value=\'update_user_email\'>
    <input type=\'hidden\' name=\'redirect\' value=\'$here\'>
    <input type=\'hidden\' name=\'user_id\' value=\'$user_id\'>
    <input type=\'email\' name=\'email\' size=\'15\'>
    <input type=\'submit\'>
    </form>";
}

/**
 * Update user email
 */
function wpse_75723_update()
{
    if ( ! isset ( $_POST[\'user_id\'] ) )
        die( \'no id\' );

    $user_id = absint( $_POST[\'user_id\'] );

    if ( ! current_user_can( \'edit_user\', $user_id ) )
        die( \'not allowed\' );

    if ( ! isset ( $_POST[\'email\'] ) )
        die( \'no email\' );

    if ( ! is_email( $_POST[\'email\'] ) )
        die( \'invalid email\' );

    $user = get_userdata( $user_id );

    if ( empty ( $user->user_login ) )
        die( \'user denied\' );

    global $wpdb;

    $wpdb->query(
        $wpdb->prepare(
            "UPDATE {$wpdb->users} SET user_email = %s WHERE user_login = %s",
            $_POST[\'email\'],
            $user->user_login
        )
    );

    $location = isset ( $_POST[\'redirect\'] )
        ? urldecode( $_POST[\'redirect\'] )
        : home_url( \'/\' );

    wp_redirect( $location, 303 );
    exit;
}
正在插入…

[userform]
…将生成一个基本表单:

enter image description here

用户可以在此处更改其电子邮件地址。

要了解可用的变量及其存储位置,请查看以下文件:

  • wp-admin/user-edit.php
  • wp-admin/includes/user.phpwp-includes/user.php
表格usersuser_meta 如果要发送简单的SQL查询,也值得一看。

结束

相关推荐

Ajax for non-logged-in users

我正在开发一个插件,它可以从未登录用户(如Like按钮)捕获一些数据,并根据post\\u id将其输入数据库。我的插件对登录用户很好,但非登录用户在AJAX中会产生“-1”响应。我猜这与写入数据库的身份验证障碍有关,但我正在寻找一种解决方法。有什么想法吗?编辑:以下是代码:http://pastebin.com/ghtvJNiW我是根据Love-It AJAX plugin 皮平。他在教程中说,这只适用于登录用户,但我需要让它也适用于未登录用户。