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

Форум MySQL

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

 

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

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

тема: гостевая книга - удаление старых сообщений
 
 автор: kak   (07.10.2007 в 13:30)   письмо автору
 
 

А в гостевой которая на диске, можно, как нибудь, как в форуме старые сообщения подчищать.
Если Да.
Подскажите где вставить.
Заранее Спасибо.

   
 
 автор: kasmanaft   (07.10.2007 в 17:59)   письмо автору
 
   для: kak   (07.10.2007 в 13:30)
 

Что вставить? =]

Что за диск, гостевая?

   
 
 автор: kak   (07.10.2007 в 19:34)   письмо автору
 
   для: kasmanaft   (07.10.2007 в 17:59)
 

Диск который "идет" с книгой "Практика создания web сайтов"
на нем гостевая книга. Нужно чтобы старые сообщения удалялись.


Где нужно подправить?
Или дело не только в этих скриптах?
Нужно что-то еще сделать?


Добавление сообщения

<?
  
///////////////////////////////////////////////////
  // Web-приложения для книги "Профессиональный сайт на PHP 5"
  // 2004 (C) IT-студия SoftTime (http://www.softtime.ru)
  // Симдянов И.В. (simdyanov@softtime.ru)
  // Голышев С.В. (glsv@softtime.ru)
  // Кузнецов М.В. (kuznetsov@softtime.ru)
  ///////////////////////////////////////////////////

// Устанавливаем соединение с базой данных
include "../admin/config.php";
$error "";
$action "";
// Возвращаем значение переменной action, переданной в урле
$action $_POST["action"];
// Если оно не пусто - добавляем сообщение в базу данных
if (!empty($action)) 
{
  
// Проверяем сообщение на слишком длинные слова
  
$lenmsg strlen($msg);
  
$templen 0;
  
$temp strtok($msg" ");
  if (
strlen($msg)>60)
  {
    while (
$templen $lenmsg)
    { 
      if (
strlen($temp)>60)
      {
        
$action ""
        
$error $error."<LI>Текст сообщения содержит слишком много символов без пробелов\n";
        break;
      }
      else
      {
        
$templen $templen strlen($temp) + 1;
      }
      
$temp strtok(" ");            
    }       
  }
  
  
// Проверяем правильность ввода информации в поля формы
  
$_POST["msg"] = trim($_POST["msg"]);
  if (empty(
$_POST["msg"])) 
  {
    
$action ""
    
$error $error."<LI>Вы не ввели сообщение\n";
  }
  
$_POST["name"] = trim($_POST["name"]);
  if (empty(
$_POST["name"])) 
  {
    
$action ""
    
$error $error."<LI>Вы не ввели имя\n";
  }

  
// При помощи регулярных выражений проверяем правильность ввода e-mail
  
$_POST["email"]=trim($_POST["email"]);
  if(!empty(
$_POST["email"]))
  {
    if (!
preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i"$_POST["email"]))
    {
      
$action "";
      
$error $error."<LI>Неверно введен е-mail. Введите e-mail в виде <i>something@server.com</i> \n";
    }
  }
  
// Обрабатываем HTML-тэги и скрипты в сообщении и информации
  // об авторе, ограничиваем объём сообщения
  
$name substr($_POST["name"],0,32);
  
$name htmlspecialchars(stripslashes($name));
  
$city substr($_POST["city"],0,32);
  
$city htmlspecialchars(stripslashes($city));
  
$email substr($_POST["email"],0,32);
  
$email htmlspecialchars(stripslashes($email));
  
$url substr($_POST["url"],0,60);
  
$url htmlspecialchars(stripslashes($url));
  
$msg substr($_POST["msg"],0,1024);
  
$msg htmlspecialchars(stripslashes($msg));
  
  
// Добавляем протокол в url, если пользователь забыл это сделать сам
  
$url strtr($url"HTPF""htpf");
  if (
trim($url)!="")
  { 
    if (
strtolower((substr($url07))!="http://") && (strtolower(substr($url07))!="ftp://")) $url="http://".$url;
  }   
      
  if (empty(
$error)) 
  {
    
$msg nl2br($msg);
    
// Обрабатываем встроенные тэги
    
$msg str_replace("[u]""<u>"$msg);
    
$msg str_replace("[U]""<u>"$msg);
    
$msg str_replace("""<i>"$msg);
    
$msg str_replace("[I]""<i>"$msg);
    
$msg str_replace("""<B>"$msg);
    
$msg str_replace("[B]""<B>"$msg);
    
$msg str_replace("""<SUB>"$msg);
    
$msg str_replace("[SUB]""<SUB>"$msg);
    
$msg str_replace("""<SUP>"$msg);
    
$msg str_replace("[SUP]""<SUP>"$msg);
    
$msg str_replace("[/u]""</u>"$msg);
    
$msg str_replace("[/U]""</u>"$msg);
    
$msg str_replace("
"
"</i>"$msg);
    
$msg str_replace("[/I]""</i>"$msg);
    
$msg str_replace("
""</B>"$msg);
    
$msg str_replace("[/B]""</B>"$msg);
    
$msg str_replace("""</SUB>"$msg);
    
$msg str_replace("[/sub]""</SUB>"$msg);
    
$msg str_replace("""</SUP>"$msg);
    
$msg str_replace("[/sup]""</SUP>"$msg);
    
$msg eregi_replace("(.*)\\[url\\](.*)\\[/url\\](.*)","\\1<a href=\\2>\\2</a>\\3"$msg);
    
$msg str_replace("\n"" "$msg);
    
$msg str_replace("\r"" "$msg);
    
// Запрос к базе данных на добавление сообщения
    
$query "INSERT INTO guest VALUES (0,
                                        '
$name',
                                        '
$city',
                                        '
$email',
                                        '
$url',
                                        '
$msg',
                                        '-',
                                        NOW(),
                                        'show');"
;
    if(
mysql_query($query))
    {
      
// Если в конфигурационном файле 
      // $sendmail = true отправляем уведомление
      
if($sendmail)
      {
        
$thm "guestbook - a new post";
        
$msg "post: $msg\nname: $name";
        
mail($valmail$thm$msg);
      }
      
// Возвращаемся на главную страницу, если всё прошло удачно
      
print "<HTML><HEAD>\n";
      print 
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>\n";
      print 
"</HEAD></HTML>\n";
      exit();
    }
    else
    {
      
// Выводим сообщение об ошибке в случае неудачи
      
echo "<a href='index.php'>Вернуться</a>";
      echo(
"<P> Ошибка при добавлении сообщения</P>");
      echo(
"<P> $query</P>");
      exit();
    }
  }
}

if (empty(
$action)) 
{
  
$title="Добавить сообщение в гостевую книгу";   
  include 
"../util/top.php";   
?>
<h1 class=artnamepage>Гостевая книга</h1>
<p><a href="index.php" title="Вернуться в гостевую книгу">гостевая книга</a></p>
<form action=addrec.php method=post>
<input type=hidden name=action value=post>
<table>
  <tr>
    <td><p><b>Имя</b> *:</td>
    <td><input class=input type=text name=name value='<? echo $name?>'></td>
  </tr>   
  <tr>
    <td><p><b>Город:</b></td>
    <td><input class=input type=text name=city value='<? echo $city?>'></td>
  </tr>
  <tr>
    <td><p><b>E-mail:</b></td>
    <td><input class=input type=text name=email value='<? echo $email?>'></td>
  </tr>
  <tr>
    <td><p><b>URL:</b></td>
    <td><input class=input type=text size=40 name=url value='<? echo $url?>'></td>
  </tr>
  <tr>
    <td><p><b>Сообщение</b> *:</td>
    <td><textarea class=input cols=42 rows=5 name=msg><? echo $msg?></textarea></td>
  </tr>
  <tr>
    <td></td>
    <td><input class=button type="submit" value="Добавить"></td>
  </tr>
  </table>      
</form>
<?php
  
// Выводим сообщение об ошибке
  
if (!empty($error)) 
  {
    print 
"<p class=msg><b>Во время добавления записи произошли следующие ошибки:</b></p>";
    print 
"<UL><p>\n";
    print 
$error;
    print 
"</UL>\n";
  }
}
include 
"../util/bottom.php"
?>



Главная страница:

<?
  
///////////////////////////////////////////////////
  // Web-приложения для книги "Профессиональный сайт на PHP 5"
  // 2004 (C) IT-студия SoftTime (http://www.softtime.ru)
  // Симдянов И.В. (simdyanov@softtime.ru)
  // Голышев С.В. (glsv@softtime.ru)
  // Кузнецов М.В. (kuznetsov@softtime.ru)
  ///////////////////////////////////////////////////

  
$title="Гостевая книга";
  include 
"../admin/config.php";  
  include 
"../util/top.php";    
?>  
<h1 class=artnamepage>Гостевая книга</h1>
<p><a class=link href="addrec.php" title="">Написать сообщение</a></p>
<?
  
// Осуществляем соединение с базой данных
  // Извлекаем из строки запроса параметр start
  
if(isset($_GET['start'])) $start $_GET['start'];
  else 
$start "";
  
// Стартовая точка
  
if (empty($start)) $start 0;
  
// Стартовая точка не может быть меньше нуля
  
if ($start 0$start 0;
  
// Запрашиваем общее число отображаемых сообщений
  
$query "SELECT count(*) FROM guest 
            WHERE hide = 'show'"
;
  
$tot mysql_query($query);
  
// Запрашиваем сами сообщения
  
$query "SELECT * FROM guest 
            WHERE hide = 'show' 
            ORDER BY puttime DESC
            LIMIT 
$start$pnumber";
  
$thm mysql_query($query);
  if(!
$tot || !$thmputerror("Ошибка при выборке сообщений...");
  
// Общее число отображаемых сообщений
  
$countmysql_result($tot,0);
  
// Выводим ссылки на предыдущие и следующие сообщения
  
if ($start 0)  print "<a href=index.php?start=".($start-$pnumber).">Предыдущие</A>";
  if (
$count $start $pnumber)  print " <a href=index.php?start=".($start $pnumber).">Следующие</A>";
  while(
$themes mysql_fetch_array($thm))
  {
    
// Извлекаем переменные из базы данных
    
$name trim($themes['name']);
    
$city trim($themes['city']);
    
$email trim($themes['email']);
    
$url trim($themes['url']);
    
$msg trim($themes['msg']);
    
$answer trim($themes['answer']);
?>
  <table border="0" cellpadding="0" cellspacing="0" width=80%>
    <tr bgcolor="#DEDEDE">
      <td height="20"><p>&nbsp;&nbsp;<b><? echo $name?></b>&nbsp;
          <? if (!empty($city)) print "($city)"?></td>
      <td align="right"><p class=help>от: <? print $themes['puttime']; ?></td>
    </tr>
    <tr>
      <td><p class=help><? if (!empty($email)) print "e-mail: <a class=link href=mailto:$email>$email</a>"?>
          <? if (!empty($url))  print "www: <a class=link href='$url'>$url</a>"?></td>        
    </tr>
    <tr>
        <td><p><? echo $msg?><br>
        <?
        
if (!empty($answer) && $answer != "-" ) print "<p class=msg>Администратор:&nbsp$answer</p>";
        
?>
        </td>
    </tr>
</table><br>    
<?
  
}
  print 
'<a class=link href=addrec.php>Написать сообщение</A>';
  
// Выводим ссылки на предыдущие и следующие сообщения
  
if ($start 0)  print "<a href=index.php?start=".($start-$pnumber).">Предыдущие</a>";
  if (
$count $start $pnumber)  print " <a  href=index.php?start=".($start $pnumber).">Следующие</a>";

include 
"../util/bottom.php";    
?>

   
 
 автор: kasmanaft   (08.10.2007 в 00:23)   письмо автору
 
   для: kak   (07.10.2007 в 19:34)
 

В index.php, где-нибудь в начале, можно выпослить такой запрос
mysql_query("DELETE FROM guest WHERE (puttime < ???)");

В зависимости от того, в каком формате хранится puttime, вопросы нужно на что-то заменить. (текущее время минус срок службы :) )

   
 
 автор: kak   (08.10.2007 в 10:49)   письмо автору
 
   для: kasmanaft   (08.10.2007 в 00:23)
 

Спасибо Огромное.
Буду пробовать :)

   
 
 автор: kak   (08.10.2007 в 10:57)   письмо автору
 
   для: kasmanaft   (08.10.2007 в 00:23)
 

У меня выставлено: puttime datetime Нет 0000-00-00 00:00:00
Где вы указали вопросы, как правильно записать?

   
 
 автор: kasmanaft   (08.10.2007 в 14:22)   письмо автору
 
   для: kak   (08.10.2007 в 10:57)
 

Вот так, например, можно удалить сообщения старше 10 дней
DELETE FROM `guest` WHERE `puttime` < NOW() - INTERVAL 10 DAY

   
 
 автор: kak   (08.10.2007 в 20:06)   письмо автору
 
   для: kasmanaft   (08.10.2007 в 14:22)
 

Спасибо, Спасибо...

   
 
 автор: kak   (08.10.2007 в 20:30)   письмо автору
 
   для: kasmanaft   (08.10.2007 в 14:22)
 

Если в начале index.php пишу DELETE FROM `guest` WHERE `puttime` < NOW() - INTERVAL 10 DAY
Не работает, если в середине то ошибку выборки сообщений пишет.
Не могли бы Вы точно указать где вставлять в index.php?

   
 
 автор: cheops   (08.10.2007 в 12:47)   письмо автору
 
   для: kak   (07.10.2007 в 13:30)
 

За какой период хотите удалять сообщения?

   
 
 автор: kak   (08.10.2007 в 20:04)   письмо автору
 
   для: cheops   (08.10.2007 в 12:47)
 

-

   
 
 автор: kak   (08.10.2007 в 20:04)   письмо автору
 
   для: cheops   (08.10.2007 в 12:47)
 

Ну, например которым более 6 мес.

   
 
 автор: mehelson   (09.10.2007 в 05:56)   письмо автору
 
   для: kak   (08.10.2007 в 20:04)
 

Подставте запрос в этом месте :

<? 
...
  
// Осуществляем соединение с базой данных 

 // Удаляем записи старше 6 месяцев
 
$query mysql_query("DELETE FROM `guest` WHERE `puttime` < NOW() - INTERVAL 6 MONTH");
 if(!
queryputerror("Ошибка...");

  
// Извлекаем из строки запроса параметр start
  
if(isset($_GET['start'])) $start $_GET['start'];
...
?>

   
 
 автор: kak   (09.10.2007 в 09:15)   письмо автору
 
   для: mehelson   (09.10.2007 в 05:56)
 

Спасибо .
попробую

   
 
 автор: kak   (09.10.2007 в 10:42)   письмо автору
 
   для: mehelson   (09.10.2007 в 05:56)
 

Спасибо. Все работает.

А вы не знаете, как сделать чтобы выводился не весь текст сообщений, а ссылки на сообщения (чтобы у каждого сообщения своя страница была)
пример (ссылка): форум не работает
перейдя по ней (ссылке) видно заголовок и полный текст сообщения


Из того , что я уже имею можно сделать?

   
Rambler's Top100
вверх

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