Вопрос или проблема
Я пробовал это, но это вызывает ошибку в консоли. Я не понимаю, как это запустить. Я передал переменную jQuery в SQL-запрос, но это не работает.
<script type="text/javascript">
var scriptTag = document.scripts[document.scripts.length - 1];
var parentTag = scriptTag.parentNode;
var main = parentTag.parentNode;
var id = jQuery(main).attr('id')
var i;
for (i = id; i<=id; i++) {
<?php
$results = $wpdb->get_var("select COUNT(*) from wpq7_pmpro_memberships_users where user_id = $current_user->ID AND membership_id = ?>id <?php");
if( $results > 0){
?>
if(id == i){
btn = '<a href="https://thepearledu.com/membership-account/membership-checkout/?level="+id+"" class="elementor-button-link orange-btn elementor-button elementor-size-md" role="button"><span class="elementor-button-content-wrapper"><span class="elementor-button-text">ПОЛУЧИТЕ ЭТО СЕЙЧАС <font color="#00ff" class="animated infinite flash delay-2s">Только ₹ 99.00 </font></span></span></a>'
jQuery('#'+id).append(btn)
}
}
<?php } ?>
</script>
<?php
##
Я пробовал через Ajax, но, к сожалению, это также не работает.
<script type="text/javascript">
var scriptTag = document.scripts[document.scripts.length - 1];
var parentTag = scriptTag.parentNode;
var main = parentTag.parentNode;
var id = jQuery(main).attr('id')
var i;
for (i = id; i<=id; i++) {
jQuery.ajax({
type: "POST",
url: "<?php echo admin_url('admin-ajax.php'); ?>",
dataType: "html",
data: {
action: 'my_action_name',
"myData":id
}}).done(function(data) {
console.log(data);
if(data == true){
btn = '<a href="https://thepearledu.com/membership-account/membership-checkout/?level="+id+"" class="elementor-button-link orange-btn elementor-button elementor-size-md" role="button"><span class="elementor-button-content-wrapper"><span class="elementor-button-text">ПОЛУЧИТЕ ЭТО СЕЙЧАС <font color="#00ff" class="animated infinite flash delay-2s">Только ₹ 99.00 </font></span></span></a>'
jQuery('#'+id).append(btn)
}
else{
btn = '<a href="https://thepearledu.com/membership-account/membership-checkout/?level="+id+"" class="elementor-button-link orange-btn elementor-button elementor-size-md" role="button"><span class="elementor-button-content-wrapper"><span class="elementor-button-text">ПОЛУЧИТЕ ЭТО СЕЙЧАС <font color="#00ff" class="animated infinite flash delay-2s">Только ₹ 99.00 </font></span></span></a>'
jQuery('#'+id).append(btn)
}
});
}
</script>
##
в том же файле function.php
function my_action_name(){
$data = $_POST['myData'];
$results = $wpdb->get_var("select COUNT(*) from wpq7_pmpro_memberships_users where user_id = $current_user->ID AND membership_id = $data");
if( $results > 0){
return true;
}
}
Вы можете использовать обещания ES6 внутри функции for-each. Таким образом, цикл остановится, подождет ответ от ajax-вызова, а затем снова продолжит цикл с данными ответа. Обещания – это чистый способ реализации асинхронного программирования в JavaScript (новая функция ES6). До появления обещаний для реализации асинхронного программирования использовались обратные вызовы. Давайте начнем с понимания того, что такое асинхронное программирование и его реализации с помощью обратных вызовов.
Ответ или решение
Чтобы выполнить SQL-запрос в вашем скрипте, вы можете использовать AJAX с подходом к асинхронному программированию. Давайте рассмотрим ваш код, исправим ошибки и обеспечим правильное выполнение.
1. Основные ошибки
-
Ошибки в синтаксисе JavaScript:
- У вас есть двойные кавычки в строках вне функции
ajax
, что может привести к синтаксическим ошибкам. - Вы используете
for (i = id; i <= id; i++)
, что не имеет смысла, так как цикл выполняется один раз. Возможно, вы планировали выполнить его для нескольких идентификаторов.
- У вас есть двойные кавычки в строках вне функции
-
Необходимость обрабатывать результат AJAX-запроса:
- В вашем текущем коде вы не обрабатываете ответ от сервера, что может привести к недопониманию того, что происходит.
-
PHP-код вне функции не доступен:
- Код, который вы пытаетесь использовать в JavaScript, должен быть отдельно обработан на стороне сервера.
2. Исправленный код
Приведенный ниже код исправляет проблемы, описанные выше, и правильно реализует запрос. Мы будем использовать $.ajax
для отправки данных на сервер, где будет выполняться SQL-запрос.
HTML и JavaScript (AJAX)
<script type="text/javascript">
jQuery(document).ready(function($) {
var main = $('#yourElementId'); // Поменяйте на правильный селектор
var id = main.attr('id');
// Отправка AJAX-запроса
$.ajax({
type: "POST",
url: "<?php echo admin_url('admin-ajax.php'); ?>",
dataType: "json",
data: {
action: 'my_action_name',
myData: id
}
}).done(function(response) {
if (response.success) {
var btn = '<a href="https://thepearledu.com/membership-account/membership-checkout/?level=' + id + '" class="elementor-button-link orange-btn elementor-button elementor-size-md" role="button">' +
'<span class="elementor-button-content-wrapper">' +
'<span class="elementor-button-text">GET IT NOW <font color="#00ff" class="animated infinite flash delay-2s">Only ₹ 99.00</font></span>' +
'</span>' +
'</a>';
$('#' + id).append(btn);
} else {
// Действия в случае неуспеха
console.log('Пользователь не найден или не имеет доступа.');
}
}).fail(function(jqXHR, textStatus) {
console.log("Ошибка AJAX: " + textStatus);
});
});
</script>
PHP (файл functions.php)
function my_action_name() {
global $wpdb;
$current_user = wp_get_current_user(); // Получение данных текущего пользователя
$data = intval($_POST['myData']); // Безопасная обработка входящих данных
$results = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM wpq7_pmpro_memberships_users WHERE user_id = %d AND membership_id = %d",
$current_user->ID,
$data
));
if ($results > 0) {
wp_send_json_success(); // Успешный ответ
} else {
wp_send_json_error(); // Ошибка, пользователь не найден
}
}
add_action('wp_ajax_my_action_name', 'my_action_name'); // Регистрация AJAX действия
add_action('wp_ajax_nopriv_my_action_name', 'my_action_name'); // Для незалогиненных пользователей
Объяснение кода
-
AJAX запрос: JavaScript использует
$.ajax
, чтобы отправить идентификатор в PHP. Важно использовать правильный URL, полученный черезadmin_url('admin-ajax.php')
. -
PHP обработчик: Мы получаем идентификатор на серверной стороне и выполняем безопасный запрос SQL с помощью
$wpdb->prepare
, что предотвращает SQL-инъекции. -
Возврат данных: Мы используем
wp_send_json_success()
иwp_send_json_error()
для возврата JSON-ответов обратно на клиент, что упрощает проверку состояний. -
Простота обработки ошибок: Используя
.fail()
, мы можем обрабатывать ошибки AJAX-запроса и выводить сообщения для разработчика.
Заключение
Следуйте этим шагам, чтобы исправить свою реализацию SQL-запроса в JavaScript с использованием AJAX. Этот подход не только исправляет ошибки, но и гарантирует безопасность и читаемость кода. Удачи в разработке!