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

Форум MySQL

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

 

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

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

тема: Удаление записей из базы при условии ... подробнее..
 
 автор: virtus   (11.05.2006 в 13:35)   письмо автору
 
 

Условие такое....
записи были добавлены 1 неделю назад
записи были добавлены 2 недели назад
записи были добавлены 3 недели назад
записи были добавлены 4 недели назад
записи были добавлены 5 недель назад
сделал так:

<form action="" method=post>
<input type=hidden name=pict value="delo">
<select name="srok">
<option value=1>1</option>
<option value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
<option value=5>5</option>
</select>
<input type=submit value="Удалить">
</form>";
if ($_POST[pict] == "delo") {
$date = strtotime("-$_POST[srok] week");
$deldat = "DELETE FROM ".$mess." WHERE date<".$date;
}

удаляет вообще не понятно как :(
кто подскажет как соорудить?

   
 
 автор: Trianon   (11.05.2006 в 14:00)   письмо автору
 
   для: virtus   (11.05.2006 в 13:35)
 

$date = $_POST['srok'] * 7;
$deldat = "DELETE FROM $mess WHERE date< now() - INTERVAL $date DAY";

   
 
 автор: DDK   (11.05.2006 в 14:11)   письмо автору
 
   для: virtus   (11.05.2006 в 13:35)
 

Посмотрите пожалуйста синтаксис функции strtotime() на сайте http://www.php.net и удостоверьтесь, правильно ли вы её употребили. И еще - давайте на всякий случай уточним, в каком формате у вас записана дата в базе ?

   
 
 автор: virtus   (11.05.2006 в 14:55)   письмо автору
 
   для: DDK   (11.05.2006 в 14:11)
 

база в юникс времен / time(); / вроде верно.. я с того мануала и смотрел когда делал, может нельзя использовать "-" - хотя врядли :(
Trianon - не верно :(

   
 
 автор: Trianon   (11.05.2006 в 15:11)   письмо автору
 
   для: virtus   (11.05.2006 в 14:55)
 

столбец имеет тип временной (timestamp) или целочисленный (int) ?
Если первое, то всё верно.
Если второе, то это следовало уточнить явно. В таком разе нужно написать WHERE FROM_UNIXTIME(date) < NOW() - INTERVAL $date DAY (в предположении, что $date - число дней.)

   
 
 автор: virtus   (11.05.2006 в 17:48)   письмо автору
 
   для: Trianon   (11.05.2006 в 15:11)
 

Trianon
все равно не работает! при выборе 1 недели - удаляет записи сделанные более одной недели назад :(
тип int

   
 
 автор: DDK   (11.05.2006 в 16:21)   письмо автору
 
   для: virtus   (11.05.2006 в 14:55)
 

Тогда надо так:

<?php
...
if (
$_POST[pict] == "delo") { 
$date = (int) $date// Защищаемся от SQL-инъекции
$date $date 24 3600// Переводим в секунды, тобишь в unix-time
$deldat "DELETE FROM ".$mess." WHERE date<".$date

...
?>

   
 
 автор: virtus   (11.05.2006 в 17:27)   письмо автору
 
   для: virtus   (11.05.2006 в 13:35)
 

DDK - а какое число ты переводишь в юникстайм?

   
 
 автор: DDK   (11.05.2006 в 17:50)   письмо автору
 
   для: virtus   (11.05.2006 в 17:27)
 

Скрипт получает из формы число недель... нам нужно перевести число недель в секунды. Умножаем кол-во недель на кол-во часов в сутках и затем на кол-во секунд в часе (60*60=3600). Получаем кол-во секунд в заданном числе недель.

   
 
 автор: DDK   (11.05.2006 в 17:53)   письмо автору
 
   для: DDK   (11.05.2006 в 17:50)
 

А ! Вот маленький, но важный момент упустил... нужно немного изменить запрос:

<?php 
... 
if (
$_POST[pict] == "delo") { 
$date = (int) $date// Защищаемся от SQL-инъекции
$date $date 24 3600;
$deldat "DELETE FROM ".$mess." WHERE ".time()."-date>".$date

... 
?> 

Вот, вроде бы так...

   
 
 автор: virtus   (11.05.2006 в 18:15)   письмо автору
 
   для: DDK   (11.05.2006 в 17:53)
 

не верное что-то!!!
вот вывел deldat
DELETE FROM board_mess WHERE 1147356803-date>1146147203

   
 
 автор: Trianon   (11.05.2006 в 18:31)   письмо автору
 
   для: virtus   (11.05.2006 в 18:15)
 


<?php 
... 
$date $date 24 3600
$deldat "DELETE FROM $mess. WHERE date > ". (time() - $date); 

... 
?> 


никакая дополнительная защита от инъекций тут не нужна. Разве чтоб самому не забыть. Всё равно попытка умножить входной операнд на 24 придушит любую инъекцию нафиг.

   
 
 автор: virtus   (11.05.2006 в 19:01)   письмо автору
 
   для: Trianon   (11.05.2006 в 18:31)
 

так же не верно!!!
в данной ситуации DATE будет все время меньшей, нужно отнимать и от DATE
только как?

   
 
 автор: virtus   (12.05.2006 в 14:07)   письмо автору
 
   для: virtus   (11.05.2006 в 19:01)
 

Я так понял никто не знает как запрос поставить...
Может кто поможет другим путем?

   
 
 автор: Trianon   (12.05.2006 в 14:14)   письмо автору
 
   для: virtus   (12.05.2006 в 14:07)
 

Всё должно идти. Если не идет - значит в таблице чехарда.
Приведите фрагмент дампа таблицы.

   
 
 автор: virtus   (12.05.2006 в 14:50)   письмо автору
 
   для: Trianon   (12.05.2006 в 14:14)
 


CREATE TABLE board_mess (
  idprod int(11) NOT NULL auto_increment,
  idcat int(11) NOT NULL default '0',
  'date' int(11) default NULL,
  'name' varchar(255) NOT NULL default '',
  description text NOT NULL,
  kuda tinytext NOT NULL,
  price tinytext NOT NULL,
  city varchar(50) NOT NULL default '',
  raion_k varchar(255) NOT NULL,
  raion varchar(100) NOT NULL default '',
  street varchar(100) NOT NULL default '',
  ga varchar(100) NOT NULL default '',
  comun tinytext NOT NULL,
  who tinytext NOT NULL,
  torg tinytext NOT NULL,
  fio varchar(255) default NULL,
  phone varchar(100) NOT NULL default '',
  picture varchar(50) NOT NULL default '',
  picture1 varchar(50) NOT NULL default '',
  picture2 varchar(50) NOT NULL default '',
  PRIMARY KEY  (idprod)
) ENGINE=MyISAM;


INSERT INTO rus_board_mess VALUES (38, 2, 1147419929, 'егекнку', 'кнкун', '2', 'некунекунн', '', '0', '', '', '', '1', '1', '1', 'екункун', '11111111111111111111', '', '', '');
INSERT INTO rus_board_mess VALUES (35, 2, 1147419255, '!!!!', '', '2', '232323', '', '0', '', '', '', '1', '1', '1', '23232', '232323', '', '', '');
 

   
 
 автор: Trianon   (12.05.2006 в 15:40)   письмо автору
 
   для: virtus   (12.05.2006 в 14:50)
 

В Вашем примере нет записей, отличающихся датами хотя бы на неделю.
После изменения значений в поле date на 1146568913 и 1146568913 следующий скрипт

<form action="" method=post>
<select name="srok">
<option value=1>1</option>
<option value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
<option value=5>5</option>
</select>
<input type=submit value="&Oacute;&auml;&agrave;&euml;&egrave;&ograve;&uuml;">
</form>
<?
include 'config.inc.php';

$mess 'board_mess';
 if (isset(
$_POST['srok'])) {
$date $_POST['srok'] * 7;
$deldat "delete FROM $mess WHERE FROM_UNIXTIME(date) < now() - INTERVAL $date DAY";
mysql_query($deldat);
}
?>

при запуске и выборе 2-х недельного срока удалил строго одну из записей.

   
 
 автор: virtus   (12.05.2006 в 16:27)   письмо автору
 
   для: Trianon   (12.05.2006 в 15:40)
 

СПАСИБО!!!! вот теперь я понял ;)
спасибочки

   
Rambler's Top100
вверх

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