Присвоить класс элементу, если значение есть в БД

Рейтинг: 0Ответов: 1Опубликовано: 10.10.2014

Здравствуйте.

http://jsfiddle.net/N2EGr/7/
Подскажите, как присвоить класс элементу (ячейке таблицы), если ее значение есть в БД?
Вся трудность в том, что в ячейках у меня только дни, а в бд дата полностью в формате yyyy-mm-dd. Нужно, чтобы при загрузке страницы проверялись, есть ли такие дни в БД, и им присваивался класс .click - они будут краситься в красный.

UPD. На данный момент ситуация такая. Если я перед вызовом функции прописываю var json_data = <? echo $json_data;?>; то через alert выводится значения через запятую. Это не хитрость?)) Вот такая конструкция работает как положено (с учетом изменений из Вашего комментария про inarray) var json_data = [11,15,19]; А такая не работает: var json_data = <? echo $json_data;?>; Хотя alert(json_data); дает одинаковый ответ.

Ответы

▲ 1Принят

Update (13.10.2014)


Ну, вот если бы вы хоть указали, что из выше мной написанного вам не понятно, получается все?

Как средствами Ajax отправить данные, помните? (Откройте ваш фидл). Добавьте такой же запрос в начале функции генерации календаря переменные year, month у вас есть (их принимает функция), uid сами подумайте, откуда взять.

Запрос отправлен, теперь обработчик ищет даты, соответствующие этим трем критериям (год, месяц, пользователь). Пример запроса смотрите в моем ответе здесь. Результат выборки нам необходимо передать обратно в скрипт генерации календаря, для этого просто выведем массив (используя echo, или print, или даже print_f) в удобном для JavaScript формате. Почитайте в Интернете, как передавать переменные/массивы/данные из php в JavaScript, json как подсказка.

Ну что, теперь у функции create calendar появились еще данные. Достаточно обработать их (надеюсь, вы уже нашли, как) и воспользоваться функцией inarray для сравнения, примерно так:

Заменили

table += '<td>'+d.getDate()+'</td>';

на

if (
$.inArray( d.getDate(), your_array )) {table += '<td class="click">'+d.getDate()'</td>';}

Else {table += '<td>'+d.getDate()+'</td>';}

Повторения кода можно (нужно) исключить, но так, я думаю, будет нагляднее.

--------------------------
    UPDATE:
--------------------------

Изначально хотел бы обратить внимание на то что я ошибся в синтаксисе функции SUBSTRING, третий параметр в ней - это длина извлекаемой строки а не позиция последнего символа (как я изначально понял), соответственно запрос выбора отдельных сегментов нужно поправить, как это делается я показал в sqlfiddle

Касаемо вашего обработчика: теги в нем не нужны, просто выводите echo $json; Я не понял почему вы выбираете только по месяцу, а год упускаете, впрочем, возможно ваши задачи это позволяют.

Исходя из моей ошибки касаемо SUBSTRING, запрос в обработчике должен выглядеть как то так: $sql_query = "SELECT SUBSTRING(vihodnoy, 9, 2) as day FROM table WHERE user_id={$uid} AND SUBSTRING(vihodnoy, 6, 2) = {$month} AND SUBSTRING(date, 1, 4) = {$year}";

Насчет inArray, а где определяется date_json у вас? Ну проверку вижу, а вот задание значений для него? Нужно же было обработать ответ обработчика:

var date_json;
$.ajax({
    type: "POST",
    url: your_url,
    data: "month="+month + "&year="+year,
    success: function(data) {
        date_json = JSON.parse(data);
    }
});

Обратите внимание на функцию success, в ее теле мы получаем и преобразуем json-строку в массив.

Старайтесь более вникать в решения в коде, у вас образуется большая каша, и очень много ошибок именно потому что вы не глядя вставляете куски чужого кода. К тому же куски кода (не важно мои или других участников) не проверяются в реальных условиях, максимум на локальных машинах или же на спец.сервисах, но отнюдь не в вашем проекте, поэтому работоспособность оного необходимо проверять и подстраивать под свои нужды в любом случае!