Предлагаю обсуждать их тут.
1. Вставка тегов и смайлов.
С помощью функции
function bbTags($text)
{
$bb = array(
''
);
$tag = array(
'<img src="smiles/wink.gif" />'
);
return str_ireplace($bb, $tag, $text);
}
мы сопоставляем значение выводимого смайла ; ) = wink.gif
Как сделать так, чтобы не только ; ) = wink.gif, но и ;-) = wink.gif
Вижу выход
function bbTags($text)
{
$bb = array(
'',
';-)'
);
$tag = array(
'<img src="smiles/wink.gif" />',
'<img src="smiles/wink.gif" />'
);
return str_ireplace($bb, $tag, $text);
}
Есть ещё какие-либо варианты через оператор if или логические операторы?
2. Как сделать отображение собщений в гостевой из урока 1 наоборот, т.е. последний будет на первой странице, а первый на последней?
3. Возможность сохранения IP.
Какой функцией или javascript можно сохранять в теле сообщения IP написавшего?
Затем как через панель администрирования запретить пользователю с определённым IP писать сообщения?
Я так понимаю надо создать массив, в котором будут указаны IP адреса неугодных пользователей и перд сохранением сообщения задать функцию сверки Ip писателя с Ip адресами в массиве, как это теперь записать языком программирования?)
4. Возможность редактирования
Как оформить возможность редактирования сообщения?
Вижу это так: выбранное сообщение вытаскивается из массива, и отправляется заново в form, где администратор может его изменить, а затем как его перезаписать поверх уже имеющегося сообщения?
5. Полное удаление сообщения.
Я так понимаю, что полное удаление сообщения возможно, но приведет к нарушению структуры сообщений. Если их было 4 на листе, после тотальной чистки где-то их может быть по 3, где-то 2, а где-то и ни 1.
Тогда вопрос, как можно записать премодерацию, чтобы сообщения сначала сохранялись отдельно?
Вижу это так: сохранять их под другими переменными и выводить в отдельный html файл, а лучше сразу в admin.php, у админа есть возможность просмотреть сообщения, отредактировать, а затем присвоить текстовым полям (проделать ту функцию, что делает пользователь из примера гостевой книги первого урока) другие значения, перезаписать их в другой файл и они отобразятся уже на главной странице, доступной посетителям.
6. Как установить максимальное количество символов в сообщении?
Какой функцией можно посчитать количество сиволво в сообщении?
p.s. Более сложную книгу на основе ядра и БД я пока разобрать не могу, т.к. не понимаю простейших функций и операторов. Разбираюсь и пытаюсь понять на основе первого урока. Окажите услугу, помогите разобраться.

Спустя 10 минут, 9 секунд (21.10.2010 - 12:02) aH6y написал(а):
ip пользователя находиться в глобальной переменной:
$_SERVER['REMOTE_ADDR']
Спустя 14 минут, 3 секунды (21.10.2010 - 12:17) han73r написал(а):
aH6y
Цитата |
$_SERVER['REMOTE_ADDR'] |
Создал такой файл
<?php
$text = $_SERVER['REMOTE_ADDR'];
echo $text;
?>
итог 127.0.0.1
Все рабоатет, спасибо!)
p.s. не знал, что это за "php" "SQL" и т.п. кнопки в форме сообщения, модер поправил, теперь я понял, спасибо
<?php
$text = $_SERVER['REMOTE_ADDR'];
echo $text;
?>
p.s.2 а как это сделано?)
Спустя 46 минут, 50 секунд (21.10.2010 - 13:03) han73r написал(а):
Удалено
Спустя 3 часа, 35 минут, 14 секунд (21.10.2010 - 16:39) twin написал(а):
Ну основательный подход
Только все напрасно. Это же игрушка, не более того. Просто иллюстрация работы клиент-серверных взаимодействий и некоторых основополагающих моментов.
Пытаться сделать из этой цацки полноценную гостевую нет никакого смысла. Как ни тюнингуй запорожец, мерседесом он не станет
Лучше с такой же основательностью читай и разбирай дальше. И тогда получится действительно круто.


Только все напрасно. Это же игрушка, не более того. Просто иллюстрация работы клиент-серверных взаимодействий и некоторых основополагающих моментов.
Пытаться сделать из этой цацки полноценную гостевую нет никакого смысла. Как ни тюнингуй запорожец, мерседесом он не станет
Лучше с такой же основательностью читай и разбирай дальше. И тогда получится действительно круто.
Спустя 1 день, 4 часа, 18 минут, 59 секунд (22.10.2010 - 20:58) han73r написал(а):
Спасибо, не буду заморачиваться, хотя почти все исполнил, окромя обратного порядке, никак не пойму, как это сделать!)twin
спасибо за уроки!
спасибо за уроки!
Спустя 58 минут, 9 секунд (22.10.2010 - 21:56) han73r написал(а):
Спустя 21 минута, 10 секунд (22.10.2010 - 22:17) twin написал(а):
Кто мешает?

Спустя 1 час, 21 минута, 58 секунд (22.10.2010 - 23:39) han73r написал(а):
Буду трудиться!

Спустя 8 дней, 7 часов, 49 минут, 47 секунд (31.10.2010 - 08:29) nugle написал(а):
Привет, у мня вообще не работает вот этот скрипт
<?php
/**
* The guest book
* Гостевая книга
* @author IT studio IRBIS-team
* @copyright © 2009 IRBIS-team
*/
/////////////////////////////////////////////////////////
/**
* We establish the charset and level of errors
* Устанавливаем кодировку и уровень ошибок
*/
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);
/////////////////////////////////////////////////////////////////
// VARIABLES
// ПЕРЕМЕННЫЕ
/////////////////////////////////////////////////////////////////
$text1 = !empty($_POST['text1']) ? $_POST['text1'] : null;
$text2 = !empty($_POST['text2']) ? $_POST['text2'] : null;
$info = array();
/////////////////////////////////////////////////////////////////
// SCRIPT
// СКРИПТ
/////////////////////////////////////////////////////////////////
if(!empty($_POST['ok']))
{
if(!$text1)
$info[] = 'Текстовое поле не заполнено.';
if(!$text2)
$info[] = 'Текстовая область не заполнена.';
if(count($info) == 0)
{ // Если файл существует
if(file_exists('text.txt'))
{
// Читаем файл и десериализуем массив
$posts = unserialize(file_get_contents('text.txt'));
// Достаем все ключи в другой массив
$keys = array_keys($posts);
// Вытаскиваем самый большой элемент и увеличиваем на 1
$id = max($keys) + 1;
} // Если файла нет, значит запись № 1
else
$id = 1;
// Устанавливаем новый ключ
$posts[$id]['date'] = date('d-m-Y');
$posts[$id]['name'] = $text1;
$posts[$id]['mess'] = $text2;
file_put_contents('text.txt', serialize($posts));
header('location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
exit();
}
}
else
$info[] = 'Напишите что-нибудь';
/////////////////////////////////////////////////////////////////
// VIEW
// ОТОБРАЖЕНИЕ
/////////////////////////////////////////////////////////////////
?>
<form action="" method="post">
Логин:<br />
<input name="text1" type="text" value="<?php echo htmlspecialchars($text1) ?>"/><br />
Сообщение:<br />
<textarea name="text2" cols="40" rows="10"><?php echo htmlspecialchars($text2);?></textarea><br />
<input name="ok" type="submit" />
</form>
<?php
echo implode('<br>', $info) .'<br>';
// Если файл существует
if(file_exists('text.txt'))
{ // Читаем файл и десериализуем массив
$array = unserialize(file_get_contents('text.txt'));
// Проходим по массиву циклом, вынимая с каждым витком пару ключ => значение
foreach($array as $id => $post)
{ // Тут уже проходили
$date = $post['date'];
$name = htmlspecialchars($post['name']);
$mess = nl2br(htmlspecialchars($post['mess']));
?>
<div style="border:1px solid; width:70%; background-color:#66FFFF; min-height:100px; margin:5px; padding:5px">
<?php echo $date; ?> / <strong><?php echo $name; ?></strong>
<hr width="30%" align="left" />
<?php echo $mess; ?>
</div>
<?php
}
}
Спустя 8 минут, 39 секунд (31.10.2010 - 08:37) twin написал(а):
печально...
А что говорит?

А что говорит?
Спустя 1 час, 8 минут, 58 секунд (31.10.2010 - 09:46) nugle написал(а):
( ! ) Notice: unserialize() [function.unserialize]: Error at offset 0 of 29 bytes in Z:\home\obuch.ru\www\book_1\index.php on line 133
( ! ) Warning: Invalid argument supplied for foreach() in Z:\home\obuch.ru\www\book_1\index.php on line 135
( ! ) Warning: Invalid argument supplied for foreach() in Z:\home\obuch.ru\www\book_1\index.php on line 135
Спустя 10 минут, 32 секунды (31.10.2010 - 09:57) twin написал(а):
Не нужно запускать скрипт без первого файла.
Спустя 2 часа, 2 минуты, 7 секунд (31.10.2010 - 11:59) nugle написал(а):
там один файл
Спустя 6 дней, 5 часов, 20 минут, 32 секунды (7.11.2010 - 17:19) Black Angel написал(а):
У меня точь вточь такая же ашипка.
nugle
Кстати, как я заметил скрипт просто скопирован из примера? Значит, дело не в коде? Я облазил весь свой код, ашипки не нашел. Тут-что-то не то.
nugle
Кстати, как я заметил скрипт просто скопирован из примера? Значит, дело не в коде? Я облазил весь свой код, ашипки не нашел. Тут-что-то не то.
Спустя 1 час, 1 минута, 17 секунд (7.11.2010 - 18:21) twin написал(а):
Мне интересно, как может быть
Цитата |
точь вточь такая же ашипка |
если в представленном коде всего 102 строки...
( ! ) Notice: unserialize() [function.unserialize]: Error at offset 0 of 29 bytes in Z:\home\obuch.ru\www\book_1\index.php on line 133
( ! ) Warning: Invalid argument supplied for foreach() in Z:\home\obuch.ru\www\book_1\index.php on line 135
Спустя 4 дня, 5 часов, 39 минут, 20 секунд (12.11.2010 - 00:00) sixpoundeeer написал(а):
Интересует такой момент.
Например, если по очереди внести: вася (отправить) петя (отправить) коля (отправить), текст запишется в текстовый файл в виде: васяпетяколя. Однако вытаскивает данные интерпретатор в виде:
вася
петя
коля
Так вот, как он узнаёт где нужно разделить текст и вывести в новую строку, ведь в текстовом файле все идет подряд? Знаю, что это благодаря "\n", но все же в файле для него никаких меток нет.
file_put_contents('text.txt', $text2 ."\n", FILE_APPEND);
Например, если по очереди внести: вася (отправить) петя (отправить) коля (отправить), текст запишется в текстовый файл в виде: васяпетяколя. Однако вытаскивает данные интерпретатор в виде:
вася
петя
коля
Так вот, как он узнаёт где нужно разделить текст и вывести в новую строку, ведь в текстовом файле все идет подряд? Знаю, что это благодаря "\n", но все же в файле для него никаких меток нет.
Спустя 7 часов, 7 минут, 8 секунд (12.11.2010 - 07:07) twin написал(а):
Почему нет? Сам же написал - "\n"
Другое дело, что ты наверное смотришь файл виндовским блокнотом, а он один перенос строки не видит. Ему еще возврат каретки надо ("\r\n").
Открой файл любым другим редактором и увидишь.
Другое дело, что ты наверное смотришь файл виндовским блокнотом, а он один перенос строки не видит. Ему еще возврат каретки надо ("\r\n").
Открой файл любым другим редактором и увидишь.
Спустя 8 часов, 37 минут, 41 секунда (12.11.2010 - 15:45) sixpoundeeer написал(а):
Цитата |
Почему нет? Сам же написал - "\n" |
Нет, потому что не видно

Спустя 8 дней, 9 часов, 17 минут, 18 секунд (21.11.2010 - 01:02) MNO121280 написал(а):
Извените, но у меня такой вопрос, в "Шаг5. Сериализация" есть такой фрагмент кода:
Вопрос, почему закрывающая кавычка для условия if идет после закрывающего тега <div>, а не перед последним коментарием. Я думаю это не критично, но все же хотелось бы знать на будущее.
<?php
if(file_exists('text.txt'))
{ // Читаем файл
$array = file_get_contents('text.txt');
// Десереализуем массив
$array = unserialize($array);
// Берем первый элемент, то есть массив второго уровня
$post = $array[1];
// Пишем все в переменные, они пригодятся для форматирования вывода
$date = $post['date'];
$name = htmlspecialchars($post['name']);
$mess = nl2br(htmlspecialchars($post['mess']));
// Ну и сам вывод, что бы красивенько.
?>
<div style="border:1px solid; width:70%; background-color:#66FFFF; min-height:100px;
margin:5px; padding:5px">
<?php echo $date; ?> / <strong><?php echo $name; ?></strong>
<hr width="30%" align="left" />
<?php echo $mess; ?>
</div>
<?php
}
Вопрос, почему закрывающая кавычка для условия if идет после закрывающего тега <div>, а не перед последним коментарием. Я думаю это не критично, но все же хотелось бы знать на будущее.
Спустя 7 минут, 23 секунды (21.11.2010 - 01:10) kovaldm написал(а):
Если поставиь ее перед последним комментарием, то откуда возьмутся переменные $date, $name и $mess в случае отстутствия файла text.txt?
Спустя 10 минут (21.11.2010 - 01:20) MNO121280 написал(а):
Цитата (kovaldm @ 20.11.2010 - 22:10) |
Если поставиь ее перед последним комментарием, то откуда возьмутся переменные $date, $name и $mess в случае отстутствия файла text.txt? |
Спасибо. Я как-то об этом и не подумал...