• Как после второго нажатия кнопки, открыть диалоговое окно с текстом (типа alert или window)??

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Лучше следить за единственностью лайка на сервере – возвращать ответ с ошибкой «уже голосовали». Мало ли, было открыто две вкладки со страницей голосования?

    А в интерфейсе – убирать-деактивировать кнопку лайка сразу после нажатия.
    $("#btnLike").one('click', function() { // .one() выполнится только 1 раз
      // ........код
    
      // кнопку больше не нажимать:
      $(this).attr('disabled', true); // и стилями сделать её блеклой
    
      $.ajax({
        method: 'post',
        url: "https://site.com/like.php",
        dataType: 'text',
        data: {
          'like': 1
        },
        success: function(result) { // обработка ответа
          if (result != 'OK') {
            // вывести ошибку из ответа
          }
          // ......результат;
        }
      });
    });
    Ответ написан
    7 комментариев
  • Как написать обработчик PHP, который, от каждого нового юзера, при клике на кнопку, обновляет БД, увеличивая счётчик на +1 ??

    zb_venom
    @zb_venom
    Жизнерадостный чебурек
    Наверно самое очевидное решение, это хранить лайки в таблице лайков:
    | id | post_id | user_id | like |, где
    • post_id - идентификатор поста,
    • user_id - идентификатор пользователя,
    • like - можно от 0 до 1 или true or false соответственно.


    А просто так использовать счетчик у Вас не получится.
    Ответ написан
    Комментировать
  • Как написать обработчик PHP, который, от каждого нового юзера, при клике на кнопку, обновляет БД, увеличивая счётчик на +1 ??

    @WebEagle
    Потребуется БД, вероятно у вас MySQL и это хорошо)) + на стороне сервера запускаем session
    Сессия нам потребуется чтобы туда занести информацию о первом клике,
    if (!isset($_SESSION['is_add_to_db'])) {
    // добавление в БД, проверка избавит вас от лишних запросов в БД
    }

    Таблица в базе:
    userId - либо уникальный идентификатор пользователя, если вы пользователей никак в базе не храните - то можно UUID или ID сессии. В любом случае это поле должно быть уникальным
    Остальные поля не обязательны, по вашему желанию от ваших нужд. Но я бы добавил created dateTime чтобы знать когда произошел клик

    Сколько строк в таблице - столько уникальных кликов
    Ответ написан
    Комментировать
  • Почему при клике по другой кнопке, audio не прекращает воспроизведение?

    Gvoz1
    @Gvoz1
    Frontend разработчик
    У вас при обоих кликах создаются новые экземпляры Audio.
    Нужно вынести переменную audioCube за пределы функций.
    let audioCube = new Audio('audio.mp3'); 
    // Start Audio!
        $("#btn-animate-start").on( "click", function play() {
            audioCube.play();
            audioCube.loop = true;
        });
    
              // Stop Audio!
        $("#btn-animate-stop").on( "click", function pause() {
            audioCube.pause();
        });
    Ответ написан
    Комментировать
  • Кнопки Like / DisLike. При клике на Like, стили на ней появляются, все файлы POST 200, но +1 голос не отображается! Почему?

    Решили вопрос? мне кажется у вас в структуре jq кода нарушена последовательность. Я несколько уже подзабыл все нюансы, но
    ("#ratingDisLike").on('submit', function(e) {
    и
    $("#ratingsDislike").submit();
    это разве не одно и то же?
    а у вас одно в другом...

    вынесите сами функции выше обработчиков событий - так будет проще понять где что не так...
    п.с. вообще задача like/dislike проще несколько должна решаться) но это уже к делу не относится
    UPDATE.

    Фух... ну что сказать, чтобы не обидеть... надеюсь либо Вы учитесь, либо чей-то код разгребаете... потому что пусть я-не-гуру-но-что-то-умею пришлось повозиться. Как я и предполагал - код jquery неверный от и до.

    Я искренне не смотрел Ваши скриншоты, что и куда отправляется и в отличии от многих никогда никого не критикую, ибо сам могу легко ошибаться. Плюс я не сторонник теорий и прочей правильности - главное "штоб работало". Поэтому еще раз - могу быть в корне не прав, но оно работает. Итак, к делу.
    1) Код в форме
    <form action="" method="post" id="ratingsLike" onSubmit="ratingLike(1,2,3);return false;">

    я не уверен onSubmit или onsubmit (мне vscode показывает, что onsubmit корректнее). Далее прописываете функцию и параметры. Добавляете return false. Это вроде как preventDefault срабатывает.
    Итого - форма.
    <form id="ratingsLike" onsubmit="ratingLike(1,2,3);return false;">
            <button id="btnLike"><i id="thumbs-up" class="far fa-thumbs-up"></i></button>
        </form>

    2) Здесь я не уверен почему так (у меня проект на laravel и blade шаблонах), но onsubmit срабатывает корректно (без перезагрузки) когда функция находится вне document.ready.
    Скрипт.
    <script type="text/javascript">
         function ratingLike(id,type,target){
                        console.log('внутри функции ratingLike' ,id,type,target)
                            $.ajax({
                                method: "POST",
                                url: "/like-dislike", //здесь адрес к обработчику. в вопросе вы написали rating.php а в jquery отправляли на revealator.php/like_dislike.php - это вообще винегрет по-моему(
                                data: { id: id, type:type } // можно еще dataType добавить в зависимости от ответа. 
                                })
                                .done(function( data ) {
                                    $('#'+target).html(data.msg)  //вывод - мне приходит json поэтому через дату.
                            });
            }
         $(document).ready(function() {
            $('#btnLike').on('click',function(event){ //клик по кнопке. я убрал type=submit. Можно оставить и тогда этот блок вообще не нужен. Но так больше управляемости.
                event.preventDefault() 
                $('#ratingsLike').submit()
            })
        });
    
              </script>

    в общем не хочу конечно показаться грубым, но проще все или почти все удалить и заново выстроить цепочку. Очень все перемешано и замешано, только чтобы like/dislike сделать.
    Но если копаться дальше - ориентируйтесь на то, что я написал по поводу jq. Надеюсь не обидел
    Ответ написан
    7 комментариев
  • Использую PHPMailer. Почему ( $mail->addAttachment ) прикрепляет 2 одинаковых файла вместо разных??

    @galaxy
    Во-первых, вы повторно добавляете файлы при отправке формы. Этот код:
    jQuery.each(jQuery('#file')[0].files, function(i, name) {
                data.append('attachfile[]', name);
            });

    вообще не нужен, файлы уже есть в data.

    Во-вторых, покажите нормальный код на PHP, и что именно он присылает. Ваш код не может работать из-за этого:
    }    $filename = "./uploads/". $_FILES['attachfile']["name"]; 
                       $mail->addAttachment($_FILES['attachfile']['tmp_name'], $_FILES['attachfile']['name']);

    (видимо, какие-то артефакты предыдущих попыток).

    Без этого, код в целом выглядит рабочим. Выведите в лог (или прямо в браузер) массив $_FILES или $mail->getAttachments(), и посмотрите, все ли правильно аттачится.
    Ответ написан
  • HTML-форма ajax-ом отправляется, но не приходят данные из HTML-формы на Email. Ошибок нет никаких и нигде. В чём проблема?

    nuykon
    @nuykon
    Full Stack Developer
    1) Открываем dev tools браузера, например в гугл хроме, там открываем вкладку network, чуть ниже ставим метку на XHR. Смотрим отправляется ли запрос, что в теле запроса и что в теле ответа
    5fcb33db56568689625910.png

    Если запрос проходит успешно и в ответе вы видите -
    <b>Your message sent!</b><br><br><pre><b> <a href="https://site.com" style="text-decoration:none;"> ⬅ Back to page</a></b></pre>
    значит $mail->send() отработал. Если при этом письмо не пришло, то скорее всего функция mail отключена на хостинге.
    Обычно при тестовом периоде у некоторых хостеров она отключена и необходимо обращаться в поддержку.

    2) Проверить включена ли функция отправки на хостинге достаточно просто, используем стандартную функцию php, созайде php скрипт mail-test.php и разместите его в корне вашего сайта:
    <?php
    // Сообщение
    $message = "Line 1\r\nLine 2\r\nLine 3";
    
    // На случай если какая-то строка письма длиннее 70 символов мы используем wordwrap()
    $message = wordwrap($message, 70, "\r\n");
    
    // Отправляем
    mail('you@email.com', 'My Subject', $message);
    ?>

    Перейдите по ссылке you.domain/mail-test.php
    Если вам письмо не пришло - то функция отключена на хостинге и необходимо писать в службу поддержки.

    3) Если письмо пришло, значит что-то не так в вашем скрипте отправки.
    Ответ написан
    1 комментарий