Использование jQuery / Ajax для получения данных из базы данных для применения скидки

#php #jquery #ajax

#php #jquery #ajax

Вопрос:

Я хочу знать, как лучше всего сделать так, чтобы эта форма не использовала кнопку, а возвращала действительный код скидки, а затем применяла его к цене и показывала на странице.

 <input type="text" name="discount_code" value="" class="text" id="discount_code" title="Discount code">
  

Это просто сообщения на той же странице.

Я понимаю, что будут использоваться onChange и Ajax, но не уверен, как это сделать, поэтому, пожалуйста, ищите помощь / примеры по этому вопросу.

Большое спасибо.

Комментарии:

1. Данные поступают из базы данных.

2. Какая-нибудь помощь / примеры? Google твой друг

3. сначала посмотрел в Google, не смог найти то, что мне нужно, поэтому спрашиваю здесь.

4. Итак, вам нужен полный скрипт!! huuh..

Ответ №1:

Вы можете использовать функцию размытия jquery для вызова ajax и связи с базой данных

Например

 $('#discount_code').blur(function(){
//write your ajax call here
});
  

Ответ №2:

Полностью рабочий скрипт, разработанный только на прошлой неделе, вам нужно понять шаги, я не собираюсь объяснять.

 <script type="text/javascript">
function applyCouponCode() {
    $("#csuc, #cerr").hide();
    $("#csuc, #cerr").html('');
    var coupon = $("#ccode").val();
    if(coupon!='') {
        $("#cload").show();
        $.post('ajax/coupon.php', { coupon: coupon }, function(data) {
            /*optional stuff to do after success */
            switch(data) {
                case 'A':
                    $("#cerr").html('Please enter valid coupon code');
                    $("#cerr").show();
                    $("#cload").hide();
                    break;
                case 'B':
                    $("#cerr").html('You have already used this coupon code');
                    $("#cerr").show();
                    $("#cload").hide();
                case 'C':
                    $("#cerr").html('Please enter a valid coupon code');
                    $("#cerr").show();
                    $("#cload").hide();
                default:
                    var coupon = data;

                    // Now calculate the %age
                    var price = $("#event_subtotal_price").val();
                    var pctge = parseFloat(price) * ( parseFloat(coupon) / 100 );
                    var npric = parseFloat(price) - parseFloat(pctge);

                    pctge = pctge.toFixed('2');  // Total price dicount
                    npric = npric.toFixed('2');  // New price after discount

                    // Display the discount in totalling menu
                    $("#csuc").html('Coupon applied.');
                    $("#csuc").show();
                    $("#cload").hide();
            }
        });
    } else {
        $("#cerr").html('Please enter your coupon code');
        $("#cerr").show();
    }
}
</script>

<div style="margin: 15px 85px;">
    <p>
        Coupon Code <br />
        <span><input type="text" name="ccode" id="ccode" value="" /></span>
        <span id="cbtn"><input type="button" value="Apply" style="margin-bottom: 5px;" onclick="applyCouponCode();"></span>
        <span id="cload" style="display:none;"><img style="margin-bottom: -3px;" src="loader.gif"></span>
        <span id="csuc" style="color:#016B06; display:none;"></span>
        <span id="cerr" style="color:#E40303; display:none;"></span>
    </p>
</div>
  

Coupon.php

 <?php 

$coupon = $_REQUEST['coupon'];
$user = $_SESSION['picturebooth_customer_id'];

// Get the coupon detail
$coupon_count=$wpdb->get_var("SELECT COUNT(*) FROM `TABLE_COUPON` WHERE `coupan_code` = '$coupon' AND `status`='1'");

if($coupon_count) {

    $result = $wpdb->get_row("SELECT * FROM `TABLE_COUPON` WHERE `coupan_code` = '$coupon'");

    $discount = $result->discount;
    $today = strtotime(date("Y-m-d"));
    $from = strtotime($result->from_date);
    $to = strtotime($result->to_date);
    $total = $result->total_number;
    $used = $result->used_number;

    // Checking if the user has already has applied that coupon
    $uc_count = $wpdb->get_var("SELECT COUNT(*) FROM `USER_COUPON` WHERE `user_id` = '$user' AND `coupon_id`='$result->id'");

    if($uc_count) {
        echo 'B';
    } elseif( $today < $from ) {
        echo 'C';
    } elseif( ($today > $to) || ($used >= $total) ) {
        $wpdb->update('wp_coupons', array( 'status' => '0'), array( 'id' => $result->id ));
        echo 'C';
    } else {
        $wpdb->query("UPDATE `TABLE_COUPON` SET used_number = used_number 1 WHERE `id` = '$result->id'");
        $wpdb->query("INSERT INTO `USER_COUPON` SET `user_id` = '$user', `coupon_id`='$result->id', `date_added` = now()");
        echo $discount;
    }

} else {
    echo 'A';
}
  

Комментарии:

1. Я проголосовал против, потому что он неправильно отредактировал цену, отображаемую из коробки. В итоге я использовал его в продукте. Мне пришлось немного изменить его, поэтому вопросы были бы разумными. Вот почему я проголосовал за это. ЕСЛИ вы отредактируете свой ответ, я могу проголосовать за него.

2. Я надеюсь, вы понимаете, сколько изменений в версии произошло за 5 лет. удачи с вашим кодом, я принимаю отрицательный результат 🙂

3. Я думаю, что отсутствует часть, которая фактически обновляет цену. Я бы удалил голосование «против», но вы должны внести изменения, чтобы я мог это сделать, потому что в противном случае переполнение стека мне не позволит. PS везде, где у вас есть MySQL, вы могли бы использовать расширенные пользовательские поля. Т.Е. Использовать другую функцию плагинов PHP для сохранения и редактирования данных MySQL. Делает это немного проще, А ЗАТЕМ они могут обновлять код из серверной части, И если ЭТО coupon.php не скрыт, и код купона находится там, ЕСЛИ СЛУЧАЙНО ПЕРЕЙТИ К НЕМУ, они могут увидеть скидку (как бы маловероятно это ни звучало), в отличие от того, если вы используете готовую функцию, например, с ACF

4. Но, увы, достойный пример реализации AJAX, который был мне полезен — с моей стороны потребовалось много работы, чтобы заставить его делать что-то действительно…