#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, который был мне полезен — с моей стороны потребовалось много работы, чтобы заставить его делать что-то действительно…