[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Гостевая книга запись в файл
han73r
Появились вопросы по поводу гостевой книги из 1 урока IRBIS-team.
Предлагаю обсуждать их тут.

1. Вставка тегов и смайлов.
С помощью функции

 function bbTags($text)  
{
$bb = array(

'wink.gif'
);

$tag = array(
'<img src="smiles/wink.gif" />'
);

return str_ireplace($bb, $tag, $text);
}

мы сопоставляем значение выводимого смайла ; ) = wink.gif
Как сделать так, чтобы не только ; ) = wink.gif, но и ;-) = wink.gif

Вижу выход

 function bbTags($text)  
{
$bb = array(

'wink.gif',
';-)'
);

$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. Более сложную книгу на основе ядра и БД я пока разобрать не могу, т.к. не понимаю простейших функций и операторов. Разбираюсь и пытаюсь понять на основе первого урока. Окажите услугу, помогите разобраться. smile.gif



Спустя 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 написал(а):
Ну основательный подход smile.gif smile.gif
Только все напрасно. Это же игрушка, не более того. Просто иллюстрация работы клиент-серверных взаимодействий и некоторых основополагающих моментов.
Пытаться сделать из этой цацки полноценную гостевую нет никакого смысла. Как ни тюнингуй запорожец, мерседесом он не станет

Лучше с такой же основательностью читай и разбирай дальше. И тогда получится действительно круто.

Спустя 1 день, 4 часа, 18 минут, 59 секунд (22.10.2010 - 20:58) han73r написал(а):
Спасибо, не буду заморачиваться, хотя почти все исполнил, окромя обратного порядке, никак не пойму, как это сделать!)twin
спасибо за уроки!

Спустя 58 минут, 9 секунд (22.10.2010 - 21:56) han73r написал(а):
Кстати, уроки
   $ text = Готовые решения
echo Раздел пуст


Было бы неплохо, чем-нибудь пополнить!)

Спустя 21 минута, 10 секунд (22.10.2010 - 22:17) twin написал(а):
Кто мешает? smile.gif

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

Спустя 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 написал(а):
печально... sad.gif
А что говорит?

Спустя 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

Спустя 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
Кстати, как я заметил скрипт просто скопирован из примера? Значит, дело не в коде? Я облазил весь свой код, ашипки не нашел. Тут-что-то не то.

Спустя 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 написал(а):
Интересует такой момент.
file_put_contents('text.txt', $text2 ."\n", FILE_APPEND);

Например, если по очереди внести: вася (отправить) петя (отправить) коля (отправить), текст запишется в текстовый файл в виде: васяпетяколя. Однако вытаскивает данные интерпретатор в виде:
вася
петя
коля
Так вот, как он узнаёт где нужно разделить текст и вывести в новую строку, ведь в текстовом файле все идет подряд? Знаю, что это благодаря "\n", но все же в файле для него никаких меток нет.

Спустя 7 часов, 7 минут, 8 секунд (12.11.2010 - 07:07) twin написал(а):
Почему нет? Сам же написал - "\n"
Другое дело, что ты наверное смотришь файл виндовским блокнотом, а он один перенос строки не видит. Ему еще возврат каретки надо ("\r\n").
Открой файл любым другим редактором и увидишь.

Спустя 8 часов, 37 минут, 41 секунда (12.11.2010 - 15:45) sixpoundeeer написал(а):
Цитата
Почему нет? Сам же написал - "\n"

Нет, потому что не видно smile.gif Все верно, открывал блокнотом. В notepad++ с разделителями.

Спустя 8 дней, 9 часов, 17 минут, 18 секунд (21.11.2010 - 01:02) MNO121280 написал(а):
Извените, но у меня такой вопрос, в "Шаг5. Сериализация" есть такой фрагмент кода:


<?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?

Спасибо. Я как-то об этом и не подумал...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.