Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как разбить на страницы гостевую?
 
 автор: ВЛ   (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>

   
 
 автор: alik   (19.05.2005 в 02:46)   письмо автору
 
   для: ВЛ   (19.05.2005 в 01:22)
 

Прочитайте эту статью http://www.softtime.ru/info/articlephp.php?id_article=33

   
 
 автор: cheops   (19.05.2005 в 12:48)   письмо автору
 
   для: alik   (19.05.2005 в 02:46)
 

А так же тему по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3044

   
 
 автор: ВЛ   (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 все понятно написано, но моя гостевая не работает, как надо.

   
 
 автор: cheops   (20.05.2005 в 00:30)   письмо автору
 
   для: ВЛ   (19.05.2005 в 20:49)
 

Приведите код, который не работает как надо (лучше прикрепить его в виде отдельного файла к сообщению), так же неплохо, если вы приведёте структуру таблицы msgs, чтобы мы могли легко воссоздать эту таблицу. Оператор CREATE TABLE этой таблицы можно получить воспользовавшись запросом
SHOW CREATE TABLE msgs

   
 
 автор: ВЛ   (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)
);

   
 
 автор: alik   (20.05.2005 в 01:56)   письмо автору
 
   для: ВЛ   (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> &nbsp;
          &nbsp;&nbsp; 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 вроде.

   
 
 автор: alik   (20.05.2005 в 18:53)   письмо автору
 
   для: ВЛ   (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='&#239;&#238;&#234;&#224;&#231;&#224;&#242;&#252; &#241;&#238;&#238;&#225;&#249;&#229;&#237;&#232;&#255;'>[".(($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='&#239;&#238;&#234;&#224;&#231;&#224;&#242;&#252; &#241;&#238;&#238;&#225;&#249;&#229;&#237;&#232;&#255;'>[".(($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> &nbsp; 
          &nbsp;&nbsp; e-mail: <a href=mailto:$email>$email</a>&nbsp;&nbsp;Отправлено: $date</td></tr> 
         <tr valign='top'><td>$msg</td></tr>"; 
   } echo "</table>"; 
} else { echo ("&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#226;&#251;&#225;&#238;&#240;&#234;&#229; &#241;&#238;&#238;&#225;&#249;&#229;&#237;&#232;&#233;..."); exit(); } 
?> 
<div align="center">
<form action="index.php" method="post">
&#194;&#224;&#248;&#229; &#232;&#236;&#255;: <input type="text" name="name"> <br>
&#194;&#224;&#248; E-mail: <input type="text" name="email"> <br>
<textarea cols="50" rows="5" name="msg"></textarea> <br>
<input type="submit" value="&#207;&#229;&#240;&#229;&#228;&#224;&#242;&#252;">
</form>
</div>
</body>
</html>

   
 
 автор: alik   (20.05.2005 в 20:08)   письмо автору
 
   для: ВЛ   (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() - текущая дата

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования