|
автор: ВЛ (19.05.2005 в 01:22) |
|
| Вот есть такая гостевая и не пойму, какой код и где дописать, чтобы на каждой странице было по 10 сообщений и были ссылки на другие страницы гостевой.
Код гостевой:
<?
mysql_connect("mysql.xxx.ru", "dbu_xxx", "xxx");
mysql_select_db("db_xxx");
if (isSet($name)) {
$name = HTMLSpecialChars($name);
$email = HTMLSpecialChars($email);
$msg = HTMLSpecialChars($msg);
if ($name!="" and $msg!="") {
$sql = "insert into msgs (name, email, msg) values ('$name', '$email', '$msg')";
mysql_query($sql);
mysql_close();
header("Location: $SCRIPT_NAME");
exit;
}
}
?>
<html>
<head>
<title>Гостевая книга</title>
<style>
body {
font-family : Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size : 11pt;
}
h1 {
font-size : 14pt;
text-align : center;
}
</style>
</head>
<body>
<h1>Гостевая книга</h1>
<div align="center">
<form action="index.php" method="post">
Автор: <input type="text" name="name"> <br>
E-mail: <input type="text" name="email"> <br>
<textarea cols="50" rows="5" name="msg"></textarea> <br>
<input type="submit" value="Отправить">
</form>
</div>
<?
$sql = "select * from msgs order by id desc limit 50";
$res = mysql_query($sql);
mysql_close();
$n = mysql_num_rows($res);
for ($i=0; $i < $n; $i++):
$id = mysql_result($res, $i, "id");
$name = mysql_result($res, $i, "name");
$email = mysql_result($res, $i, "email");
$msg = mysql_result($res, $i, "msg"); ?>
<hr><b><a href="mailto:<?=$email?>"><?=$name?></a></b><br>
<i><?=$msg?></i>
<? endfor ?>
</body>
</html>
|
| |
|
|
|
|
|
|
автор: ВЛ (19.05.2005 в 19:45) |
|
|
для: cheops
(19.05.2005 в 12:48)
| | Спасибо вам, сейчас попробую сделать. | |
|
|
|
|
автор: ВЛ (19.05.2005 в 20:49) |
|
|
для: cheops
(19.05.2005 в 12:48)
| | Извините, так и не получается. Не пойму, куда какой код вставить. В этой статье - http://www.softtime.ru/info/articlephp.php?id_article=33 все понятно написано, но моя гостевая не работает, как надо. | |
|
|
|
|
|
|
|
для: ВЛ
(19.05.2005 в 20:49)
| | Приведите код, который не работает как надо (лучше прикрепить его в виде отдельного файла к сообщению), так же неплохо, если вы приведёте структуру таблицы msgs, чтобы мы могли легко воссоздать эту таблицу. Оператор CREATE TABLE этой таблицы можно получить воспользовавшись запросом
| |
|
|
|
|
автор: ВЛ (20.05.2005 в 01:07) |
|
|
для: cheops
(20.05.2005 в 00:30)
| | Код книги, состоящей из одного файла, я привел в первом сообщении, а это код, создающий таблицу в базе данных:
CREATE TABLE msgs (
id int(11) NOT NULL auto_increment,
name varchar(50) NOT NULL default '',
email varchar(50) NOT NULL default '',
msg text,
PRIMARY KEY (id)
);
|
| |
|
|
|
|
|
|
|
для: ВЛ
(20.05.2005 в 01:07)
| | Используя Вашу таблицу вот Вам постраничная навигация гостевой книги
<?
include "config.php"; //связь с базой данных
$pnumber = 10; //кол-во сообщений на 1 страницу
if($page == "") $page=1;
$begin = ($page - 1)*$pnumber;
$guest = mysql_query("select * from msgs limit $begin, $pnumber;");
$total = mysql_query("select count(*) from msgs;");
echo "<p><b>";
if(guest && $total)
{
$tot = mysql_fetch_array($total);
$number = (int)($tot[0]/$pnumber);
if((float)($tot[0]/$pnumber)-$number != 0) $number++;
for($i = 1; $i<=$number; $i++) {
if($number == $i) {
if($page == $i) echo "[".(($i - 1)*$pnumber + 1)."-".$tot[0]."]";
// book.php - страница гост. книги
else echo "<a href=book.php?page=".$i." title='показать сообщения'>[".(($i - 1)*$pnumber + 1)."-".$tot[0]."]</a>";
} else {
if($page == $i) echo "[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]";
else echo "<a href=book.php?page=".$i." title='показать сообщения'>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a>";
}
}
echo "</p></b><table width=100% border=1>";
while($qst = mysql_fetch_array($guest)) {
$name = htmlspecialchars($qst['name']);
$email = htmlspecialchars($qst['email']);
$msg = htmlspecialchars($qst['msg']);
echo "<tr><td width='100%' bgcolor=#F0F0F0><b>$name</b>
e-mail: <a href=mailto:$email>$email</a></td></tr>
<tr valign='top'><td>$msg</td></tr>";
} echo "</table>";
} else { echo ("Ошибка при выборке сообщений..."); exit(); }
?>
|
| |
|
|
|
|
автор: ВЛ (20.05.2005 в 18:41) |
|
|
для: alik
(20.05.2005 в 01:56)
| | Спасибо, теперь работает, но осталась небольшая проблема: новые сообщения в конце книги, на последней странице, а нужно, чтобы на первой были. Знаю, есть такая функция fsort вроде. | |
|
|
|
|
|
|
|
для: ВЛ
(20.05.2005 в 18:41)
| | Измените строку
$guest = mysql_query("select * from msgs limit $begin, $pnumber;");
|
на
$guest = mysql_query("SELECT * FROM msgs ORDER BY id DESC LIMIT $begin, $pnumber;");
|
Но лучше всего добавить в таблицу поле, в котором будут хранится время добавления сообщения (дата) и сортировать по последнему добавлению (т.е. по дате) | |
|
|
|
|
автор: ВЛ (20.05.2005 в 19:48) |
|
|
для: alik
(20.05.2005 в 18:53)
| | Я добавил дату, но она неправильно отображается - стоит дата 1970 г.
Код:
if (isSet($name)) {
$name = HTMLSpecialChars($name);
$email = HTMLSpecialChars($email);
$msg = HTMLSpecialChars($msg);
$date = date("d.m.Y H:i", $row["datetime"]);
if ($name!="" and $msg!="") {
$sql = "insert into msgs (name, email, msg, date) values ('$name', '$email', '$msg', '$date')";
mysql_query($sql);
mysql_close();
header("Location: $SCRIPT_NAME");
exit;
}
}
$pnumber = 10;
if($page == "") $page=1;
$begin = ($page - 1)*$pnumber;
$guest = mysql_query("select * from msgs limit $begin, $pnumber;");
$total = mysql_query("select count(*) from msgs;");
echo "<p><b>";
if(guest && $total)
{
$tot = mysql_fetch_array($total);
$number = (int)($tot[0]/$pnumber);
if((float)($tot[0]/$pnumber)-$number != 0) $number++;
for($i = 1; $i<=$number; $i++) {
if($number == $i) {
if($page == $i) echo "[".(($i - 1)*$pnumber + 1)."-".$tot[0]."]";
else echo "<a href=index.php?page=".$i." title='ïîêàçàòü ñîîáùåíèÿ'>[".(($i - 1)*$pnumber + 1)."-".$tot[0]."]</a>";
} else {
if($page == $i) echo "[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]";
else echo "<a href=index.php?page=".$i." title='ïîêàçàòü ñîîáùåíèÿ'>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a>";
}
}
echo "</p></b><table width=100% border=1>";
while($qst = mysql_fetch_array($guest)) {
$name = htmlspecialchars($qst['name']);
$email = htmlspecialchars($qst['email']);
$msg = htmlspecialchars($qst['msg']);
$date = date("d.m.Y H:i", $row["datetime"]);
echo "<tr><td width='100%' bgcolor=#F0F0F0><b>$name</b>
e-mail: <a href=mailto:$email>$email</a> Отправлено: $date</td></tr>
<tr valign='top'><td>$msg</td></tr>";
} echo "</table>";
} else { echo ("Îøèáêà ïðè âûáîðêå ñîîáùåíèé..."); exit(); }
?>
<div align="center">
<form action="index.php" method="post">
Âàøå èìÿ: <input type="text" name="name"> <br>
Âàø E-mail: <input type="text" name="email"> <br>
<textarea cols="50" rows="5" name="msg"></textarea> <br>
<input type="submit" value="Ïåðåäàòü">
</form>
</div>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: ВЛ
(20.05.2005 в 19:48)
| | А если так:
$date = date("d.m.Y H:i", time());
|
Если Вы поставили в таблице поле типа даты, тогда лучше сделать так
insert into msgs (name, email, msg, date) values ('$name', '$email', '$msg', now())
|
now() - текущая дата | |
|
|
|