PHP.SU

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

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

> Найдено сообщений: 1361
Саныч Отправлено: 19 Августа, 2013 - 19:29:43 • Тема: Формула процентов • Форум: Напишите за меня, пожалуйста

Ответов: 3
Просмотров: 50
Я со школы еще помню
1200 - 100%
1600 - х%
Отсюда: 1600 * 100 / 1200
Саныч Отправлено: 19 Августа, 2013 - 19:11:26 • Тема: Помогите с парсером • Форум: Напишите за меня, пожалуйста

Ответов: 1
Просмотров: 20
Добро пожаловать в раздел Freelance.
Саныч Отправлено: 19 Августа, 2013 - 18:12:29 • Тема: Проблема при создании динамического класса при использовании пространственных имен • Форум: Объектно-ориентированное программирование

Ответов: 28
Просмотров: 4290
0. у вас ошибка, именя переменных $obj и $odj
1. слеши перед AppC не нужны
2. потестил малость, вывод следующий: когда мы конкатенируем псевдоним, получаем ошибку Class not found, если же прописать сразу namespace, все ОК. Почему так, не знаю.

исправленый код:
PHP:
скопировать код в буфер обмена
  1. //use classes\app\controller as AppC;
  2. define ('ROOT',$_SERVER['DOCUMENT_ROOT'].'/');
  3. Autoload::runLoader();
  4. $class = 'classes\\app\\controller\\' . $_GET['cl'];
  5. $obj = new $class;
  6. echo $obj->_get();
  7. ?>
Саныч Отправлено: 19 Августа, 2013 - 17:36:41 • Тема: Проблема при создании динамического класса при использовании пространственных имен • Форум: Объектно-ориентированное программирование

Ответов: 28
Просмотров: 4290
qtk, полность код выложите, как пробовали
Саныч Отправлено: 19 Августа, 2013 - 17:33:11 • Тема: Регулярные выражения. Тренировки teddy • Форум: Регулярные выражения

Ответов: 43
Просмотров: 2608
PHP:
скопировать код в буфер обмена
  1. $tag = 'какой-то текст <span id="blbla" class="span">потом идет спан, a внутри еще и <a href="inedx.php">ссылка</a> есть</span> ну и дальше опять текст';
  2. preg_match("/([^<][a-z]+)\s([a-z=']+)(.*\w+)/i", $tag, $matches);
  3.  
  4. echo "<pre>";
  5. print_r($matches);
  6. echo "</pre>";

CODE (htmlphp):
скопировать код в буфер обмена
  1. Array
  2. (
  3.     [0] => span id="blbla" class="span">потом идет спан, a внутри еще и <a href="inedx.php">ссылка</a> есть</span> ну и дальше опять текс
  4.     [1] => span
  5.     [2] => id=
  6.     [3] => "blbla" class="span">потом идет спан, a внутри еще и <a href="inedx.php">ссылка</a> есть</span> ну и дальше опять текс
  7. )
Чет не то Улыбка
Саныч Отправлено: 19 Августа, 2013 - 16:00:57 • Тема: Регулярные выражения. Тренировки teddy • Форум: Регулярные выражения

Ответов: 43
Просмотров: 2608
Panoptik пишет:
ну и результат всунуть в регулярку
Ну только смысл тогда вобще регулрку использовать... Если мы так формируем массив, то сразу в теле и ищем эти кусочки в строке пароля. Кстати, вы забыли про этиже строки, но в реверсе.

Вобщем, я так и не придумал как это сделать в регулярке, кроме тупого перечисления вариантов.
Зато вот наваял класс, для проверки пароля, удовлетворяет всем поставленым условиям, плюс я еще от себя добавил проверку на присутствиие хотя бы одной цифры.
Оформил в виде класса, но можно конечно и в функцию все запихать.
PHP:
скопировать код в буфер обмена
  1. final class ValidPass
  2. {
  3.     private
  4.         $_pass   = '',
  5.         $_errors = array(
  6.             1    =>    'Длина меньше 6 символов',
  7.             2    =>    'Нет ни одной заглавной буквы',
  8.             3    =>    'Нет ни одной прописной буквы',
  9.             4    =>    'Нет ни одной цифры',
  10.             5    =>    'Нет ни одного специального символа',
  11.             6    =>    'Недопустимая последовательность символов'
  12.         ),
  13.         $_error  = 0,
  14.         $_isValid;
  15.    
  16.     public function __construct($pass) {
  17.         if (!is_string($pass)) {
  18.             trigger_error(__CLASS__ . ': Parameter 1 must be string, ' . gettype($pass) . ' given', E_USER_WARNING);
  19.         } else {
  20.             $this->_pass = $pass;
  21.         }
  22.     }
  23.    
  24.     public function isValid() {
  25.         if (is_null($this->_isValid)) {
  26.             $this->_isValid = $this->_validate();
  27.         }
  28.         return $this->_isValid;
  29.     }
  30.    
  31.     public function getError() {
  32.         return $this->_error ? $this->_errors[$this->_error] : '';
  33.     }
  34.    
  35.     private function _validate() {
  36.         $passLen = function_exists('mb_strlen') ? mb_strlen($this->_pass, 'UTF-8') : strlen($this->_pass);
  37.         if ($passLen < 6) {
  38.             $this->_error = 1;
  39.             return false;
  40.         }
  41.        
  42.         $bigLetter = $smallLetter = $integer = $symbol = false;
  43.         foreach (str_split($this->_pass) as $letter) {
  44.             $code = ord($letter);
  45.             $bigLetter = $bigLetter ?: $code > 64 && $code < 91;
  46.             $smallLetter = $smallLetter ?: $code > 96 && $code < 123;
  47.             $integer = $integer ?: $code > 47 && $code < 58;
  48.             $symbol = $symbol ?: ($code > 32 && $code < 48) || ($code > 57 && $code < 65)
  49.                 || ($code > 90 && $code < 97) || ($code > 122 && $code < 127);
  50.         }
  51.         if (!$bigLetter) {
  52.             $this->_error = 2;
  53.             return false;
  54.         }
  55.         if (!$smallLetter) {
  56.             $this->_error = 3;
  57.             return false;
  58.         }
  59.         if (!$integer) {
  60.             $this->_error = 4;
  61.             return false;
  62.         }
  63.         if (!$symbol) {
  64.             $this->_error = 5;
  65.             return false;
  66.         }
  67.        
  68.         $sequences = array('qwertyuiop', 'asdfghjkl', 'zxcvbnm', '1234567890', 'abcdefghijklmnopqrstuvwxyz');
  69.         for ($n = 0, $end = $passLen - 2; $n < $end; $n++) {
  70.             $str = strtolower(substr($this->_pass, $n, 3));
  71.             foreach ($sequences as $seq) {
  72.                 if (strpos($seq, $str) !== false || strpos($seq, strrev($str)) !== false) {
  73.                     $this->_error = 6;
  74.                     return false;
  75.                 }
  76.             }
  77.         }
  78.        
  79.         return true;
  80.     }
  81. }
  82.  
  83. $pass = new ValidPass('P@s$w0rd');
  84. var_dump($pass->isValid(), $pass->getError());

(Добавление)
EuGen пишет:
В том классе речь никогда не шла о красоте. Речь шла о том, чтобы работало.
Так я ж не спорю, все работает. Просто руками я напишу туже регулярку на много меньше и красивее. А вот код написать, который бы генерировал такой же результат как я руками пишу, у меня увы не получилось...
Саныч Отправлено: 19 Августа, 2013 - 15:17:54 • Тема: Помогите новичку ::-ohmy.gif:: • Форум: SQL и Архитектура БД

Ответов: 5
Просмотров: 41
Заголовки должны отправляться до вывода.
Саныч Отправлено: 19 Августа, 2013 - 15:05:42 • Тема: Помогите новичку ::-ohmy.gif:: • Форум: SQL и Архитектура БД

Ответов: 5
Просмотров: 41
Признавайтесь, F5 в браузере клацает?
Сделайте редирект на ту же самую страницу сразу после добавления данных в базу.
Саныч Отправлено: 19 Августа, 2013 - 14:54:45 • Тема: поменять местами ключи и значения в массиве... • Форум: Вопросы новичков

Ответов: 2
Просмотров: 170
Саныч Отправлено: 19 Августа, 2013 - 14:44:38 • Тема: Регулярные выражения. Тренировки teddy • Форум: Регулярные выражения

Ответов: 43
Просмотров: 2608
Panoptik пишет:
или же нужно проверять и такие как sdfg || werty || bcdef ?
Проверять нужно все. Видите любую последовательность на клавиатуре больше 2 символов, либо тоже самое, но в алфавите. Вот их не должно быть. Вот как этот момент организовать я пока не придумал, разве что тупо перечислением через или, но как-то многовато получится Улыбка
(Добавление)
teddy пишет:
Спасибо! я так понимаю | это как OR ? Т.е одно или другое?
Да.
(Добавление)
teddy пишет:
Я тут всем надоем
Да не, нормально. Я и сам не против лишний раз в регулярках покопаться. Нравятся они мне почему-то Улыбка
Саныч Отправлено: 19 Августа, 2013 - 14:38:46 • Тема: Хранение данных пользователя • Форум: Вопросы новичков

Ответов: 79
Просмотров: 3463
Squirrel пишет:
Вот только у тебя там прописан ручками SID. Подумай, где ты в реальной жизни брать будешь?
Вот если б вы читали, что пишут другие, то заметили б, что ID сессии пользователя пишется в базу. При удалении сначала зачитываем этот ID, потом грохаем запись в таблице.

Squirrel пишет:
То, что будет читаться файлик при каждом просмотре страниц с сессией, это нет ни что.
Размером он будет не больше килобайта, и жить будет в ОЗУ (в дисковом кеше).
Какая разница, какого он будет размера и где лежать. Сами подумайте, так мне нужно стартануть сессию и посмотреть, есть ли в ней запись, ну скажем token. Если есть - авторизуем пользователя. Все...
И теперь ваш вариант, стартуем сессию, смотрим, есть ли token, авторизуем пользователя, зачитываем файл, десериализуем, проверяем есть ли в нем этот ID, если есть, грохаем сессию, соответственно права пользователя нужно обновить, удалить этот ID из файла, сериализовать, записать обратно... Дохрена действий и так каждый раз...

Squirrel пишет:
Чисто теоретически, даже если есть протухший файл сессии, получить данные в нем содержащиеся нельзя.
С каког это перепуга? Специально для таких упертых как вы попробовал. Скопировал sess_id файла за 12 июля (ну предположим, что я записал это значение из куки когда-то). Теперь пишем куку с этим ID и вуаля, сервак возобновляет эту сессию. Естественно со всеми данными что в ней были.

Squirrel пишет:
И с уверенностью могу сказать, что у тя аппач под виндой стоит.
И что дальше? Это вобще никак к вопросу не относится.
Саныч Отправлено: 19 Августа, 2013 - 14:21:19 • Тема: Регулярные выражения. Тренировки teddy • Форум: Регулярные выражения

Ответов: 43
Просмотров: 2608
У меня как-то так получилось. Сейсас проверяет длину всейго пароля, минимум одна заглавная, минимум одна строчная буква, минимум один символ.
PHP:
скопировать код в буфер обмена
  1. $match = preg_match('#^(?:([a-z])|([A-Z])|([`~!@\#№$%^&*()\-_=+{}\[\];:|<>,\.?/])|.){6,}$#', $str, $matches);
  2. if ($match && !empty($matches[1]) && !empty($matches[2]) && !empty($matches[3])) {
  3.     echo 'valid';
  4. } else {
  5.     echo 'invalid';
  6. }


Хотя как по мне, регулярка тут вобще не нужна. Проще разбить строку на символы, а дальше уже по кодам символов посмотреть...
(Добавление)
teddy пишет:
планируют запретить следующим образом [^qwerty]
Не пойдет. Это значит: любой символ, кроме символов qwerty. К примеру строка test под этот шаблон уже не попадет, т.е. будет считаться невалидной
Саныч Отправлено: 19 Августа, 2013 - 13:24:38 • Тема: Хранение данных пользователя • Форум: Вопросы новичков

Ответов: 79
Просмотров: 3463
caballero пишет:
по идее PHP должен чистить
ну это по идее, на практики же лежит себе спокойно больше месяца

caballero пишет:
в этом плане удобно держать сессии в БД или мемкеше
и прибивать кроном
т.е. реализовывать свой механизм сессий...


Кстати, я выяснил причину такой живучести сессионных файлов. Оказывается в PHP5.5.0 значение директивы session.gc_divisor равно 1000. Вобщем GC запускался крайне редко.
Ради эксперимента прописал ini_set('session.gc_divisor', 100), раз 30 обновил страницу, не запустился, поменял на 10, с шестого обновления запустился, стер все кроме текущей сессии.
Для реального проекта, думаю 100 в самый раз. Хотя с хорошей посещаймостью и 1000 будет вполне нормально...
Саныч Отправлено: 19 Августа, 2013 - 12:42:02 • Тема: Запрос в базуку • Форум: Вопросы новичков

Ответов: 2
Просмотров: 129
ORDER BY что-то DESC
Саныч Отправлено: 19 Августа, 2013 - 12:32:15 • Тема: Оптимальное кол-во запросов на странице • Форум: Программирование на PHP

Ответов: 4
Просмотров: 440
landsturm, чем меньше, тем лучше. В идеале - ни одного.

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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB