@santavits

Как обновить значение в блоке с помощью js?

Задача такова

в id со значение price выводится сумма заказа
<h5 class="uppercase">Спишется: <span id="price">0  <?php echo $currency; ?> </span></h5>

Выводится с помощью js обработчика
function updatePrice(ServiceID, Quantity, PostsCount) {
	var dataString = 'action=get-price&service-id='+ServiceID+'&quantity='+Quantity+'&postsCount='+PostsCount;
	if(Quantity > 0) {
		$.ajax({
			type: "POST",
			url: "requests.php",
			data: dataString,
			cache: false,
			success: function(data){
				if(data) {
					$("#price").html(data);
				}
			}
		});
	} else {
		$("#price").html(0);
	}
}

Это php Обработчик для цены
if(GetAction('get-price')) {
	$user->IsLogged();

	$price = $orders->GetPrice($_POST['service-id'], $_POST['quantity']);
	echo $price;
}


Так же при заказе есть не обязательный input для ввода скидочного купона

<input type="text" id="order_kupon" name="kupon" class="input-md round form-control def-text" placeholder="Код купона">

Который так же обрабатывается с помощью js обработчика
$('#order_kupon').on('change', function() {
    updateKupon();
});

function updateKupon() {
    $.ajax({
        type: "POST",
        url: "requests.php",
        data: {
            action: 'get-kupon',
            kupon: $('#order_kupon').val()
        },
        cache: false,
        success: function(data){
            if(data) {
                $("#skidka").html(data);
            }
        }
    });
}


Вот php обработчик
if(isset($_POST['action']) && $_POST['action'] == 'get-kupon') {
    $kupon = $_POST['kupon'];
	$gdfdfg = mysql_query("SELECT * FROM `kupon` WHERE `kupon`='$kupon' AND `ostatok`>'0'", $db);
    $num_kup = mysql_num_rows($gdfdfg);
	
	
	
    if($num_kup > 0) {
		$sqlh = mysql_query("SELECT * FROM `kupon` WHERE kupon='$kupon'", $db);
$resultz=mysql_fetch_array($sqlh);
$skidka = $resultz['procent'];
        echo $skidka.'%';
    } else {
        echo '0 %';
    }
}

В этом блоке и выводится процент скидочного купона
<h5 class="uppercase">Скидка: <span id="skidka">0 %</span></h5>


Теперь такой вопрос
Как сделать чтобы в блоке с id="price" писалась сумма уже с учётом скидки, если введён скидочный купон ?
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
dimastik1986
@dimastik1986
учусь
1. Как мне кажется, вторая функция отправки не нужна, ведь обе функции ведут на один и тот де обработчик. У вас вообще все готово почти. Достаточно в updatePrice, туда же в запрос, просто добавить значение поля kupon и если нужно выполнять updatePrice при изменении kupon, отправляйте так же через on('change'. А в php обработчике, проверяйте наличие переменной kupon + что это не попытка подставить в ваш код что-то вредное, можно проверить регулярным выражением или хотя бы, что это не html код и прочее. Регулярные выражения для новичка не очень просто, однако они еще пригодятся и их придется учить. А до момента понимания, как писать регулярные используйте встроенные ф-ции и/или регулярные выражения найденные в сети.

1.1. если вы используете .on('change', я бы советовал добавить проверку по маске купона на стороне пользователя с помощью js, чтобы скрипт не ломился отправлять и соответственно обрабатывать ненужные запросы, тем самым вы сможете меньше нагружать процессор и БД, кажется что мелочь, но если пользователей на сайте будет много, тут, там-сям немного сэкономили, на круг уже будет заметно.

1.2. обязательно, возьмите за привычку проверять/сверять информацию, которую вводит пользователь! Перед запросом в БД нужно проверить наличие с помощью isset(), если подразумевается число, значит функцией is_numeric() и тд... В случае с купоном, можно проверить на кол-во символов (если это известно) и например прогнать через strip_tags(), htmlspecialchars() или использовать другие встроенные функции для фильтрации и/или обработки информации.

2. К слову о фильтрации и проверке информации. НЕ обращайтесь к $_POST на прямую, для получения значений $_POST и $_GET используйте функции фильтрации filter_input(), если это массив filter_input_array(). Они же могут определить является ли полученная переменная числом, адресом эл.почты и прочее. Подробнее тут и тут...

3. не используйте SQL-инъекции, используйте PDO, посмотреть доступность на вашем сервере можно в PhpInfo

Старайтесь совершать как можно меньше необоснованных запросов и оправок данных, а так же обязательно проверять все данные которые поступают из вне - возьмите за аксиому: каждый пользователь враг и хочет навредить вашему сайту, многие просто могу сделать это по приколу, ну а если вы собираетесь работать с деньгами, то тут уже вопрос безопасности нужно выводить на первое место и уделять проверкам особое внимание! Почитайте более подробно, например на habr.com.

Пункты 2 и 3 обязательны для всех ваших скриптов!
И под конец для вас две новости, одна плохая и одна хорошая:
Плохая - придется исправлять все подключения и заменить переменные $_POST и $_GET...
Я в свое время решил эту проблему очень просто

1. Автозаменой заменил во всех файлах массивы $_POST на $POST и соответственно $_GET на $GET. Визуально практически ничего не изменив в тексте скрипта, но уже суть совсем другая )))
2. Задав в начале скрипта новым переменным значения через описанные выше функции фильтрации...


Хорошая - это будет не сложно и не очень объемно ;)

доп.: в самом начале каждого php файла (а проще в один, который добавляется везде, например конфиг) - советую прописать вывод ошибок на экран, если конечно вы этого еще не сделали
тут то, что нужно прописать
ini_set('display_errors', true); 
ini_set('display_startup_errors', true);
ini_set('error_reporting', -1);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы