document.styleSheets[i].rules[j].selectorText
document.styleSheets[i].rules[j].style['имя_свойства'] = значение_свойства;
viewsHandler(elementClass){
let data = this.data.htmlBlocks[elementClass].views;
let now = new Date().getTime();
if ( data.lastView && now - data.lastView / 1000 > 15 ) {
data.views = views.count++; // views который справа за пределами функции?
data.lastView = now;
}
} else {
data.views = 2;
data.lastView = 1;
}
}
}
select A.*
from
(
SELECT d.id AS dialog_id,
d.date_latest_message,
(select max(DM.added_date)
from dialog_messages dm3
where dm3.dialog_id = dm.dialog_id
) as datetime_latest_message,
Dm.Id as Dm_Id,
DM.message,
DM.added_date
FROM dialogs d
join dialog_messages dm on DM.dialog_id = D.dialog_id
WHERE (select count(*)
from dialog_messages dm2
where dm2.dialog_id = dm.dialog_id
and dm2.id > dm.id -- по идент. будет эффективнее работать, чем по дате-время, к тому же первичный ключ, как правило, проиндексирован, не требуется доп. индексов
) < 3 -- берем только те сообщения, которые позднее опубликованы чем текущее (3 вышестоящих)
and DATE(d.date_latest_message BETWEEN) '2020-10-01' AND '2021-10-08'
) A
order by A.datetime_latest_message desc, A.Dm_Id desc
select A.*
from
(
SELECT
d.id AS dialog_id,
d.date_latest_message,
(select max(DM.added_date)
from dialog_messages dm3
where dm3.dialog_id = dm.dialog_id
) as datetime_latest_message,
Dm.Id as Dm_Id,
DM.message,
DM.added_date AS message_added_date,
row_number() over (partition by d.id -- окно счетчика в пределах идент. диалога
order by DM.Id desc -- направление сортировки счетчика
) dm_rownum -- счетчик для отсечения порций
FROM dialogs d
join dialog_messages dm on DM.dialog_id = D.dialog_id
WHERE DATE(d.date_latest_message) BETWEEN '2020-10-01' AND '2021-10-08'
) A
where A.dm_rownum <= 3 -- отсекаем нужное число "локальных" отсчетов
ORDER BY A.datetime_latest_message DESC, A.Dm_Id DESC
<script type="text/ваш-язык-программирования"></script>
Нужно ли фильтровать данные из _COOKIE, _HEADER, _SERVER,
к примеру
?query=
выдает модальное окошко если запустить $_SERVER['[REQUEST_URI']
<html>
<body>
?query=<script>alert('о, привет!'); </script>
</body>
</html>
$unsafe_string_for_html = "<script>alert('о, привет!'); </script>";
echo '<textarea>'.$unsafe_string_for_html.'</textarea>';
$unsafe_string_for_html = "<script>alert('о, привет!'); </script>";
$safe_string_for_html = htmlspecialchars($unsafe_string_for_html);
echo '<textarea>'.$safe_string_for_html.'</textarea>';
select mod_f1, replace(mod_f1, '.png', '.webp') as result_mod_f1,
mod_f2, replace(mod_f2, '.png', '.webp') as result_mod_f2
from table
/*update table
set mod_f1 = replace(mod_f1, '.png', '.webp'),
mod_f2 = replace(mod_f2, '.png', '.webp')*/
/*update table
set mod_f1 = replace(mod_f1, '.png', '.webp'),
mod_f2 = replace(mod_f2, '.png', '.webp')
where mod_f1 like '%.png%'
or mod_f2 like '%.png%'
LIMIT 1000 */
select p.endpoint_id,
p.mode_start as event_start,
(p.mode_start + p.mode_duration) as event_end,
sum(e.kwh) as sum_kwh
from periods p
join energy e on e.endpoint_id = p.endpoint_id -- связываем выставленный период для прибора с показаниями прибора
and p.mode_start <= e.event_time -- связывание начало периода с моментом замера
and (p.mode_start + p.mode_duration) > e.event_time -- связывание конца периода с моментом замера
group by p.endpoint_id, p.mode_start, (p.mode_start + p.mode_duration)
order by p.endpoint_id, p.mode_start
select e.endpoint_id,
p.mode_start as event_start,
(p.mode_start + p.mode_duration) as event_end,
sum(e.kwh) as sum_kwh
from energy e
left join periods p on e.endpoint_id = p.endpoint_id
and p.mode_start <= e.event_time
and (p.mode_start + p.mode_duration) > e.event_time
group by e.endpoint_id, p.mode_start, (p.mode_start + p.mode_duration)
order by e.endpoint_id,
p.mode_start nulls first -- ставим первой строкой сумму замеров с неучтенными значениями (в пределах одного прибора)
SELECT t1.ProductCode, t2.Name
FROM table_one as t1 -- t1 - краткий псевдоним таблицы table_one в пределах select-а
LEFT OUTER JOIN table_two as t2 -- t2 - краткий псевдоним таблицы table_two в пределах select-а
ON t2.id = t1.id_client;
Выделите ошибку и нажмите одновременно клавиши «Ctrl» и «Enter»
Есть роль А И B. Только роль A может начать чат с ролью B
Чат может содержать только 2х лиц
$max_cart_item_count = 500;
$curr_cart_item_count = min(count($_SESSION['cart']), $max_cart_item_count);
for($i = 0; $i < $curr_cart_item_count; $i++)
....
WHERE `type`= '$id'
$stmt = $conn->stmt_init();
$stmt->prepare("SELECT * FROM `items` WHERE `type` = ?"); // подставляем текст запроса, причем на месте входных параметров ставим специальные маркеры - плейсхолдеры.
$stmt->bind_param("i", $id); // подставляем на место плейсхолдера значение параметра как целочисленный тип
$stmt->execute(); // вот теперь можно выполнить запрос
$result = $stmt->get_result();
while($row = $result->fetch_assoc())
{
// Обработка результатов
}
btn_send.addEventListener('click',async() => {
let blob = await new Promise(resolve => canvasElem.toBlob(resolve, 'image/png'));
let formData = new FormData(); // Создаем объект формы для наполнения данными, словно мы работаем с тегом form в html.
formData.append('canvas_field', blob, 'canvas.png'); // это эквивалент тому, что в нашей html форме создаем поле input type="file" name="canvas_field" value="canvas.png" и прикрепляем туда содержимое blob (метод append сам расшаривает blob, дополнительных преобразований не требуется). Естественно, на DOM-дереве это никак не отразится, это модель формы в памяти JS.
let response = await fetch('web_tp_word.php', {
method: 'POST',
body: formData // для fetch не нужно дополнительных параметров, чтобы объяснить как работать с formData. Идеально, чтобы завернуть файл в форму и отправить на сервер.
});
});
var_dump($_FILES['canvas_field']); // Сервер при вызове скрипта сложит данные файла во временный файл, а как их получить - в $_FILES. Далее можно обрабатывать всеми теми способами, предназначенные для работы с $_FILES. И после уже неважно, как их сгенерировали на клиенте.
...args
arguments
какая из реализаций лучше?