Как использовать флажок, чтобы изменить запрос MySql в режиме реального времени? - PullRequest
0 голосов
/ 29 октября 2011

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

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

Самая важная вещь здесь , показывающая = 0 Я объясню, почему последняя.

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

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

Ответы [ 2 ]

1 голос
/ 29 октября 2011

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

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

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

0 голосов
/ 29 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...