|
Автор |
Сообщение |
Kate
Зарегистрирован: 31.08.2008 Сообщения: 2
|
|
|
|
Здравствуйте, Денис!
Помогите, пожалуйста, написать прототип гостевой книги!
Я воспользовалась сценарием из Вашей книги PHP5 в теории и на практике, самоучитель.
При отправке данных ничего не отправляется и не отображается.
Код: |
<?
echo "<html><head><title>guestbook</title></head></html><body>";
$file_gb="./gbook/gb.txt";
$file_tmp="./gbook/gb_tmp.txt";
$Max=50;
function view()
{
$Messages=file($file_gb);
echo "<p><table width=100%>";
$i=0;
for($i=$last; $i<count($Messages); $i++) echo "<tr><td>$Messages[$i]</td></tr>";
}
if (!isset($Post))
{
echo "<table width=100% border=1";
echo "<tr><td>New Message<form method=post action=$SCRIPT_NAME>";
echo "<textarea name=mes cols=30 rows=3 wrap=virtual></textarea>
<br>
<br>
<input type=text name=mes>
<br>
<br>
<input name=radio_button type=radio value=rb1 checked>
Radio button 1
<input name=radio_button type=radio value=rb2 >
Radio button 2
<br>
<br>
<input name=ch_box1 type=checkbox value=chb1 checked>
Check box 1
<input name=ch_box2 type=checkbox value=chb2 >
Check box 2
<br>
<br>
<input type=submit name=Post> </td></tr>";
echo "</table></form>";
view();
}
else
{
if(file_exists($file_tmp)) die("fatal error!");
if(copy($file_gb, $file_tmp))
{
if($w=fopen($file_gb, "w"))
{
fwrite($w,"[".date("d.m.Y. H:i:s")."]". strip_tags($mes)."\n");
if(!$r = fopen($file_tmp,"r")) die("can't");
while($mes=fgets($r,10240))
{
fputs($w,$mes);
}
fclose($r);
fclose($w);
unlink($file_temp);
}
}
echo "Message has been submitted succesfully!";
view();
}
?>
|
+ ещё нужна проверка данных, отправленных пользователем;
возможность добавления, просмотра и удаления сообщений пользователем (как при удачном добавлении, так и при удалении сообщения, должно выводиться уведомление об этом с помощью библиотеки JS HighSlide)
Помогите, пожалуйста, если у Вас есть время... |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Kate
Зарегистрирован: 31.08.2008 Сообщения: 2
|
|
|
|
Спасибо, den!
Только в этом архиве нет файла config.php!!
Этот файл необходим, для проверки правильности вводимых данных.
Дело в том, что я совсем плохо разбираюсь с PHP... и это задание на самом деле, поэтому от заданных условий, приведённых мной в предыдущем сообщении, отступить никак нельзя(
Мне не к кому больше обратиться...Если Вы сможете помочь, хотя бы тот сценарий объяснить, почему сообщения не отобразить...буду очень благодарна Вам! |
|
Вернуться к началу |
|
|
Alexander _shaman
Зарегистрирован: 01.09.2008 Сообщения: 3 Откуда: murmansk
|
|
|
|
Короче я сам ламер, и старательно пытаюсь это исправить. Короче под твой код пишу комментарий. Это будет для меня хорошая тренировка знаний.
<?
echo "<html><head><title>guestbook</title></head></html><body>"; // отобразить на экране html-скрипт с надписью Guestbook!
$file_gb="./gbook/gb.txt"; // это понятно. пусть к базе данных из файла
$file_tmp="./gbook/gb_tmp.txt"; //временное хранилище
$Max=50; //максимальное количество - 5
function view() // функция показа
{
$Messages=file($file_gb); //ссылка на файл с данными
echo "<p><table width=100%>"; // создаётся таблица
$i=0; // изначально данная переменная имеет значение 0
for($i=$last; $i<count($Messages); $i++) echo // для сообщений с
// первой по последнюю поочереди
"<tr><td>$Messages[$i]</td></tr>"; // выводить их на экран (простите
// мне мой нерусский )
}
if (!isset($Post)) // если переменная $post не установлена (логично предположить, что это название сообщения или что то типа того),
{
echo "<table width=100% border=1"; // то открыть табло
echo "<tr><td>New Message<form method=post // надпись и кнопочка
action=$SCRIPT_NAME>"; // результат нажатия кнопочки присваивается переменной $script_name
echo "<textarea name=mes cols=30 rows=3 wrap=virtual></textarea> // создаётся поле для текста
<br>
<br>
<input type=text name=mes>
<br>
<br>
<input name=radio_button type=radio value=rb1 checked>
Radio button 1 // лучше так не пиши на всякий случай
<input name=radio_button type=radio value=rb2 >
Radio button 2 // это х з что за радио такое, короче это радио ))
<br>
<br>
<input name=ch_box1 type=checkbox value=chb1 checked>
Check box 1 // такое в скриптах писать вообще нельзя.
<input name=ch_box2 type=checkbox value=chb2 > // это две строчки для ввода данных
Check box 2 // такое в скриптах писать вообще нельзя.
<br>
<br>
<input type=submit name=Post> </td></tr>"; // тут у тебя косяк. не post, а $perem->post; подробнее внизу напишу.
echo "</table></form>";
view(); // показать
}
else // иначе
{
if(file_exists($file_tmp)) die("fatal error!"); // если временное файло существует (true), то выйти с сообщением об ошибке
if(copy($file_gb, $file_tmp)) // если происходит копирование из файла
//основного в резервный, то
{
if($w=fopen($file_gb, "w")) // если основное файло открыто для
//записи, то
{
fwrite($w,"[".date("d.m.Y. H:i:s")."]". strip_tags($mes)."\n"); // то
// записать в него дату и сделать допустимыми
//только те хтмл-тэги, которые используются в
//сообщении (объясню позже)
if(!$r = fopen($file_tmp,"r")) die("can't"); // если резервное файло
// открыто для чтения, то отморозить посетителя
// PS: ну его нафиг )) обойдётся )
while($mes=fgets($r,10240)) // это php считывает сообщение с
// первого символа по последний
{
fputs($w,$mes); // сообщение вставляется в файло (заметь условие)
}
fclose($r); // закрыть файло для чтения
fclose($w); // закрыть файло для записи
unlink($file_temp); // транклюкировать временный файл ))
}
}
echo "Message has been submitted succesfully!"; // вывести сообщение
// сообщение было сдано успешно ))
view(); // показать ё
}
?>
Короче дальше лирическое отступление. Ты косячница!! ГДЕ в начале файла команда require с указанием файла-хранителя используемых здесь переменных и функций?? или что, у тебя переменная $post из ниоткуда взялась?? Это первое. Если ты что-то берёшь из другого файла, то есть переменная (тот же $post) объявляется в другом файле, то пишешь не просто $post, а $perem->post; То есть ссылаешься на переменную из другого файла. Откуда взялась переменная $last?? Опять же.. Я не считаю тебя совсем ламером, и думаю что это они есть где-то. Напиши в начале require("путь к файлу источнику"); Короче покажи чё у тебя в файле-источнике написано, исправляй ошибки, и пиши на асю 2221740, потрещим. Можешь на меня тоже сурово наехать )). Я сам в общем то начинающий и могу ругаться зря, за что заслуженно получу люлей. Но на всякий случай буду ругаться как следует. |
|
Вернуться к началу |
|
|
Alexander _shaman
Зарегистрирован: 01.09.2008 Сообщения: 3 Откуда: murmansk
|
|
|
|
Ещё я забыл про strip_tags(). в скобках указываешь хтмл-тэги, которые можно использовать в сообщении. Если никаких нельзя, то просто вставляешь $mes, то есть допускаешь само сообщение, но можно добавить ещё смайлы и всю фигню. Кстати, а переменная $mes откуда взялась?? Почему не определила нихрена?? Если хочешь порадовать препода, то защити от ошибок и предусмотри реакцию на ввод пустого сообщения. Короче пефы, мне самому щас врадость покопаться во кодах |
|
Вернуться к началу |
|
|
Alexander _shaman
Зарегистрирован: 01.09.2008 Сообщения: 3 Откуда: murmansk
|
|
|
|
надеюсь, у тебя апач то стоит на машине?? |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Цитата: |
Только в этом архиве нет файла config.php!!
|
Там только переменные для подключения к БД. Открой любой файл и там где идут строки подключения к БД будут эти 4 переменные. Просто присвой им значения в файле config.php
Вот таблица для гостевой книги
CREATE TABLE gb(
ID INT NOT NULL AUTO_INCREMENT ,
UNAME CHAR( 40 ),
t TEXT,
APR INT DEFAULT 0,
PRIMARY KEY ( ID )
)
gb_show.php – основной сценарий, выводящий гостевую книгу и форму для добавления нового сообщения
gb_add.php – добавляет новое сообщение в гостевую книгу
gb_service.php – служебный сценарий, удаляющий спам и одобряющий нормальные сообщения
Первый сценарий показывает только одобренные сообления, второй только добавляет новое сообщене. При добавлении сообщения админу отправляется по мылу текст сообщения и он может его или одобрить или удалить. Это ссылки на последний сценарий. |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Цитата: |
При отправке данных ничего не отправляется и не отображается.
|
Сценарий рабочий 100%. Может были какие-то опечатки при верстке, но я сам их пишу, проверяю и вставляю в книгу. Если у тебя такая проблема то проверь включена ли register_globals. Скорее всего что нет. Тогда добавь в начало сценария след код:
foreach($HTTP_POST_VARS as $key => $value)
eval("$".$key."='".$value."';");
foreach($HTTP_GET_VARS as $key => $value)
eval("$".$key."='".$value."';");
http://www.dkws.org.ua/phpbb2/viewtopic.php?t=1314 |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Владимир_(zox)
Зарегистрирован: 22.10.2008 Сообщения: 1
|
|
|
|
Здравствуйте! Вот решил изучать php и взял вашу книгу. вроде дела пока идут не плохо, но вот проблема решил попробовать по вашему описанию зделать гостевую...вроде всё правильно, но пишет ошибку я уже замучился с этой гостевой
Вот код вроде всё как по книжки...
<?
echo "<html><head><title>guestbook</title></head><body>";
echo "<h1>Гостевая /h1>";
$file_gb="./gbook/gb.txt";
$file_tmp="./gbook/gb_tmp.txt";
$Max=50;
function view()
{
$Messages=file($file_gb);
echo "<p><table width=100%>";
$i=0;
foreach ( $messages as $v)
{
$i++
if ($i % 2 = = 0) echo "<tr><td>$v</td></tr>";
else echo "<tr><td bgcolor=gray>$v</td></tr>";
if ($i=$Max) break;
}
}
if (!isset($Post))
{
echo "<table width=100% border=1>";
echo "<tr><td><h2>новое</h2><form method=post action=$SCRIPT_NAME>";
echo "Email: <input type=text name=email>";
echo "ваш сайт: <input type=text name=mes> <input type=submit name=Post> </td></tr>";
echo "</table></form>";
view();
}
else
{
if(file_exists($file_tmp)) die("fatal error!");
if(copy($file_gb, $file_tmp))
{
if($w=fopen($file_gb, "w"))
{
flock ($w,2);
fwrite ($w,"[".date ("d.m.Y H:i:s") .$email."]". strip_tags ($mes)."\n");
if(!$r = fopen($file_tmp,"r")) die("can't open file");
flock ($r,1);
while($mes=fgets($r,10240))
{
fputs($w,$mes);
}
flock ($r,3);
fclose($r);
flock ($w,3);
fclose($w);
unlink($file_temp);
}
}
echo "Message has been submitted succesfully!";
view();
}
?>
Вожу http://localhost/gbook/gbook.php он пишет ошибку....
Ещё вопрос: ведь должно быть 3 файла ????
gb.txt
gb_tmp.txt
gbook.php
Помогите неопытному...
|
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Используй ту галерею, которую я выложил выше! |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
|
|
 Главная страница сайта
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|