Вопрос № 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).
Но заказчик просит чтобы когда он в ДРУГОЙ РАЗ входит в админку - ссылки снова были все одного цвета и меняли цвет после нового редактирования каждой позиции.
Какими механизмами это можно сделать??
Спасибо
Можно все оставить как было. Просто при генерации ссылок добавляйте туда некую случайную позицию, как параметр (часть идентификатора сессии).
Тогда на один сеанс работы в админке все ссылки будут в соответствии с 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!
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. Для смайликов.
Отвечает: 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
Отвечает: 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
уважаемые эксперты!!!
подскажите пожалуйста как можно написать свой форум?
готовым пользоваться неохота, хочется так сказать постичь самому!
подскажите где можно достать какую-либо информацию???
Спасибо!!!
Отвечает: 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
Отвечает: Григорьев Александр Петрович
Здравствуйте, Хованов Дмитрий Михайлович!