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

  Все выпуски  

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


Информационный Канал Subscribe.Ru

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

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

Выпуск № 234
от 23.01.2006, 06:27

Администратор:Калашников О.А.
В рассылке:Подписчиков: 219, Экспертов: 37
В номере:Вопросов: 6, Ответов: 23


Вопрос № 33422: Добрый день, эксперты. Такой вопрос. Есть админская часть для упралвения инет-магазином. Заказчик сам вносит и редактирует позиции. Посещенные ссылки (позиции) подсвечиваются другим цветом (через CSS). Но заказчик просит чтобы ког...
Вопрос № 33429: Уважаемые эксперты у меня такой вопрос: я хочу на своем сайте сделать личный ящик каждому посетителю, для обмена сообщениями. Как реализовать это, используя mysql? Для каждого пользователя обязательно нужо создавать новую таблицу? (должны сохраняться...
Вопрос № 33432: Приветствую Вас снова увжаемые. У меня несколько животрепещущих вопросов по поводу гостевой книги. Дело втом, тчо на днях я посатвил Денвер с поддрежклй версии рхр 5 и начались проблемы, а тут еще к скрипту понял - надо дописать админ страничку и пот...
Вопрос № 33439: Здрасте. 1. Есть ли в PHP ф-ции "а-ля дельфийские" DaysBetween(), HoursBetween()? 2. Если нет, то как лучше получать промежуток времени в виде строки "xx минут xx секунд" между двумя событиями (Будь-то время(timstamp) пол...
Вопрос № 33467: Кто нибудь может подсказать eregi выражение: заменяющее (:N:) (N-число от 1 до 99) на <img src="images/N.gif"> P.S. Для смайликов. ...
Вопрос № 33485: уважаемые эксперты!!! подскажите пожалуйста как можно написать свой форум? готовым пользоваться неохота, хочется так сказать постичь самому! подскажите где можно достать какую-либо информацию??? Спасибо!!!...

Вопрос № 33.422
Добрый день, эксперты.
Такой вопрос.
Есть админская часть для упралвения инет-магазином.
Заказчик сам вносит и редактирует позиции.
Посещенные ссылки (позиции) подсвечиваются другим цветом (через CSS).
Но заказчик просит чтобы когда он в ДРУГОЙ РАЗ входит в админку - ссылки снова были все одного цвета и меняли цвет после нового редактирования каждой позиции.
Какими механизмами это можно сделать??
Спасибо
Отправлен: 17.01.2006, 10:05
Вопрос задал: Волнянский Вячеслав (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Straight
Здравствуйте, Волнянский Вячеслав!

Меняйте цвета не через CSS, а прямо в коде (ставьте другой стиль посещенным позициям). Храните посещенные позиции в сессии.
Ответ отправил: Straight (статус: 4-ый класс)
Отправлен: 17.01.2006, 10:09

Отвечает: Zysoftik
Здравствуйте, Волнянский Вячеслав!

Можно все оставить как было. Просто при генерации ссылок добавляйте туда некую случайную позицию, как параметр (часть идентификатора сессии).
Тогда на один сеанс работы в админке все ссылки будут в соответствии с CSS подсвечиваться, а при следующем входе (уже с другим идентификатором сессии) все ссылки будут другие, и браузер будет считать их непосещенными.

Пример ссылки:

myfile.php?id=1&product=2&op=3&s=46d3g

где "&s=46d3g" - собственно добавка.

Получить часть идентификатора сессии можно так:

substr(session_id(),0,X);

где Х - желаемая длина ключа.

Поскольку сам параметр с кодом использовать в скриптах не нужно, получается достижение желаемого результата без критического вмешательства в алгоритм или без оного (существует способ заставить PHP автоматом добавлять переменные в url'ы. Но я сейчас не вспомню как :( ).
Ответ отправил: Zysoftik (статус: 2-ой класс)
Отправлен: 17.01.2006, 11:45

Отвечает: gp
Здравствуйте, Волнянский Вячеслав!
Ссылки при повторном посещении подсвечены, т.к. броузер кэширует страницу. Запретите кэширование (например, давая каждый раз странице уникальный заголовок - см.пример в приложении)

Приложение:

Ответ отправил: gp (статус: Академик)
Отправлен: 17.01.2006, 12:34


Вопрос № 33.429
Уважаемые эксперты у меня такой вопрос: я хочу на своем сайте сделать личный ящик каждому посетителю, для обмена сообщениями. Как реализовать это, используя mysql? Для каждого пользователя обязательно нужо создавать новую таблицу? (должны сохраняться сообщение и его автор). Помогите пожалуйста.
Отправлен: 17.01.2006, 11:34
Вопрос задал: Patron (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 8)

Отвечает: Rusland
Здравствуйте, Patron!
Нет, достаточно всего 2 таблиц: 1 - таблица пользователей, где хранятся уникальные имена пользователей; 2 - таблица сообщений, где первое поле - текст сообщения, второе - имя пользователя, который его написал. Если нужно более подробнее, пиши. Удачи.
---------
Пресловутое недостающее звено между обезьяной и цивилизованным человеком - это как раз мы. (Конрад Лоренц)
Ответ отправил: Rusland (статус: Специалист)
Отправлен: 17.01.2006, 11:40
Оценка за ответ: 5

Отвечает: Samum
Здравствуйте, Patron!
Если вы имеете в виду систему, подобную внутренней почте портала, то ответ Rusland хочется немного добавить. В частности, в таблице с письмами еще придется хранить идентификатор пользователя, которому адресовано сообщение и признак того, что адресат сообщение прочитал.
Если же вы подразумевали заведение на каждого пользователя почтового ящика вида user@yoursite.ru, то MySQL в таком случае вам ничем помочь не сможет.
---------
Если бы программистам за их ошибки отрывали части тела, то в конце концов им пришлось бы использовать голову!
Ответ отправил: Samum (статус: Специалист)
Отправлен: 17.01.2006, 14:15
Оценка за ответ: 4

Отвечает: XMF
Здравствуйте, Patron!
---
msg_id
to_id
from_id
msg_subj
msg_txt
---
Это поля в таблице.
Когда from_id пишет to_id, то добавляется запись в БД. когда же to_id хочет прочитать сообщения, то нужно сделать запрос: select * from table where to_id='$my_id'
--
Ответ отправил: XMF (статус: 3-ий класс)
Отправлен: 17.01.2006, 18:47
Оценка за ответ: 4
Комментарий оценки:
Вариант такой я уже продумывал, но подумайте, насколько это нерационально при очень больших количествах сообщени!

Отвечает: Дмитрий Иванов
Здравствуйте, Patron!

создаешь одну таблицу
1. ID autoincrement INT
2. ownerID INT - кому послали
3.senderID INT - от кого
4.само сообщение TEXT
5.дата отправки DATATIME
6. не обязательно но возможно статус сообщения (прочитан, отвечено и т.д.)
---------
ставя оценку - подумай, может ты не все описал.
Ответ отправил: Дмитрий Иванов (статус: Студент)
Отправлен: 18.01.2006, 00:28
Оценка за ответ: 5
Комментарий оценки:
Наверное это самое оптимальное решение

Отвечает: Schmak
Здравствуйте, Patron!
Можно сделать одну таблицу для всех сообщений. 3 поля: отправитель, адресат, текст + по желанию, время отправки. В поля
'адресат' и 'отправитель' можно записывать логин пользователя, но лучше присвоить каждому пользователю id и записывать его,
а при входе пользователя смотреть его id и выбирать сообщения для него. Еще можно сделать индекс по полю 'адресат', и тогда
запросы будут выполняться быстрее.
---------
Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Практикант)
Отправлен: 18.01.2006, 20:15
Оценка за ответ: 5


Вопрос № 33.432
Приветствую Вас снова увжаемые. У меня несколько животрепещущих вопросов по поводу гостевой книги. Дело втом, тчо на днях я посатвил Денвер с поддрежклй версии рхр 5 и начались проблемы, а тут еще к скрипту понял - надо дописать админ страничку и потому несколько вопросов. проблема была в том что скрипт обработки глючил на второй строке - я исправил куском кода
if (!isset($_POST['name']) or !isset($_POST['email']) or !isset($_POST['mess'])) {

дальше пошло интереснее выдает ошибку
Notice: Undefined variable: name in z:homeRayne.ruWwwMESSAGE.PHP on line 8
Notice: Undefined variable: email in z:homeRayne.ruWwwMESSAGE.PHP on line 9
Notice: Undefined variable: mess in z:homeRayne.ruWwwMESSAGE.PHP on line 10
а на этом месте у меня отработка
$name=addslashes($name);
$email=addslashes($email);
$mess=addslashes($mess);

получаеться скрипт не получает данные?

второй вопрос. желая организовать админ страницу я делаю вторую страничку для админа в котором бы показывались посты и понял нужен индетефикатор. проверить пока не могу но в существующий код встроил
$m=0;
.......
$m++;
echo "$m=$row['m']
и в игото вышло
$query="SELECT * FROM messag";
$result=mysql_query($query);
echo "<table border=1 cellpadding=3 cellspacing=0>";
$m=0';
while($row = mysql_fetch_array($result)){
m++;
echo "<tr>"."<td width='20%' align=left>"."<strong>";
echo "$m=$row['m']
echo "$row[name]"."</strong>"." "." ";
но сработает ли такой счетчик? я проверить пока не могу.
а дальше идет я не Знаю что сделать передать по ссылке или же сделать кнопку удаления. и если честно не совсем понимаю как реализовать эту кнопку "удаление" и как передать пос сылке. что бы потом отработал код в обрабатывающем скрипте.
$sql_result="delete from messag where m_id='$m'";
надеюсь на ваши ответы и очень их жду.
Отправлен: 17.01.2006, 12:48
Вопрос задал: Diego (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Straight
Здравствуйте, Diego!

По первому вопросу: чтобы переменные автоматически инициировались из массива $_POST, нужно чтобы был установлен параметр register_globals
Ответ отправил: Straight (статус: 4-ый класс)
Отправлен: 17.01.2006, 13:00
Оценка за ответ: 4

Отвечает: Григорьев Александр Петрович
Здравствуйте, Diego!

$name=addslashes($name);
$email=addslashes($email);
$mess=addslashes($mess);

Попробуйте включить автоматическую регистрацию переменных php.ini(
register_globals = Off)

но лучше так:

$name = $_POST['name']);
$name=addslashes($name);
Ответ отправил: Григорьев Александр Петрович (статус: 1-ый класс)
Отправлен: 17.01.2006, 13:02
Оценка за ответ: 5

Отвечает: Zysoftik
Здравствуйте, Diego!

По первому вопросу уже ответили :)

По второму. Я не совсем понял зачем там вообще счетчик.
Можно просто использовать индекс базы. Т.е.:

$query="SELECT * FROM messag";
$result=mysql_query($query);
echo "<table border=1 cellpadding=3 cellspacing=0>";

while($row = mysql_fetch_array($result)){
echo "<tr>"."<td width='20%' align=left>"."<strong>";
echo "$row[0]";
echo "$row[name]"."</strong>"." "." ";
}

тка получится, что к каждому пользователю выведен его id (ключ) по базе.
Удаление можно организовать двумя способами:

echo '<a href="delete.php?id='.$row[0].'">Удалить</a>';

или

echo '<form action="delete.php" method=post><input type=hidden name=id value='.$row[0].'><input type=submit value="Удалить"></form>';

А в скрипте delete.php писать:

mysql_query("delete from messag where id=".$_GET['id']);

или

mysql_query("delete from messag where id=".$_POST['id']);

в зависимости от выбранного метода
Ответ отправил: Zysoftik (статус: 2-ой класс)
Отправлен: 17.01.2006, 13:15
Оценка за ответ: 5

Отвечает: Дмитрий Иванов
Здравствуйте, Diego!

не используй глобальные переменные
вместо $name юзать $_POST['name'] и т.д.

предположим ты передаешь своему скрипту www.mydmn.ru/myscr.php?m=23
где m - это название пареметра(заметь не переменной а параметра)
а 23 - ID записи в базе данных

то в PHP скрипте значение параметра ты сможешь получить через $_GET['m'] ,
$_GET - используется так как параметр в моем случае передается посредством URL строки.

затем если нравится присвой для красоты значение переменной
$m=$_GET['m']
и теперь можно писать query на удаление элемента -
$sql_result="delete from messag where m_id='$m'";
Удачи!

---------
ставя оценку - подумай, может ты не все описал.
Ответ отправил: Дмитрий Иванов (статус: Студент)
Отправлен: 18.01.2006, 01:05
Оценка за ответ: 5


Вопрос № 33.439
Здрасте.
1. Есть ли в PHP ф-ции "а-ля дельфийские" DaysBetween(), HoursBetween()?
2. Если нет, то как лучше получать промежуток времени в виде строки "xx минут xx секунд" между двумя событиями (Будь-то время(timstamp) полученое из Firebird или время засеченное до и после выполнения скрипта.)
Понятно, можно делить и округлять миллисекунды, но может есть еще варианты?
Отправлен: 17.01.2006, 14:35
Вопрос задал: Marcel (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Marcel!
Таких функций в PHP нет, но это нетрудно сделать с помощью Unix time. Пример смотрите в приложении. Если нужно считать кол-во дней - то сначала нужно разделить на 3600*24, затем остаток поделить на 3600 - это часы, затем на 60 - минуты и оставшимся числом будут секунды. Каждое из unixtime - это число секунд, прошедших с 01.01.1970. Соответственно, разница между датами также будет выражаться в секундах. Думаю, что проблем здесь возникнуть не должно.

Приложение:

---------
Работа - не волк, а произведение силы на расстояние!

Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 17.01.2006, 15:32
Оценка за ответ: 5
Комментарий оценки:
Исчерпывающе. Спасибо.

Отвечает: Schmak
Здравствуйте, Marcel!
Есть функция getdate(timestamp), которая возвращает массив. В нем среди прочих есть элементы 'minutes' и 'seconds'.
$t1 - первый timestamp; $t2 - второй timestamp.

..
$t3=$t2-$t1;
$d=getdate($t3);
$a=$d['minutes'];
$b=$d['seconds'];
echo "$a минут, $b секунд";
---------
Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Практикант)
Отправлен: 18.01.2006, 20:15
Оценка за ответ: 4
Комментарий оценки:
Конечно я не совсем полно выразил свой вопрос, но а если надо "xx суток чч:мм"?


Вопрос № 33.467
Кто нибудь может подсказать eregi выражение:
заменяющее (:N:) (N-число от 1 до 99) на <img src="images/N.gif">
P.S. Для смайликов.
Отправлен: 17.01.2006, 19:45
Вопрос задал: Golden Spider (статус: 4-ый класс)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Doctor013
Здравствуйте, Golden Spider!
Зачем eregi? Для простых замен юзай str_replace

$vN='10';
$bodytag = str_replace("%N%",$vN , "<img src="images/%N%.gif">");
---------
the non-fulfilment one's promise is a cause for someone's mistrust
Ответ отправил: Doctor013 (статус: 5-ый класс)
Отправлен: 17.01.2006, 20:08

Отвечает: Zysoftik
Здравствуйте, Golden Spider!

Попробуйте использовать так:

$src="(:1:)"; //или что-то типа

$result=eregi_replace("(:","<img src="images/",$src);
$result=eregi_replace(":)",".gif">",$result);

Так получается, что и ограничения на кол-во символов внутри нет. Можно разбирать даже (:9922845:)

Ответ отправил: Zysoftik (статус: 2-ой класс)
Отправлен: 17.01.2006, 21:29

Отвечает: Дмитрий Иванов
Здравствуйте, Golden Spider!

$a="dfsdf :45:";
$a=preg_replace("/:([0-9]+):/","",$a);

print $a;

дублирую в приложении

Приложение:

---------
ставя оценку - подумай, может ты не все описал.

Ответ отправил: Дмитрий Иванов (статус: Студент)
Отправлен: 18.01.2006, 00:48

Отвечает: nkravt
Здравствуйте, Golden Spider!

Пример eregi-выражения в приложении.

Приложение:

Ответ отправила: nkravt (статус: 1-ый класс)
Отправлен: 18.01.2006, 04:20

Отвечает: Григорьев Александр Петрович
Здравствуйте, Golden Spider!

for ($i=1;i$<=99;$i++)
{
echo ('img src="images/'.i$.'.gif">)';
}
Ответ отправил: Григорьев Александр Петрович (статус: 1-ый класс)
Отправлен: 18.01.2006, 06:43

Отвечает: Schmak
Здравствуйте, Golden Spider!
Перебираем возможные варианты и заменяем то, что нужно.
for ($i=1; $i<100; $i++)
{
$s1="(:$i:)";
$s2="";
str_replace($s1, $s2, $str);
}
$str - та строка, в которой надо заменять.
---------
Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Практикант)
Отправлен: 18.01.2006, 20:15


Вопрос № 33.485
уважаемые эксперты!!!
подскажите пожалуйста как можно написать свой форум?
готовым пользоваться неохота, хочется так сказать постичь самому!
подскажите где можно достать какую-либо информацию???
Спасибо!!!
Отправлен: 17.01.2006, 22:37
Вопрос задал: Хованов Дмитрий Михайлович (статус: 2-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Doctor013
Здравствуйте, Хованов Дмитрий Михайлович!
Задача очень объемная, особенно в вопросах безопасности. Но если очень хочется, то
посмотреть можно phpBB (http://www.phpbb.com) и Phorum(http://phorum.org).
Некоторые модули из последнего описаны в книге "PHP программирование". В остальном же попытайся разобраться в построении форума, также можно поспрашивать на форумах поддержки http://phpbbguru.net/, http://myphpbb.com.ru/
---------
the non-fulfilment one's promise is a cause for someone's mistrust
Ответ отправил: Doctor013 (статус: 5-ый класс)
Отправлен: 17.01.2006, 22:57

Отвечает: Lancelot
Здравствуйте, Хованов Дмитрий Михайлович!
А Вам о чём, собственно говоря, информация нужна? Для того чтобы написать форум достаточно уметь, худо-будно, программировать на PHP! Форум получиться такой же. Чтобы написать хороший форум необходимо: написать несколько скриптов средней тяжести по вытаскиванию данных из БД, уметь грамотно формулировать SQL-запросы, почитать какие основные ошибки допускают разработчики открытых форумов, и как ими пользуются. Если Вы уверены в своих силах, то можете приступать. Начните хотя бы с изучения исходников бесплатных форумов. Вы поймёте основные принципы. Если что-то Вам будет непонятно, то задавайте вопрос, ответим, разберём, обьясним. В дополнении к ссылкам которые Вам предложил мой коллега посетите сайт www.phpclub.ru там Вы найдёте и исходники форумов и много статей по работе с БД. Желаю удачи!
P.S.
Мы можем слегка протестить Ваш скрипт на безопасноить, мы этим довольно часто занимаемся, так что обращайтесь)
---------
Дуракам везёт? Не такие уж они и дураки. (Хенрик Ягодзинский)
Ответ отправил: Lancelot (статус: Студент)
Отправлен: 18.01.2006, 00:06
Оценка за ответ: 5

Отвечает: Григорьев Александр Петрович
Здравствуйте, Хованов Дмитрий Михайлович!

->WOWEB.RU
Ответ отправил: Григорьев Александр Петрович (статус: 1-ый класс)
Отправлен: 18.01.2006, 06:45


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

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

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

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

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


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


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

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.phpplus
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное