Написание гостевойВ чем ошибка?
Текущий рейтинг темы: Нет
| ICETD
Новичок
Всего сообщений: 33 Рейтинг пользователя: 0
Дата регистрации на форуме: 11 июня 2004
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 4 ноября 2004 19:55
Гостевая тестируется на хостинге. Права выставлены правильно. Но ошибки именно в коде. Я еще не знаю нормально PHP, еще изучаю. | | | |
| ICETD
Новичок
Всего сообщений: 33 Рейтинг пользователя: 0
Дата регистрации на форуме: 11 июня 2004
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 4 ноября 2004 20:14 Сообщение отредактировано: 4 ноября 2004 20:15
Все равно не работает. Я разместил такой код:
<?php
if ($_POST['text']) {
$fh=fopen("msg.txt","a");
flock($fh,2);
$time=time();
$email=strip_tags($_POST['email']);
$text=strip_tags($_POST['text']);
$text=str_replace("\n","<br>",$text);
fputs($fh,"$time|$email|$text\n")
fclost($fh);
}
$data=file("msg.txt");
foreach ($data as $msg) {
list($time,$email,$text)=explode("|",$msg);
echo date("j F Y",$time)." - <a href=\"mailto:$email\">$email</a><br>$text<hr>
}
?>
<form action="gb.php" method=POST>E-mail: <input type=text name=email><br>Сообщение: <textarea name="text"></textarea><br><input type=submit value="Отправить">
</form> | | | |
| 4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79
Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 4 ноября 2004 20:18
Лично я не совсем понимаю, что за переменная $nom такая и где она в первый раз задается... | | | |
| ICETD
Новичок
Всего сообщений: 33 Рейтинг пользователя: 0
Дата регистрации на форуме: 11 июня 2004
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 4 ноября 2004 20:23
Еще вопрос насчет этого кода - explode("|" . Это означает, что "|" является разделителем информации, хранящейся в файле данных? А нельзя ли это заменить, например, на "fdgdkgir56546" ? А то у меня в гостевой можно подделать ответ админа, если ввести "|" в поле сообщения. | | | |
| 4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79
Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 4 ноября 2004 21:31 Сообщение отредактировано: 4 ноября 2004 21:32
Вообще, лучше сделать по-другому: заменить этот символ на его HTML-код. Тогда пользователю он будет выводиться как обычно, а скрипт не будет воспринимать его как разделитель.
Для того вставь после строки
$text=str_replace("\n","<br>",$text);
строку
$text=str_replace("|","|",$text);
P.S. Если что-то не работает, то так и пиши: происходит то-то, или выдается сообщение об ошибке такое-то, а то просто "не работает" не несет в себе никакого смысла. | | | |
| ICETD
Новичок
Всего сообщений: 33 Рейтинг пользователя: 0
Дата регистрации на форуме: 11 июня 2004
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 4 ноября 2004 22:12
Не работает, т.е. пока гостевая не отображается. Если я убираю php код, то форма для отправки то отображается, но с кодом php нет. Какая-то ошибка в коде есть. | | | |
| 4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79
Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 4 ноября 2004 23:41
У тебя теги несимметричные: в начале <?php, а в конце - просто ?> | | | |
| ICETD
Новичок
Всего сообщений: 33 Рейтинг пользователя: 0
Дата регистрации на форуме: 11 июня 2004
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 5 ноября 2004 2:23 Сообщение отредактировано: 5 ноября 2004 2:25
Дело не в этом. Во многих php файлах код открывается <?php и заканчивается ?> . Вот например, такой файл работает: <?php
include ("file.php");
?> | | | |
| 4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79
Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 5 ноября 2004 22:32 Сообщение отредактировано: 5 ноября 2004 22:47
В общем, там было несколько синтаксических ошибок (причем когда я запустил этот код у себя, все они корректно выдавалсиь).
Вот исправленная версия:
<?
if ($_POST['text']) {
$fh=fopen("msg.txt","a");
flock($fh,2);
$time=time();
$email=strip_tags($_POST['email']);
$text=strip_tags($_POST['text']);
$text=str_replace("\n","<br>",$text);
fputs($fh,"$time|$email|$text\n");
fclose($fh);
}
$data=file("msg.txt");
foreach ($data as $msg) {
list($time,$email,$text)=explode("|",$msg);
echo date("j F Y",$time)." - <a href=\"mailto:$email\">$email</a><br>$text<hr>";
}
?>
<form action="gb.php" method=POST>E-mail: <input type=text name=email><br>Сообщение: <textarea name="text"></textarea><br><input type=submit value="Отправить">
</form>
| | | |
| ICETD
Новичок
Всего сообщений: 33 Рейтинг пользователя: 0
Дата регистрации на форуме: 11 июня 2004
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 5 ноября 2004 22:52
Да, спасибо, теперь отображается гостевая, но при попытке отправить сообщение выдается : Method Not Allowed
The requested method POST is not allowed for the URL /msg.txt.
На msg.txt выставлял разные права, не помогает. | | | |
| 4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79
Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 6 ноября 2004 15:58
Что странное... Вообще, php-файл должен называться gb.php, а в <FORM> должно быть прописано <FORM action="gb.php"> | | | |
| ICETD
Новичок
Всего сообщений: 33 Рейтинг пользователя: 0
Дата регистрации на форуме: 11 июня 2004
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 6 ноября 2004 19:53
Спасибо, теперь сообщения отправляются. Только после отправки приходится возвращаться назад, иначе просто видно пустую страницу. Куда нужно вставить код перенаправления? Или какой код? | | | |
| ICETD
Новичок
Всего сообщений: 33 Рейтинг пользователя: 0
Дата регистрации на форуме: 11 июня 2004
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 6 ноября 2004 20:04
Я еще добавил поле "Ваш ник", все работает, но код перенаправления нужно куда-то вставить. | | | |
| ICETD
Новичок
Всего сообщений: 33 Рейтинг пользователя: 0
Дата регистрации на форуме: 11 июня 2004
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 7 ноября 2004 1:07 Сообщение отредактировано: 7 ноября 2004 1:29
Я решил эту проблему. Вставил код: Header("location:gb.php"); .
| | | |
| 4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79
Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 7 ноября 2004 14:25
Странно, по идее, сразу после отправки сообщения должен выводиться список сообщений и форма.
Впрочем, перенаправление действительно лучше сделать, в противном случае если пользователь нажмет кнопку "Обновить", то сообщение будет отправляться еще раз. | | | |
| ICETD
Новичок
Всего сообщений: 33 Рейтинг пользователя: 0
Дата регистрации на форуме: 11 июня 2004
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 7 ноября 2004 20:23
Остались две нерешенные проблемы: нужно, чтобы новые сообщения были сверху и чтобы на каждой странице было не более 10 сообщений, а не все вместе. А сейчас при отправке сообщения старые остаются на верху и новое внизу. | | | |
| 4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79
Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 7 ноября 2004 21:46
1. Используй функцию array_reverse к массиву сообщений $data перед циклом foreach
2. Простое решение проблемы - цикл for с параметром, изменяющимся от 0 до 9, но тогда остальные сообщения станут вообще недоступны. А так, надо будет писать нормальное разбиение на страницы - один из самых неприятных моментов при разработке скриптов. | | | |
| ICETD
Новичок
Всего сообщений: 33 Рейтинг пользователя: 0
Дата регистрации на форуме: 11 июня 2004
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 7 ноября 2004 23:58
$data = array_reverse($data);
Добавил такой код и новые сообщения сверху. Осталось написать код разбиения на страницы и добавить смайлы. Также при отправки сообщения я хочу сделать возможность ставить галочки напротив таких пунктов: просто посетитель, специалист, случайный прохожий и типа этого. Т.е. кем себя считает посетитель. Это легко сделать, сложнее написать код для разбиения страниц. | | | |
| ICETD
Новичок
Всего сообщений: 33 Рейтинг пользователя: 0
Дата регистрации на форуме: 11 июня 2004
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 9 ноября 2004 15:11
Пока так и не понял, куда можно вставить код для разбиения сообщений на страницы. Код гостевой (кроме кода формы):
<?php
if ($_POST['text']) {
$fh=fopen("xxx.dat","a");
rsort($a);
flock($fh,2);
$time=time();
$nik=strip_tags($_POST['nik']);
$IP=$HTTP_SERVER_VARS["REMOTE_ADDR"];
$city=strip_tags($_POST['city']);
$about=strip_tags($_POST['about']);
$url=strip_tags($_POST['url']);
$email=strip_tags($_POST['email']);
$text=strip_tags($_POST['text']);
$text=str_replace("\n","
",$text);
Header("location:new.php");
fputs($fh,"$time|xxx|$nik|xxx|$url|xxx|$email|xxx|$text|xxx|$IP|xxx|$city|xxx|$about\n");
fclost($fh);
}
$data=file("xxx.dat");
$data = array_reverse($data);
foreach ($data as $msg)
{
list($time, $nik, $url, $email, $text, $IP, $city, $about)=explode("|xxx|",$msg);
echo date ("H.i.s d.m.Y ",$time)."
Автор(<font size=1 color=#FF0000>$IP</font>):$nik ($about)
Из города $city
Сайт автора: <a href=\"$url\">$url</a>
E-mail: <a href=\"mailto:$email\">$email</a>
Сообщение:
$text <hr>";
}
?>
| | | |
| 4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79
Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 9 ноября 2004 19:27
Код, который будет формировать ссылки для перехода на другие страницы, надо вставлять перед вот этими строками:
$data = array_reverse($data);
foreach ($data as $msg)
А сам цикл foreach замени на for с параметром от $start, до $start+$count, где переменная start передается через GET-запрос (если ее нет, то она считается равной нулю и выводим последние сообщения), а $count - это количество сообщений на 1 странице. | | | |
Время выполнения скрипта: 0.0205. Количество выполненных запросов: 18, время выполнения запросов 0.0059
|