Вот код.
При поиске _ и % выводит всё!
По стилю старался...

Конструкции такого вида $x=труляля($x);
$x = trim($x);
не работают.
Свернутый текст
PHP |
<?php |
Спустя 10 минут, 6 секунд (20.08.2009 - 20:39) Gabriel написал(а):
а кодировка как вручную выставляеться?
Цитата |
Èìÿ ïîëüçîâàòåëÿ: <iframe src="http://phpforum.ru" /> Äàòà ðåãèñòðàöèè ïîëüçîâàòåëÿ 19.08.2009 |
ато думаю такое мало кому понравиться увидеть у себя в браузере
Спустя 3 минуты, 24 секунды (20.08.2009 - 20:43) ANG3 написал(а):




У меня нормально оотображается. Щас посмотрю...
Спустя 5 минут, 53 секунды (20.08.2009 - 20:49) ANG3 написал(а):
В opere и IE 6 норм. Странно...
http://browsershots.org/http://regsearch.z...earch.php?id=71
Ща поправим.
http://browsershots.org/http://regsearch.z...earch.php?id=71
Ща поправим.
Спустя 1 минута, 10 секунд (20.08.2009 - 20:50) Gabriel написал(а):
ну у меня в ие7 вот такая вот беда.
в мозиле тож. в опере 9.6 норм.
в мозиле тож. в опере 9.6 норм.
Спустя 11 минут, 27 секунд (20.08.2009 - 21:01) ANG3 написал(а):
Вот блин. http://browsershots.org/ раз в сутки. Но вроде исправил. Заценивайте )
Спустя 1 час, 23 минуты, 26 секунд (20.08.2009 - 22:25) twin написал(а):
Запустить не смог чёто...
Из того что так увидел.
1. magic_quotes отработана не корректно. Функция mysql_real_escape_string() специально предназначена для использования в запросах, так что полагаться на магические кавычки не стоит. Лучше убрать последствия этой директивы, а функцию применить в любом случае.
2. Вот тут
Из того что так увидел.
1. magic_quotes отработана не корректно. Функция mysql_real_escape_string() специально предназначена для использования в запросах, так что полагаться на магические кавычки не стоит. Лучше убрать последствия этой директивы, а функцию применить в любом случае.
2. Вот тут
PHP |
mysql_select_db("$dbName") |
зачем переменная в кавычках?
3. Следующая строка. Нет проверки запроса, а он не проходит. Отсюда и проблемы с кодировками.
4. Чуть ниже. Вот это
3. Следующая строка. Нет проверки запроса, а он не проходит. Отсюда и проблемы с кодировками.
4. Чуть ниже. Вот это
PHP |
$date = date ('d.m.Y',mktime ()); |
прекрасно умеет делать мускул. Если поставить тип поля timestamp или использовать встроенную NOW()
5. Дальше. Нет обработки спецсимволов \ и %, их поиск некорректен.
6. Вот тут
PHP |
echo '<li> <a href = regsearch.php?id='.intval($row['ID']).'>'.clean($row['name']).'</a><br />'; |
почему то id в верхнем регистре. Не сработает.
7. Редирект. Заголовок отдается после вывода.
8. Возврат в форму не обработан. XSS не за горами.
Из плюсов.
1. Код читабелен, хотя местами не очень аккуратен. Стоит обратить внимание на подстановку переменных и фигурные скобки. Как то в одном стиле надо, а то ни рыба ни курица.
2. Комментарии. Это хорошая привычка.
3. Ну и самое главное - самостоятельность решений. Почет и уважение.
Спустя 7 минут, 22 секунды (20.08.2009 - 22:32) Soldier Ghost написал(а):
Сделай проверки у тебя пустоту регит
Спустя 21 час, 51 минута, 14 секунд (21.08.2009 - 20:23) ANG3 написал(а):
1. А как корректно сделать? Работает всё нормально. У меня это делалось через function adapting ($value). Объясни поподробнее.
2. Исправил.
3. Не знаю правильно ли я тебя понял, но сделал вот так
2. Исправил.
3. Не знаю правильно ли я тебя понял, но сделал вот так
PHP |
mysql_query("SET NAMES cp1251;") or die(mysql_error()); |
4. Поставил поле timestamp. Выводит неправилную дату.
Поэтому сделал Varchar / date ('d.m.Y H:i');
Расскажи подробнее про это.
5. Исправил.
6. Исправил.
7. Исправил.
8. Исправил. Хз правильно или нет.
Проверку сделал.
Код:
Свернутый текст
PHP |
<?php |
Спустя 58 минут, 56 секунд (21.08.2009 - 21:22) twin написал(а):
1. Функцию лучше написать так:
PHP |
function adapting ($value) |
3. Правильно понял. Точка с зпятой в запросе не нужна.
4. Что значит неправильную?
Ну и в остальном гут.

Вот это только:
Цитата |
/* Функция очищения данных от пробелов и тегов */ |
не то. Не очищает она от тегов, а переводит спецсимволы в эквиваленты. Это хоть и косметика, но дает представление о том, как ты понимаешь процессы.
Спустя 35 минут (21.08.2009 - 21:57) ANG3 написал(а):
Спасибо. Отличный урок.

Цитата |
4. Что значит неправильную? |
Вот в таком виде: 2019-08-20 09:00:00. Никогда не изменяется.
Сылка
Финальный код.
Свернутый текст
PHP |
<?php |
Спустя 15 минут, 1 секунда (21.08.2009 - 22:12) twin написал(а):
Дата в совершенно правильном формате. Самый логичный кстати. Называется азиатский. Когда все по убыванию, от года к секундам.
А не изменяется правильно, это же дата регистрации, а не часы)))
А не изменяется правильно, это же дата регистрации, а не часы)))
Цитата |
Спасибо. Отличный урок. |
Всегда пожалуйста))
Спустя 2 часа, 47 минут, 36 секунд (22.08.2009 - 01:00) ANG3 написал(а):
Про бекслеш то я забыл...
Попробовал это:

Попробовал это:
PHP |
$word = str_replace('\\', '\\\\', $word); // Сначала заменять один слеш на два, с помощью такого |
Я вообще непонимаю смысла этого. + пошли косяки. Например SQL ошибка при поиске '. И ещё что-то было. В голове не удержал всего.
Сделал так:
PHP |
$search = addcslashes($search, "'\%_"); |
Всё вроде работает. Есть только одна проблема. Возврат в форму выполняется с экранированными \ и '. Вместо " выводится \. Может быть вернуть чистую переменную?
От этой конструкции пришлось отказаться.
PHP |
function adapting ($value) |
Незнаю почему, но на хостинге скрипт не работает с ней, на локальном норм.
Уже запутался со всем этим экранированием.

Нужно ли вообще экранировать то, что возвращается в форму?
Больше никаких багов не нашёл. Пожалуйста потестите мой скрипт по сылке.
Вот код

Свернутый текст
PHP |
<?php |
Спустя 6 часов, 11 минут, 42 секунды (22.08.2009 - 07:12) twin написал(а):
Цитата |
Всё вроде работает. Есть только одна проблема. Возврат в форму выполняется с экранированными \ и '. Вместо " выводится \. Может быть вернуть чистую переменную? |
Вот условия задачи я специально подбирал так, что бы решив её, можно было разобраться, где и как нужно применять функции. Что бы было все корректно.
На самом деле все очень просто и прозаично, но почему то начинающие программисты пытаются все усложнить, стараясь изобрести велосипед. Лень конечно двигатель прогресса, но не всегда. И это как раз тот случай.
Не нужно пытаться сделать все одним махом. Вот это:
PHP |
function adapting ($value){ |
в корне не верное решение, отсюда и все проблемы. Функция mysql_real_escape_string() предназначена для экранирования литеральных констант для подстановки в MySQL запросы. А не для обработки всех входящих данных. По этому и работать должна в запросх, и нигде иначе.
Вот посмотри, как сделал бы я на твоем месте (начиная с кодировки и заканчивая применением функций:
Комментировать не стал, найди сам 10 отличий
По поводу
Вот посмотри, как сделал бы я на твоем месте (начиная с кодировки и заканчивая применением функций:
Свернутый текст
PHP |
<?php |
Комментировать не стал, найди сам 10 отличий

По поводу
Цитата |
Незнаю почему, но на хостинге скрипт не работает с ней, на локальном норм. |
даже не знаю что сказать. Вообще этого не должно быть в принципе. Посмотри внимательно еще раз.
Вообще эта функция должна выглядеть несколько иначе, так как обрабатывать нужно все данные, поступающие из $_POST $_GET И $_COOCIE А там могут быть и массивы. П этому лучше сделать так:
Вообще эта функция должна выглядеть несколько иначе, так как обрабатывать нужно все данные, поступающие из $_POST $_GET И $_COOCIE А там могут быть и массивы. П этому лучше сделать так:
PHP |
function adapting ($value){ |
И работать должно везде, не знаю что за хостинг у тебя такой...
Спустя 7 минут, 17 секунд (22.08.2009 - 07:19) twin написал(а):
Не пойму что случилось с форумом, почему то не хочет правильно форматировать.... Кстати говоря, на этом форуме как раз и перевернуто все с ног на голову
. Может как раз и по этому.


Спустя 5 часов, 23 минуты, 38 секунд (22.08.2009 - 12:42) ANG3 написал(а):
Отлично! Почти всё понял!
Пара вопросов...
1. Для чего экранировать все кавычки? Пока оставил по-старому, ибо мой DreamWeaver всё выделяет красным, очень путает.
2. Что это за такие символы '\%_ ? Судя по коду они прослешиваются аш 2 раза, но код выполняется правильно.

Пара вопросов...
1. Для чего экранировать все кавычки? Пока оставил по-старому, ибо мой DreamWeaver всё выделяет красным, очень путает.
2. Что это за такие символы '\%_ ? Судя по коду они прослешиваются аш 2 раза, но код выполняется правильно.
PHP |
$search = addcslashes($search, "'\%_"); // 1 раз |
3. Единственный баг, который я обнаружил - кавычка " ищется, но в форму не возвращается.
Спустя 10 часов, 27 минут, 42 секунды (22.08.2009 - 23:10) ANG3 написал(а):
Кстати, из-за mb_strlen кусок кода с регистрацией не работал. Кодировку в этой функции обязательно указывать нужно?
Спустя 8 часов, 54 минуты, 7 секунд (23.08.2009 - 08:04) twin написал(а):
Цитата |
1. Для чего экранировать все кавычки? Пока оставил по-старому, ибо мой DreamWeaver всё выделяет красным, очень путает. |
Это не я, это форум заэкранировал, я и написал, что все испортилось. Думал догадаешься)))
Цитата |
2. Что это за такие символы '\%_ ? Судя по коду они прослешиваются аш 2 раза, но код выполняется правильно. |
Это спецсимволы, которые участвуют в SQL-запросах. По этому, чтобы они воспринимались как просто символы, а не спец-символы, их и нужно экранировать. То есть к примеру \ воспринимается как защитный слэш и SQL видит его как команду, а \\ воспринимается как экранированный слэш. То есть первый воспринимается как экран, а вотрой уже как сущность. Так же и с процентом. % с оператором LIKE воспринимается как команда (любой символ), а \% как просто символ %.
Цитата |
3. Единственный баг, который я обнаружил - кавычка " ищется, но в форму не возвращается. |
Тут просто я недосмотрел. У тебя в форме не та функция для обработки. Надо так:
HTML |
<input type='text' name='search' size='40' value=\"<?php echo clean($_GET['search']); ?>\"> |
Цитата |
Кстати, из-за mb_strlen кусок кода с регистрацией не работал. Кодировку в этой функции обязательно указывать нужно? |
Я не работаю с windows-1251, только с utf-8. А для корректной работы с ней нужно mb_strlen(); Кодировку можно указать один раз в начале скрипта для всех функций,
PHP |
mb_internal_encoding('utf-8'); |
либо указывать прямо в самой функции
PHP |
mb_strlen($regname,'utf-8'); |
Спустя 3 часа, 36 минут, 6 секунд (23.08.2009 - 11:40) ANG3 написал(а):
Спс. Теперь точно всё понятно. А в возврате в форму я сам не то сделал.
Там функция стаяла adapting (это даля магических кавычек), а нужно было
Там функция стаяла adapting (это даля магических кавычек), а нужно было
PHP |
value ="<?php echo clean($_GET['search']; ?>"> |
(htmlspecialchars). Кавычка экранируется и выходит как значение между
value =""
А с этими кодировками что-то не получилось. Хотел изначально utf-8 ставить. Но что-то не вышло. Как-нибудь займусь.
Спустя 2 часа, 16 минут, 43 секунды (23.08.2009 - 13:57) ANG3 написал(а):
Решил поставить функцию:
PHP |
function adapting ($value){ |
Не могу понять, return stripslashes($value); происходит только в том случае, если $value не массив?
Если массив, то получается, что return stripslashes($value); не происходит, или
return возвращает значение независимо от условий и тд?
Спустя 12 минут, 28 секунд (23.08.2009 - 14:10) twin написал(а):
Это называется рекурсия. То есть функция будет вызывать сама себя, пока не кончится массив. Так она доберется до всех членов и по порядку их обстрипслэшет)))
Спустя 9 часов, 17 минут, 28 секунд (23.08.2009 - 23:27) ANG3 написал(а):
Почти понятно
Времени нет разобраться. Уезжаю на 2 недели
Ещё подниму эту тему

Времени нет разобраться. Уезжаю на 2 недели

Ещё подниму эту тему
