#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