PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (20): « 1 2 [3] 4 5 6 7 8 9 ... » В конец

> Найдено сообщений: 298
Deonis Отправлено: 23 Июля, 2015 - 23:13:59 • Тема: Ошибка Uncaught TypeError • Форум: JavaScript & VBScript

Ответов: 6
Просмотров: 1083
Alex213 пишет:
.circle<?=$row_s['nom']?>
Alex213 пишет:
d.querySelectorAll('.circle<?=$row_s['nom']?>')
Alex213 пишет:
data-action<?=$row_s['nom']?>="add"

Шок Это что было? Я даже не знаю, как реагировать на такой код. Вы всегда смешиваете всё в кучу: php, html, css, js...? Зачем вам нужно добавлять какие-то значения $row_s['nom']?
Deonis Отправлено: 23 Июля, 2015 - 10:35:21 • Тема: Ошибка Uncaught TypeError • Форум: JavaScript & VBScript

Ответов: 6
Просмотров: 1083
Alex213 пишет:
как можно исправить?
Насколько я вижу, это часть кода, который я вам писал в предыдущей вашей теме. Переменной "act" присваивается значение или "add", или "remove", которые берутся из data-атрибутов кнопок и используются в качестве имени метода. Скорее всего, что вы или же изменили эти значения, или вообще убрали атрибут data-, в следствии чего и возникла ошибка.
Deonis Отправлено: 22 Июля, 2015 - 01:42:31 • Тема: как получить имя видео • Форум: Программирование на PHP

Ответов: 5
Просмотров: 654
Andrian24 пишет:
не работает
И не будет работать, т.к. прекращена поддержка YouTube Data API версии 2. Теперь нужно использовать третью версию API. Если лень разбираться, то можно, конечно, решение "в лоб". Только на мой взгляд, грузить всю страницу ради одного названия - это бред.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. // страница нужного видео
  3. $url = 'https://www.youtube.com/watch?v=-OgTUioO4ZA';
  4.  
  5. $html = file_get_contents($url);
  6. $dom = new DomDocument();
  7. $dom->loadHTML('<?xml version="1.0" encoding="UTF-8"?>'. $html);
  8. $title = $dom->getElementById('eow-title');
  9. echo $title->nodeValue; // Про власть 2011 HD [18+]  
Deonis Отправлено: 22 Июля, 2015 - 00:58:12 • Тема: Слайд шоу • Форум: Вопросы новичков

Ответов: 4
Просмотров: 250
Mongrel, первое, что нужно делать в таких случаях - это заглянуть в консоль. Возможно, что вы там обнаружите какие-то ошибки или предупреждения.

P.S.
Mongrel пишет:
я понимаю так что php код не видит функцию java

Java !== JavaScript. Ну и тут такая печальная история, что PHP и JavaScript никогда друг друга не увидят, т.к. один работает на клиенте, а другой на сервере.
Deonis Отправлено: 21 Июля, 2015 - 22:12:01 • Тема: Как выделить все? • Форум: JavaScript & VBScript

Ответов: 13
Просмотров: 1289
Alex213 пишет:
отдельно бы кнопку отменить выделение
То есть, вы хотите две кнопки? Смотрим пример в песочнице
CODE (html):
скопировать код в буфер обмена
  1. <span class="circle"></span>
  2. <span class="circle"></span>
  3. <span class="circle"></span>
  4. <button data-action="add">Вкл.</button>
  5. <button data-action="remove">Выкл.</button>

CODE (javascript):
скопировать код в буфер обмена
  1. var d = document;
  2. d.addEventListener('DOMContentLoaded', function () {
  3.     var cirles = [].slice.call(d.querySelectorAll('.circle'));
  4.  
  5.     [].forEach.call(d.querySelectorAll('button'), function (but) {
  6.         but.addEventListener('click', function () {
  7.             var act = this.dataset.action;
  8.             cirles.forEach(function (el) {
  9.                 el.classList[act]('active');
  10.             });
  11.         }, false);
  12.     });
  13.    
  14.     cirles.forEach(function (el) {
  15.         el.addEventListener('click', toggleCirсleClass);
  16.     });
  17.  
  18.     function toggleCirсleClass() {
  19.         this.classList.toggle('active');
  20.     }
  21.  
  22. }, false);
Ахтунг! Обратите внимание на то, что свойство dataset не работает в осле ниже 11-ой версии. Если нужно учитывать и более старые версии, то измените:
CODE (javascript):
скопировать код в буфер обмена
  1. // эту строку
  2. var act = this.dataset.action;
  3. // на эту
  4. var act = this.getAttribute('data-action');
Deonis Отправлено: 21 Июля, 2015 - 17:34:19 • Тема: Как выделить все? • Форум: JavaScript & VBScript

Ответов: 13
Просмотров: 1289
Во-первых, нет смысла для такой задачи использовать изображения. Во-вторых, не ясно, что должно происходить при повторном нажатии на кнопку. В-третьих, месяц назад уже утвердили ES6, а вы события устанавливаете по старинке. В-четвертых, Viper и Tyoma5891 вам показывали варианты с использованием jQuery, хотя и не понятно почему, если ваш код указывает на то, что вы используете ванилу.
В общем, пока покажу вам такой вариант, где повторный клик переключает состояние кружков. А если уточните вопрос, то подкорректируем:
CODE (html):
скопировать код в буфер обмена
  1. <span class="circle"></span>
  2. <span class="circle"></span>
  3. <span class="circle"></span>
  4. <button id="toggle">Toggle</button>

CODE (css):
скопировать код в буфер обмена
  1. .circle {
  2.     display: inline-block;
  3.     width: 100px;
  4.     height: 100px;
  5.     background: #999;
  6.     border-radius: 50%;
  7. }
  8. .active {
  9.     background: #333;
  10. }

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var d = document;
  3. d.addEventListener('DOMContentLoaded', function () {
  4.      var but = d.getElementById('toggle'),
  5.          cirles = d.querySelectorAll('.circle');
  6.      but.addEventListener('click', function () {
  7.          [].forEach.call(cirles, function (el) {
  8.              el.classList.toggle('active');
  9.          });
  10.      }, false);
  11.  }, false);


P.S. На всякий случай, вот пример и с кликом на сами кружки.
CODE (javascript):
скопировать код в буфер обмена
  1. var d = document;
  2. d.addEventListener('DOMContentLoaded', function () {
  3.      var but = d.getElementById('toggle'),
  4.          cirles = [].slice.call(d.querySelectorAll('.circle'));
  5.      but.addEventListener('click', function () {
  6.          cirles.forEach(function (el) {
  7.              toggleCirсleClass.call(el);
  8.          });
  9.      }, false);
  10.      
  11.      cirles.forEach(function(el){
  12.          el.addEventListener('click', toggleCirсleClass);
  13.      });
  14.      
  15.      function toggleCirсleClass(){
  16.          this.classList.toggle('active');
  17.      }
  18.      
  19.  }, false);
Deonis Отправлено: 21 Июля, 2015 - 14:27:51 • Тема: Выбор записей за сутки с 10:00 до 10:00 • Форум: SQL и Архитектура БД

Ответов: 0
Просмотров: 17
Приветствую, господа! Появилась задачка, которую без проблем можно решить, если некоторые расчеты производить в php, но стало интересно организовать это всё в самом запросе.
Предположим, что смена сотрудника длится с 10-ти утра текущего до 10-ти утра следующего дня. Необходимо вытащить записи за текущую смену и естественно опираясь на текущее время (что-то дофига слов "текущий" Радость ). К примеру, если сейчас >= 10 часов, то выбрать в диапазоне от 10:00 текущего дня, до 10:00 завтрашнего. Если сейчас < 10 часов, то с 10:00 прошлого дня, до 10:00 текущего.
Повторюсь, что на php это решается достаточно просто и всего парой строк, но как по уму организовать эти условия и проверки в самом запросе? Пока дошёл до такого варианта, но что-то он мне не особо нравится:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `some_table`
  2. WHERE
  3.   `datetime_field`
  4. BETWEEN
  5.  
  6. CASE
  7. WHEN
  8.   HOUR( NOW( ) ) >= 10
  9. THEN
  10.   DATE_FORMAT(CURDATE(), '%Y-%m-%d 10:00')
  11. ELSE
  12.   DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -1 DAY), '%Y-%m-%d 10:00')
  13. END
  14.  
  15. AND
  16.  
  17. CASE
  18. WHEN
  19.   HOUR( NOW( ) ) >= 10
  20. THEN
  21.   DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d 10:00')
  22. ELSE
  23.   DATE_FORMAT(CURDATE(), '%Y-%m-%d 10:00')
  24. END
Deonis Отправлено: 26 Мая, 2015 - 16:27:54 • Тема: Организация безопасности на сайте • Форум: HTTP и PHP

Ответов: 8
Просмотров: 1617
Мелкий пишет:
работа только через TLS
С этим я уже успел познакомиться и знаю, что рекомендуется TLS1.1, TLS1.2 и исключить SSLv3 и ниже, и некоторые советуют даже TLS1.0
И спасибо за ответы.
Deonis Отправлено: 26 Мая, 2015 - 15:45:29 • Тема: Организация безопасности на сайте • Форум: HTTP и PHP

Ответов: 8
Просмотров: 1617
Мелкий пишет:
Раскатайте VPN
Думаю, что этот вариант не подойдет в конкретно этом случае. Но за время, пока я задал вопрос, кое-что изменилось, а именно то, что похоже я убедил в необходимости использования SSL. Тогда остаётся вопрос в том, а нужно ли что-то менять в той схеме аутентификации, которая существует, если использовать SSL ? Насколько я понимаю, то в хэшировании на стороне клиента уже необходимости нет. Нормально ли хранить в сессии случайно сгенерированный хэш, который будет служить для идентификации пользователя и использовать этот же хэш в качестве токена - нет ли тут проколов? И вообще, может что-то желательно добавить или убрать?
Мелкий пишет:
Баз кропотливого анализа кода ничего не говорит.
До изучения этого вопроса пока не дошёл, но поверхностный анализ "пациента" показал, что всё нормально. Данные обрабатываются фильтрующими функциями (filter_input, filter_input_array), используются плейсхолдеры и т.д.
Мелкий пишет:
Пароли шифроваться не должны. Пароли должны хэшироваться.
Просто неправильно подобрал слово ;)
Deonis Отправлено: 26 Мая, 2015 - 13:38:11 • Тема: Организация безопасности на сайте • Форум: HTTP и PHP

Ответов: 8
Просмотров: 1617
Всем привет! Как-то не особо углублялся в вопросы безопасности, но сейчас появилась задача, которая толкает в этом направлении. Материалы, которые находил в сети, или же писались лет пять назад, или противоречивы, или не затрагивают важных вопросов. Посему, хочу посоветоваться с сообществом.
Опишу конкретную ситуацию. Попросили меня поработать над безопасностью одного проектика:

  • Есть уже работающая, небольшая и самописная CRM-системка. Как я понимаю, начинали её писать давненько и дорабатывалась разными людьми.
  • Работает по http-протоколу
  • Сайт не для общественного пользования, не имеет открытой системы регистрации. (босс конторы сам заводит аккаунты сотрудников)
  • Пароли шифруются по алгоритму CRYPT_BLOWFISH
  • PDO - для работа с БД
  • После аутентификации, генереруется случайный хэш, который записывается в БД, сессию и на клиенте в localStorage для добавления ко всем ajax-запросам (в качестве токена). При кадом запросе хэши сверяются.
  • На сайте единая точка входа.
  • 99% запросов передаются с помощью Ajax и только методом POST, а всего 15 - GET-запросом. POST-запросы без Ajax-а - блокируются.
Я понимаю, что SSL или авторизация по СМС - это лучшие вариант, но задача состоит в том, чтоб найти альтернативные варианты. Да и сверхсложной системы безопасности там не нужно - нет банковских операций, нет личных данных пользователей или данных о счетах. Видел решения с шифрованием пароля на стороне клиента. Я может ошибаюсь, но если это обратимое шифрование, то какой от него толк?
В общем, посоветуйте как, можно услить безопасность:
1) Какие есть ощутимые уязвимости из того, что я описал выше?
2) Как можно защитить передачу пароля от клиента на сервер.
3) Как идентифицировать пользователя поле того, как аутентификация пройдена.
4) Что нужно хранить в сессиях и нужно ли проверять пользователя при каждом запросе.
Честно говоря, от избытка информации за последние два дня, я уже запутался. Интересует практически всё по этому вопросу, т.к. даже те знания, которые у меня были по безопасности, уже под сомнением.
Вопрос этот, я уже поднимал на другом форуме, но вразумительно ответа, кроме как - "только SSL" - я не получил.
Deonis Отправлено: 03 Февраля, 2015 - 14:57:40 • Тема: Приоритет настроект php.ini • Форум: Apache и другие веб-серверы

Ответов: 4
Просмотров: 894
esterio пишет:
зачем вам тогда апач если у вас ПХП работает в режиме CGI?
Досталось, так сказать, в наследство )) Сейчас что-то менять глобально нет возможности. На сервере работают 23 сайта, которые куда-то переселять на время реорганизации - это большой геморой.
esterio пишет:
такие вызовы ка eval без сухосина вам не запретить
Речь пока идет не о каких-то отдельных настройках или закрытии дыр, а о конфигурации в целом. А за Suhosin спасибо, почитаю.
Ch_chov пишет:
Врядли получится, потому что конфигурация считывается только из одного php.ini файла.
Тут вы ошибаетесь. В том способе, который я пока использую, у меня сканируются все конфиги из директории "php.d", а затем пользовательские. Настройки читаются из обоих файлов, но общий перекрывает директивы пользовательские.
Ch_chov пишет:
выставлять значения некоторых php параметоров в настройках nginx
Да, думал о таком варианте, но это не оптимально.
Deonis Отправлено: 03 Февраля, 2015 - 14:16:30 • Тема: Приоритет настроект php.ini • Форум: Apache и другие веб-серверы

Ответов: 4
Просмотров: 894
Приветствую! Для начала, общая инфа:
1. Centos 6.5
2. Nginx 1.6.2 (front-end) + Apache 2.2.15 (back-end)
3. PHP 5.4.33 - в режиме CGI
4. ISPManager 4

Суть проблемы:
У каждого виртуального хоста, есть свой пользовательский php.ini (в общем, это и так понятно), в котором по умолчанию описаны две директивы: sendmail_path и session.save_path. В глобальном php.ini ("/etc/php.ini"), прописал все общие необходимые настройки. Однако, эти настройки не подхватываются. К примеру, прописал я для "disable_functions" список функций в общем php.ini, рестартонул Apache и на любом виртуальном хосте, та же функция exec() выполнится без проблем. Если директиву прописать в пользовательском файле php.ini, то всё отрабатывает как и полагается.

Как решил на данном этапе:
Создал файл php.ini в директории "php.d", где и прописал все необходимые директивы, которые распространяются на все хосты.

Что не устраивает:
Приоритет php.ini в директории "php.d" имеет приоритет выше, чем пользовательский. Да, если смотреть относительно той же директивы "disable_functions", то это можно считать плюсом, но в большей степени - это всё же минус. К примеру, в общих настройках, я укажу временную зону Гондураса. Тогда юзер уже не сможет эту зону изменить в своём php.ini.

Что хотел бы иметь в идеале
Собственно, обратную приоритетность. То есть, если в пользовательском php.ini не прописана какая-то директива, то она подхватывается из общего php.ini, а если директива прописана у юзера, то именно она вступает в силу.
Буду признателен, если кто-нибудь подскажет, как это лучше сделать.
Deonis Отправлено: 21 Мая, 2014 - 17:37:21 • Тема: Оптимизировать SQL-запрос • Форум: SQL и Архитектура БД

Ответов: 2
Просмотров: 32
EuGen пишет:
то есть, так как мы делаем JOIN, это условие будет излишне
Спасибо! Вот то, что я упустил из виду. А я дурень его лепил вторым условием в JOIN
EuGen пишет:
начиная с версии 5.6 (возможно, даже 5.5) СУБД автоматически преобразует его в соответствующий JOIN
За это отдельное спасибо, т.к. не знал Улыбка
Deonis Отправлено: 21 Мая, 2014 - 17:24:01 • Тема: Оптимизировать SQL-запрос • Форум: SQL и Архитектура БД

Ответов: 2
Просмотров: 32
Всем привет! Для упрощения, взял абстрактную задачу, аналогичную существующей.
1. Есть таблица с заказами, в которой каждый заказ привязан к менеджеру
2. Вторая таблица - содержит записи ID-заказа и ID-менеджера, которые должны игнорироваться.
Нужно: Выбрать из талицы заказов те записи, которые есть у определенного менеджера, но которых нет в таблице с игнорируемыми заказами у этого же менеджера.
Пример закинул в песочницу (url с хешем "режется" на форуме, посему ссылка TinyURL), где есть два менеджера и для первого (с ID = 1), есть два заказа, которые не должны учитываться при выборке.
На данный момент, есть запрос, который исправно работает, но хотелось бы оптимизировать:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `orders` WHERE `ord_id` NOT IN (
  2.   SELECT `o_id` FROM `ignore_orders` WHERE `m_id` = ?
  3. ) AND `manager_id` = ?
Где в плейсхолдер (?) подставляется ID менеджера.
Толи я не выспался, толи что-то у меня сегодня с руками, но через JOIN переделать запрос не получается. Буду признателен, если подтолкнете в нужном направлении.
Deonis Отправлено: 23 Марта, 2014 - 14:03:29 • Тема: NOW() - INTERVAL 1 DAY vs NOW() + INTERVAL -1 DAY • Форум: SQL и Архитектура БД

Ответов: 1
Просмотров: 28
Всем привет!
При построении запросов в обоих случаях:
CODE (SQL):
скопировать код в буфер обмена
  1. ... NOW() - INTERVAL 1 DAY ...
  2. /* и */
  3. ... NOW() + INTERVAL -1 DAY ...
вроде бы разницы нет, но просто для успокоения души - есть ли подводные камни в использовании того или иного, может для определенной версии мускула важно использовать конкретный синтаксис? В документации не нашел каких-то предостережений, но мог и проморгать.

Страниц (20): « 1 2 [3] 4 5 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB