繁体   English   中英

浏览器刷新时删除了数据库条目,Ajax PHP jQuery

[英]Database entry removed on browser refresh, Ajax PHP jQuery

我有一个表单,可以在通过 ajax 提交表单时更新数据库表中的列。一切正常,数据库表列获取信息,但是一旦刷新浏览器,信息就会从数据库中删除。 我将 php 设置为在不存在 meta_value 时执行数据库更新,但 meta_value 也在数据库中,因为它也是在提交表单时创建的。

我希望信息保留在数据库中,直到或除非 meta_value 已被删除或不存在。

任何见解表示赞赏。

PHP

add_action('wp_ajax_hide_this', 'hide_this_by_id');
add_action('wp_ajax_nopriv_hide_this', 'hide_this_by_id');
function hide_this_by_id()
{
    global $wpdb;
    $wpdbPrefix = $wpdb->prefix . 'swpm_members_tbl';
    $postdVlaue2 = $_POST['hidebtn2'];
    $this_user = $_POST['thisuser'];
    $this_num = $_POST['thisnum'];


    if (is_user_logged_in()) {
        $member_id = SwpmMemberUtils::get_logged_in_members_id();

        $query = "SELECT * FROM " . $wpdb->prefix . "swpm_members_tbl WHERE member_id = %d";
        $userData = $wpdb->get_row($wpdb->prepare($query, $member_id));

        $membership_levels = $userData->membership_level;

        $labelID4 = $membership_levels;

        $insertdisUr = $wpdb->update( $wpdbPrefix, array( 'this_user' => $this_user), array( 'member_id' => $member_id));
        $insertdisId = $wpdb->update( $wpdbPrefix, array( 'this_id' => $this_num), array( 'member_id' => $member_id));

    } else {
        $not_loggedin = 1;
    }

    if ($labelID4 == 10 ) {
        $userlvlMeta2 = 1;
        $alredyclick3 = get_user_meta($member_id, 'hidden-info', true);
        if (empty($alredyclick3) &&  $postdVlaue2 == 1) {
            $insertdisUr;
            $insertdisId;
            $alredyclick3 = 1;
        }
    }

    $return4 = array(
        'hIdethis2'  => $this_hide2,
        'userlvlMeta2' => $userlvlMeta2,
        'userlvlNolog' => $not_loggedin,
    );

    echo json_encode($return4);

    die();
}

jQuery

function doAjaxRequest4(hidebtn2,getthisInfo,getthisInfo2) {

    jQuery.ajax({
        url: ajax_sib_front_object.ajax_url,
        data: {
            'action': 'hide_this',
            'thisuser': getthisInfo,
            'thisnum': getthisInfo2,
            'hidebtn2': hidebtn2
        },
        dataType: 'JSON',
        type: "post",
        success: function (data) {
            console.log(data.test);
            var input = jQuery('.thisuser > input');
            var input2 = jQuery('.thisnumber > input');
            var is_name = input.length > 3;
            var is_name2 = input2.length > 3;

            if (!data.hIdethis2 == 1 && data.userlvlMeta2 == 1) {
                jQuery("#this_col_1").addClass("enable_this");
            } else if (data.hIdedisc2 == 1 && is_name && is_name2 ) {
                jQuery("#this_col_1").removeClass("enable_this");
                jQuery("#this_col_2").addClass("enable_this");

            } 
        }
    });
}

Function 来电

if ($('body').is('.page-id-9999') || $('body').is('.page-id-1111')) {

    var thisbtn = document.querySelector('#this_verf_form > div > .wpcf7');

    thisbtn.addEventListener('wpcf7submit', function (event) {
        var status = event.detail.status;
        console.log(status);
        if (status === 'mail_sent') {
            jQuery('#this_submtID').val("Submitted");
        }
        setTimeout(function () {
            doAjaxRequest4(1,getthisInfo,getthisInfo2);
        }, 3500);
    }, false);
}

如果您的表单提交是程序化的,也就是说,发生在后台并且不刷新页面(就像使用 Ajax 时一样),那么我建议在提交后清除表单字段。

就像是:

$(thisbtn).parents('form')[0].reset()

事实证明, $wpdb->update是基于用户通过 PHP 登录而运行的。放置在条件语句中的变量被忽略了。 为了解决这个问题,我从“用户已登录”条件中删除了代码的$wpdb->update部分,并将其移至“if empty”条件语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM