|
|
|
| Условие такое....
записи были добавлены 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;
}
|
удаляет вообще не понятно как :(
кто подскажет как соорудить? | |
|
|
|
|
|
|
|
для: virtus
(11.05.2006 в 13:35)
| | $date = $_POST['srok'] * 7;
$deldat = "DELETE FROM $mess WHERE date< now() - INTERVAL $date DAY"; | |
|
|
|
|
|
|
|
для: virtus
(11.05.2006 в 13:35)
| | Посмотрите пожалуйста синтаксис функции strtotime() на сайте http://www.php.net и удостоверьтесь, правильно ли вы её употребили. И еще - давайте на всякий случай уточним, в каком формате у вас записана дата в базе ? | |
|
|
|
|
|
|
|
для: DDK
(11.05.2006 в 14:11)
| | база в юникс времен / time(); / вроде верно.. я с того мануала и смотрел когда делал, может нельзя использовать "-" - хотя врядли :(
Trianon - не верно :( | |
|
|
|
|
|
|
|
для: virtus
(11.05.2006 в 14:55)
| | столбец имеет тип временной (timestamp) или целочисленный (int) ?
Если первое, то всё верно.
Если второе, то это следовало уточнить явно. В таком разе нужно написать WHERE FROM_UNIXTIME(date) < NOW() - INTERVAL $date DAY (в предположении, что $date - число дней.) | |
|
|
|
|
|
|
|
для: Trianon
(11.05.2006 в 15:11)
| | Trianon
все равно не работает! при выборе 1 недели - удаляет записи сделанные более одной недели назад :(
тип int | |
|
|
|
|
|
|
|
для: 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 в 13:35)
| | DDK - а какое число ты переводишь в юникстайм? | |
|
|
|
|
|
|
|
для: virtus
(11.05.2006 в 17:27)
| | Скрипт получает из формы число недель... нам нужно перевести число недель в секунды. Умножаем кол-во недель на кол-во часов в сутках и затем на кол-во секунд в часе (60*60=3600). Получаем кол-во секунд в заданном числе недель. | |
|
|
|
|
|
|
|
для: 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;
}
...
?>
|
Вот, вроде бы так... | |
|
|
|
|
|
|
|
для: DDK
(11.05.2006 в 17:53)
| | не верное что-то!!!
вот вывел deldat
DELETE FROM board_mess WHERE 1147356803-date>1146147203 | |
|
|
|
|
|
|
|
для: virtus
(11.05.2006 в 18:15)
| |
<?php
...
$date = $date * 24 * 3600;
$deldat = "DELETE FROM $mess. WHERE date > ". (time() - $date);
}
...
?>
|
никакая дополнительная защита от инъекций тут не нужна. Разве чтоб самому не забыть. Всё равно попытка умножить входной операнд на 24 придушит любую инъекцию нафиг. | |
|
|
|
|
|
|
|
для: Trianon
(11.05.2006 в 18:31)
| | так же не верно!!!
в данной ситуации DATE будет все время меньшей, нужно отнимать и от DATE
только как? | |
|
|
|
|
|
|
|
для: virtus
(11.05.2006 в 19:01)
| | Я так понял никто не знает как запрос поставить...
Может кто поможет другим путем? | |
|
|
|
|
|
|
|
для: virtus
(12.05.2006 в 14:07)
| | Всё должно идти. Если не идет - значит в таблице чехарда.
Приведите фрагмент дампа таблицы. | |
|
|
|
|
|
|
|
для: 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', '', '', '');
|
| |
|
|
|
|
|
|
|
для: 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="Óäàëèòü">
</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-х недельного срока удалил строго одну из записей. | |
|
|
|
|
|
|
|
для: Trianon
(12.05.2006 в 15:40)
| | СПАСИБО!!!! вот теперь я понял ;)
спасибочки | |
|
|
|