Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 571
от 17.01.2007, 05:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 394, Экспертов: 52
В номере:Вопросов: 4, Ответов: 9


Вопрос № 70437: здраствуйте. не как не могу разобраться с mod_refwrite. Предположим у меня такие ссылки http://site.com/index.php?page=autor и http://site.com/article.php?art=150, как мне первую преобразовать в вид http://site.com/autor.html a вторую в http://site.c...
Вопрос № 70494: Привет всем.Вот вопрос,не могу решить. Есть такой код, который выделяет слово серым цветом. $output=preg_replace('/(([[:space:]]|,|.|?|!)'.$_SESSION['FindWhat'].'([[:space:]]|,|.|?|!))/','<span style=""background-color:" #A9A9A9"&g...
Вопрос № 70523: Пишу в продолжение поднятой темы о голосованиии. Структура таблиц: 1) poll_name таблица "заголовки голосований(сами вопросы)" id - int(11) auto_increment primary key name - varchar(50) 2) poll_punkt табл...
Вопрос № 70545: Здравствуй, уважаемый All! Подскажите, пожалуйста, где можно толково почитать про безопасность в языке PHP? Про "подводные камни", различные ошибки, уязвимости, особенно при проектировании скриптов, связанных с обработкой форм и работой...

Вопрос № 70.437
здраствуйте. не как не могу разобраться с mod_refwrite. Предположим у меня такие ссылки http://site.com/index.php?page=autor и http://site.com/article.php?art=150, как мне первую преобразовать в вид http://site.com/autor.html a вторую в http://site.com/article_150.html. Спасибо
Отправлен: 11.01.2007, 10:16
Вопрос задал: Маторник Михаил (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Cimus
Здравствуйте, Маторник Михаил!
Тут Вы найдёте описание http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html#Solutions
http://apachedev.ru/2006/07/31/mod_rewrite-preobrazovanie-dinamicheskih-url-v-staticheskie/.

А это пример файла .htaccess
# Запуск mod_rewrite
Options +FollowSymLinks
RewriteEngine on
#
# Внутренние преобразования статических URL в динамические
RewriteRule ^(autor).html?$ index.php?page=$1 [L]
RewriteRule ^article_([0-9]+).html?$ article.php?art=$1 [L]

---------
Достичь можно любых высот !
Ответ отправил: Cimus (статус: Студент)
Ответ отправлен: 11.01.2007, 12:02


Вопрос № 70.494
Привет всем.Вот вопрос,не могу решить. Есть такой код, который выделяет слово серым цветом.
$output=preg_replace('/(([[:space:]]|,|.|?|!)'.$_SESSION['FindWhat'].'([[:space:]]|,|.|?|!))/','<span style=""background-color:" #A9A9A9">\1</span>',$output);
Тут все работает, но мне нужно обрезать первый и последний символ слова, примерный код такой должен быть:
$output=preg_replace('/(([[:space:]]|,|.|?|!)'.$_SESSION['FindWhat'].'([[:space:]]|,|.|?|!))/','<span style=""background-color:" #A9A9A9">'.substr('\1',1,strlen('\1')-1).'</span>',$output);//примерный код
Вот тут и проблема, функция substr не работает, как и другая функция тоже не вызывается нормально, хотя в примере
preg_replace ("/(</?)(w+)([^>]*>)/e","'\1'.strtoupper('\2').'\3'",$html_body); функция strtoupper работает. Кто может помочь?
Отправлен: 11.01.2007, 16:39
Вопрос задал: Шапошников Игорь Олегович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Барков Илья Андреевич
Здравствуйте, Шапошников Игорь Олегович!
Господи, сколько всего. зачем так много?
я бы просто вырезал первую и последнюю букву в найденном слове и раскрасил.
тупо разрезать слово, потом конкатенировать.
Ответ отправил: Барков Илья Андреевич (статус: 6-ой класс)
Ответ отправлен: 11.01.2007, 17:27
Оценка за ответ: 1
Комментарий оценки:
Дело в том, что это часть кода, которое выделяет слово в тексте после поиска, а перед и до слова может быть и точка, и запятая и пробел и.т.д. Как вырезать первый и последний символ я знаю, мне нужно конкретно решить эту задачу,а не писать что лучше, что хуже,я привожу только одну строчку,а не целую программу

Отвечает: Загиров Рустам
Здравствуйте, Шапошников Игорь Олегович!
Для таких целей предназначенна функция preg_replace_callback. В качестве 2 параметра передаётся имя функции, которое возвращает значение текста для замены. Этой функции в качестве одно параметра передаётся массив карманов.
Создаем функцию, которая закрашивает слово и удаляет первую и последнюю букву.

Приложение:

---------
Этот мир обречён на нас
©Сергей Маврин

Ответ отправил: Загиров Рустам (статус: Специалист)
Ответ отправлен: 12.01.2007, 01:28

Отвечает: HookEst
Здравствуйте, Шапошников Игорь Олегович!
Чтобы preg_replace интерпретировал текст замены как PHP Code, нужен модификатор e(ex: "/word/e"),
но в Вашем случае можно поступить проще:

переставив подмаски(круглые скобки)
preg_replace('/([[:space:]]|,|.|?|!)('.$_SESSION['FindWhat'].')([[:space:]]|,|.|?|!)/','\1<span style=""background-color:" #A9A9A9">\2</span>\3',$output);

или используя границу слова
preg_replace('/('.$_SESSION['FindWhat'].')/','<span style=""background-color:" #A9A9A9">\1</span>',$output);
Ответ отправил: HookEst (статус: Студент)
Ответ отправлен: 12.01.2007, 08:29


Вопрос № 70.523
Пишу в продолжение поднятой темы о голосованиии.

Структура таблиц:

1) poll_name таблица "заголовки голосований(сами вопросы)"

id - int(11) auto_increment primary key
name - varchar(50)
2) poll_punkt таблица "пункты к вопросам"

id - int(11) auto_increment primary key
id_name int(11)
punkt - varchar(50)
3) poll_answer таблица "голосовавших"

id - int(11) auto_increment primary key
answer - varchar(50)
ip - varchar(15)

Связи :
poll_name.id -> poll_punkt.id_name 1:M (один ко многим)
poll_punkt.id -> poll_answer.answer 1:M (один ко многим)

........................................................................

Необходимо задать такой запрос, который бы определял, есть ли совпадающие
1)
значения поля poll_punkt.id_name соответствующие равным полям таблиц poll_punkt.id и poll_answer.answer , где poll_answer.ip равен ip '111.1.1.1'(к примеру).
И
2)значения поля poll_punkt.id_name соответствующие равным полям таблиц poll_punkt.id и poll_answer.answer , где poll_answer.answer равен номеру ответа пришедшего от пользователя(из формы голосования).

Это нужно сделать в одном запросе. Я сделал это в 2 запроса, пришлось парсить первый запрос потом полученное передавать во второй. разнесло всё строк на 10 и обращений 2 к базе. Нужно это сделать в один запрос. Таблицы простейшие. На то, чтобы сделать в один запрос я потратил часов 5! и никак. Таблицы созданы по классической схем голосования, предложенной мне ранее вами.

Это всё нужно, чтобы проверить голосовал ли человек или нет и потом соответсвенно на это отреагировать.

Отправлен: 11.01.2007, 19:34
Вопрос задал: PetrKi. (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Загиров Рустам
Здравствуйте, PetrKi.!
Я предлагаю такую структуру. Вот так я вижу таблицы:
1) poll_vote Вопросы
vote_id - int(11) auto_increment primary key
vote_name - varchar(50)

2) poll_anwer пункты к вопросам
answer_id - int(11) auto_increment primary key
vote_id int(11)
answer_name - varchar(50)

3) poll_logs голосовавшие
log_id - int(11) auto_increment primary key
answer_id - int(11)
ip - varchar(15)
stamp - timestamp

А узнать про последнее время голосования с данного ip можно так:
$temp=mysql_query("SELECT *,LEFT(l.stamp,10) as date FROM poll_answer a LEFT JOIN poll_logs l ON a.answer_id=l.answer_id WHERE l.ip='".$_SERVER['REMOTE_ADDR']."' AND vote_id=".$_REQUEST['vote_id']." ORDER BY l.stamp DESC LIMIT 1");
//Далее проверяем, голосовал ли этот пользователь сегодня:
if (mysql_result($temp,0,'date')!=date('Y-m-d')){
//Если не сегодня, то выполняем следующий запрос на вставку данных. Он такой сложный, т.к. мы проверяем соответствует ли answer_id vote_id.
mysql_query("INSERT INTO poll_logs(answer_id,ip) VALUES ((SELECT answer_id FROM poll_answer WHERE vote_id=".$_REQUEST['vote_id']." AND answer_id=".$_REQUEST['answer_id']." LIMIT 1),'".$_SERVER['REMOTE_ADDR']."')");
}

Приложение:

---------
Этот мир обречён на нас
©Сергей Маврин

Ответ отправил: Загиров Рустам (статус: Специалист)
Ответ отправлен: 12.01.2007, 01:28

Отвечает: PVS
Здравствуйте, PetrKi.!
Вообще-то здравый смысл подсказывает, что в poll_answer лучше сделать answer_id вместо answer, но это дело вкуса. А запрос такой:

$qry="select count(*) from poll_punkt p, poll_answer a where a.answer=p.punkt and a.ip='$ip' and p.id_name=$checked_id";

если результат не нулевой, то пользователь уже отвечал на данный вопрос.
Можно выбрать все вопросы на которые пользователь уже отвечал:

$qry="select distinct p.id_name from poll_punkt p, poll_answer a where a.answer=p.punkt and a.ip='$ip' ";

А можно узнать и "голосовал/не голоcовал:"
$qry="select p.id_name, count(a.id) from poll_punkt p left join poll_answer a on (a.answer=p.punkt and a.ip='$ip') ";
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 12.01.2007, 10:16
Оценка за ответ: 4
Комментарий оценки:
"Вообще-то здравый смысл подсказывает, что в poll_answer лучше сделать answer_id вместо answer"-- это так и есть, просто при разработке и тестировании получилось много скриптов обращающихся по этому имени, поэтому так и оставил.


Вопрос № 70.545
Здравствуй, уважаемый All!
Подскажите, пожалуйста, где можно толково почитать про безопасность в языке PHP? Про "подводные камни", различные ошибки, уязвимости, особенно при проектировании скриптов, связанных с обработкой форм и работой с БД (интересует, прежде всего, MySQL). буду благодарен за любую информацию, статьи, ссылки. Заранее спасибо.
Отправлен: 11.01.2007, 21:44
Вопрос задал: Porsche (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Королёв Руслан
Здравствуйте, Porsche!
Недавно читал в журнале PHP Inside http://phpinside.ru/mag/phpi18_2006_final.pdf 29 страница
Ответ отправил: Королёв Руслан (статус: 3-ий класс)
Ответ отправлен: 11.01.2007, 22:25

Отвечает: Cimus
Здравствуйте, Porsche!
Подборка статей http://phpclub.ru/detail/
http://articles.org.ru/cfaq/index.php?qid=86&catid=14
http://www.nestor.minsk.by/sr/2005/04/sr50417.html
http://www.addzone.ru/files/id/68
---------
Достичь можно любых высот !
Ответ отправил: Cimus (статус: Студент)
Ответ отправлен: 11.01.2007, 22:54

Отвечает: Бакулин Станислав Анатольевич
Здравствуйте, Porsche!

http://phpclub.ru/detail/ - смотри раздел "Вопросы безопасности"
http://www.providerz.ru/articles/php/php-variables-security.html - Безопасность средствами суперглобальных массивов в PHP
http://www.compdoc.ru/internet/php/php_mysql_apache_secur/ - Безопасность PHP+MYSQL+Apache
http://phpsec.org/projects/guide/ - руководство по безопасности PHP
Ответ отправил: Бакулин Станислав Анатольевич (статус: 4-ый класс)
Ответ отправлен: 12.01.2007, 14:22


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.40 beta от 14.01.2007
Яндекс Rambler's Top100

В избранное