Как использовать флажок для изменения запроса MySQL в режиме реального времени?

#php #mysql #ajax #checkbox

#php #mysql #ajax #флажок

Вопрос:

На моем сайте есть статьи с PHP-запросом, что-то вроде

 $sql - ("SELECT * FROM articles WHERE showing=0");
 

самое главное здесь — показать =0, я объясню, почему последнее включено.

Я подумывал о добавлении флажка, который будет выполнять следующие действия: если пользователь установит флажок, он изменит отображение = 1, а если флажок снят, отобразится = 0.

Как бы мне сделать так, чтобы 1) он запоминал, установил или не установил пользователь флажок. Таким образом, каждый раз, когда пользователь посещает веб-сайт, флажок включен или выключен в зависимости от того, что пользователь делал раньше. 2) обновить страницу, чтобы показать новые результаты, если, например, отображение = 0 изменилось на отображение = 1?

Ответ №1:

Это очень много, что нужно сделать. Для первой части вы должны прикрепить обработчик ‘onclick’ к флажку, который запускает вызов AJAX на сервер и отправляет новый статус флажка. Сценарий на стороне сервера обновляет базу данных с помощью нового флажка.

Что касается запоминания базы данных, это зависит от того, как вы относитесь к пользователям. Если они зарегистрированы, сохраните статус флажка где-нибудь в их пользовательской информации. Если они просто не зарегистрированы случайным образом, вам нужно будет использовать cookie.

Что касается вашего 2), я не совсем понимаю, что вы имеете в виду. Вы хотите, чтобы флажок обновлялся во всех окнах, которые могут быть открыты пользователем? Или просто измените флажок в окне, чтобы они нажали на него?

Комментарии:

1. нет, нет, 2-й — это отображение различной информации из базы данных в зависимости от состояния флажка.

Ответ №2:

Если вы вообще заботитесь о производительности, жизненно важно знать, насколько большой может быть таблица статей и как она индексируется. Если таблица статей достаточно мала, что другие этапы создания веб-страницы превышают стоимость двух запросов (которые вы можете распараллелить), просто сгенерируйте оба списка, добавьте два divs и напишите JavaScript на стороне клиента, чтобы показывать указанный div только тогда, когда флажок установлен или снят. Что-то вроде

 <script type="text/javascript">
    function updateArticlesList() {
        var box = document.getElementById("ckart");
        if (box.checked) {
            document.getElementById("article0").style.visibility = "collapse";
            document.getElementById("article1").style.visibility = "visible";
        } else {
            document.getElementById("article0").style.visibility = "visible";
            document.getElementById("article1").style.visibility = "collapse";
        }
    }
</script>
<input id="ckart" type="checkbox" onclick="updateArticlesList()">Switch articles list</input>
 

следует позаботиться, по крайней мере, о вопросе 2. Если таблица статей большая и медленно запрашивается, вам нужно пойти совершенно другим путем и заполнить недостающий div, только если пользователь действительно нажмет на флажок. В этом случае вам необходимо добавить вызовы AJAX в функцию updateArticlesList.

С другой стороны, вопрос 1 — это совершенно другой вопрос. Я собираюсь предположить, что у вас есть какой-то способ узнать, кто является текущим пользователем, когда вы создаете страницу, иначе бессмысленно пытаться говорить о том, «что пользователь делал раньше». Но, с приведенным выше кодом, единственное, что вам нужно сделать, это установить начальные значения видимости для divs article0 и article1 и видимости checkbox ckart. AJAX решает вопрос о сохранении пользовательских настроек обратно на сервер. Лучше всего вам добавить URL-адрес на сервер (у меня гораздо больше опыта работы с Django, поэтому мой первый инстинкт — urls.py запись, хотя я знаю, что это не относится к PHP), так что обратная запись строки «0» или «1» приводит к сохранению настроек в профиле пользователя. На следующей странице, если параметр видимости статьи пользователя равен 0, то отображается div article0, article1 сворачивается, а ckart не отмечен. Если параметр видимости статьи пользователя равен 1, то article0 сворачивается, article1 отображается, а ckart проверяется.

Комментарии:

1. Я не думаю, что загрузка двух divs одновременно — хорошая идея, но я тоже не очень хорошо разбираюсь в ajax, есть ли способ сделать это без помощи ajax? Скажем, обновление страницы? Thmx