Объединенный Открытый Проект - Сайт для Настоящих Компьютерщиков

Объединенный Открытый Проект

Сайт для Настоящих Компьютерщиков

; Логин:
  Пароль:
Обычный
Безопасный
Запомнить пользователя



Зарегистрироваться
Забыли пароль?
 
 
 
Объединенный Открытый Проект »   Программирование »   PHP »   Написание гостевой
RSS

Написание гостевой

В чем ошибка?

Текущий рейтинг темы: Нет

<<Назад  Вперед>>Страницы: 1 * 2
Модератор: wsx
Печать
 
ICETD
Новичок


Всего сообщений: 33
Рейтинг пользователя: 0





Дата регистрации на форуме:
11 июня 2004
Гостевая тестируется на хостинге. Права выставлены правильно. Но ошибки именно в коде. Я еще не знаю нормально PHP, еще изучаю.
ICETD
Новичок


Всего сообщений: 33
Рейтинг пользователя: 0





Дата регистрации на форуме:
11 июня 2004
Все равно не работает. Я разместил такой код:
<?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
Лично я не совсем понимаю, что за переменная $nom такая и где она в первый раз задается...
ICETD
Новичок


Всего сообщений: 33
Рейтинг пользователя: 0





Дата регистрации на форуме:
11 июня 2004
Еще вопрос насчет этого кода - explode("|" . Это означает, что "|" является разделителем информации, хранящейся в файле данных? А нельзя ли это заменить, например, на "fdgdkgir56546" ? А то у меня в гостевой можно подделать ответ админа, если ввести "|" в поле сообщения.
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик

Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
Вообще, лучше сделать по-другому: заменить этот символ на его HTML-код. Тогда пользователю он будет выводиться как обычно, а скрипт не будет воспринимать его как разделитель.
Для того вставь после строки
$text=str_replace("\n","<br>",$text);
строку
$text=str_replace("|","&#124",$text);

P.S. Если что-то не работает, то так и пиши: происходит то-то, или выдается сообщение об ошибке такое-то, а то просто "не работает" не несет в себе никакого смысла.
ICETD
Новичок


Всего сообщений: 33
Рейтинг пользователя: 0





Дата регистрации на форуме:
11 июня 2004
Не работает, т.е. пока гостевая не отображается. Если я убираю php код, то форма для отправки то отображается, но с кодом php нет. Какая-то ошибка в коде есть.
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик

Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
У тебя теги несимметричные: в начале <?php, а в конце - просто ?>
ICETD
Новичок


Всего сообщений: 33
Рейтинг пользователя: 0





Дата регистрации на форуме:
11 июня 2004
Дело не в этом. Во многих php файлах код открывается <?php и заканчивается ?> . Вот например, такой файл работает: <?php
include ("file.php");
?>
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик

Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
В общем, там было несколько синтаксических ошибок (причем когда я запустил этот код у себя, все они корректно выдавалсиь).
Вот исправленная версия:

<?

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
Да, спасибо, теперь отображается гостевая, но при попытке отправить сообщение выдается : Method Not Allowed
The requested method POST is not allowed for the URL /msg.txt.
На msg.txt выставлял разные права, не помогает.
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик

Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
Что странное... Вообще, php-файл должен называться gb.php, а в <FORM> должно быть прописано <FORM action="gb.php">
ICETD
Новичок


Всего сообщений: 33
Рейтинг пользователя: 0





Дата регистрации на форуме:
11 июня 2004
Спасибо, теперь сообщения отправляются. Только после отправки приходится возвращаться назад, иначе просто видно пустую страницу. Куда нужно вставить код перенаправления? Или какой код?
ICETD
Новичок


Всего сообщений: 33
Рейтинг пользователя: 0





Дата регистрации на форуме:
11 июня 2004
Я еще добавил поле "Ваш ник", все работает, но код перенаправления нужно куда-то вставить.
ICETD
Новичок


Всего сообщений: 33
Рейтинг пользователя: 0





Дата регистрации на форуме:
11 июня 2004
Я решил эту проблему. Вставил код: Header("location:gb.php"); .
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик

Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
Странно, по идее, сразу после отправки сообщения должен выводиться список сообщений и форма.
Впрочем, перенаправление действительно лучше сделать, в противном случае если пользователь нажмет кнопку "Обновить", то сообщение будет отправляться еще раз.
ICETD
Новичок


Всего сообщений: 33
Рейтинг пользователя: 0





Дата регистрации на форуме:
11 июня 2004
Остались две нерешенные проблемы: нужно, чтобы новые сообщения были сверху и чтобы на каждой странице было не более 10 сообщений, а не все вместе. А сейчас при отправке сообщения старые остаются на верху и новое внизу.
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик

Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
1. Используй функцию array_reverse к массиву сообщений $data перед циклом foreach
2. Простое решение проблемы - цикл for с параметром, изменяющимся от 0 до 9, но тогда остальные сообщения станут вообще недоступны. А так, надо будет писать нормальное разбиение на страницы - один из самых неприятных моментов при разработке скриптов.
ICETD
Новичок


Всего сообщений: 33
Рейтинг пользователя: 0





Дата регистрации на форуме:
11 июня 2004
$data = array_reverse($data);
Добавил такой код и новые сообщения сверху. Осталось написать код разбиения на страницы и добавить смайлы. Также при отправки сообщения я хочу сделать возможность ставить галочки напротив таких пунктов: просто посетитель, специалист, случайный прохожий и типа этого. Т.е. кем себя считает посетитель. Это легко сделать, сложнее написать код для разбиения страниц.
ICETD
Новичок


Всего сообщений: 33
Рейтинг пользователя: 0





Дата регистрации на форуме:
11 июня 2004
Пока так и не понял, куда можно вставить код для разбиения сообщений на страницы. Код гостевой (кроме кода формы):

<?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
Код, который будет формировать ссылки для перехода на другие страницы, надо вставлять перед вот этими строками:
$data = array_reverse($data);
foreach ($data as $msg)
А сам цикл foreach замени на for с параметром от $start, до $start+$count, где переменная start передается через GET-запрос (если ее нет, то она считается равной нулю и выводим последние сообщения), а $count - это количество сообщений на 1 странице.
<<Назад  Вперед>>Страницы: 1 * 2
Модератор: wsx
Печать
Объединенный Открытый Проект »   Программирование »   PHP »   Написание гостевой
RSS
Быстрый переход в раздел:


Время выполнения скрипта: 0.0280. Количество выполненных запросов: 18, время выполнения запросов 0.0136