Я хочу выполнить SQL-запрос в скрипте, как я могу это сделать?

Вопрос или проблема

Я пробовал это, но это вызывает ошибку в консоли. Я не понимаю, как это запустить. Я передал переменную 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. Основные ошибки

  1. Ошибки в синтаксисе JavaScript:

    • У вас есть двойные кавычки в строках вне функции ajax, что может привести к синтаксическим ошибкам.
    • Вы используете for (i = id; i <= id; i++), что не имеет смысла, так как цикл выполняется один раз. Возможно, вы планировали выполнить его для нескольких идентификаторов.
  2. Необходимость обрабатывать результат AJAX-запроса:

    • В вашем текущем коде вы не обрабатываете ответ от сервера, что может привести к недопониманию того, что происходит.
  3. 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'); // Для незалогиненных пользователей

Объяснение кода

  1. AJAX запрос: JavaScript использует $.ajax, чтобы отправить идентификатор в PHP. Важно использовать правильный URL, полученный через admin_url('admin-ajax.php').

  2. PHP обработчик: Мы получаем идентификатор на серверной стороне и выполняем безопасный запрос SQL с помощью $wpdb->prepare, что предотвращает SQL-инъекции.

  3. Возврат данных: Мы используем wp_send_json_success() и wp_send_json_error() для возврата JSON-ответов обратно на клиент, что упрощает проверку состояний.

  4. Простота обработки ошибок: Используя .fail(), мы можем обрабатывать ошибки AJAX-запроса и выводить сообщения для разработчика.

Заключение

Следуйте этим шагам, чтобы исправить свою реализацию SQL-запроса в JavaScript с использованием AJAX. Этот подход не только исправляет ошибки, но и гарантирует безопасность и читаемость кода. Удачи в разработке!

Оцените материал
Добавить комментарий

Капча загружается...