такая проблема: $data это сегодняшняя дата т.е 20.11.2014, другая переменная $datenorm - это конечная дата например 23.11.2014 если прописываю так, то удаляется сразу не дождавшись 23-его числа Код (Text): // Удаление номера $data = date('d.m.Y'); // дата системная $datenorm=$row['record_date']; // дата в бд if (strtotime($data) >= strtotime($datenorm)) { $result=mysql_query("DELETE FROM `".prefix."shinfo` WHERE user='".$USER->id."' and `icq`='".$t."'"); } по коду получается так если дата 20 число больше или равно 23 то удаляем, а почему сразу удаляет не пойму Добавлено спустя 8 минут 18 секунд: есть у кого догадки?
догадки две: 1. ты запутался в строковом представлении даты. сравнивать две даты в PHP лучше в unix timestamp, т.е. как целые числа. 2. твой запрос DELETE не имеет никакого отношения к датам. тупо удаляешь все записи пользователя (и при чем здесь icq вообще хз)
1. я запутался в условии т.е в if (strtotime($data) >= strtotime($datenorm)) { 2. запрос DELETE у меня верный
var_dump() сделай непостредственно перед тем if который у тебя говно. скажи просто по русски какое действие выполняет твой DELETE
1. говна у меня тут нет 2. DELETE удаляет номер ICQ из базы данных Добавлено спустя 35 секунд: ваш var_dump($datenorm) вот что выдал string(17) "23.11.2014 год" Добавлено спустя 7 минут 28 секунд: var_dump подставил под 2 переменные if (var_dump($data) >= var_dump($datenorm)) { выдало string(10) "20.11.2014" string(17) "23.11.2014 год" - ну почему то 20 числа происходит удаления
а откуда взялось значение $datenorm ? Добавлено спустя 3 минуты 41 секунду: впрочем неважно. попробуй сделать var_dump(strtotime($datenorm)) , и там же var_dump(strtotime($data)) теперь ты должен понять почему условие if не работает
$datenorm она выводит значени из бд, в бд таблице строка record_date Добавлено спустя 4 минуты 53 секунды: ого не ожидал вывело int(1416427200) bool(false)
это называется "отладка" ))) всегда так делай чтобы ОГО случалось пореже. в моей подписи есть хорошая ссылка про это. строка "23.11.2014 год" это не дата! функция strtotime() пытается из строки получить дату, но с твоей строкой она не справляется — получается значение false. это причина твоей ошибки в if() для хранения даты в MYSQL есть специальные типы данных. например тип DATE. а для даты+время есть DATETIME и TIMESTAMP. все эти типы выводят дату в формате ISO, как '2014-11-23' и такие значения отлично читаются strtotime()
исправил теперь выдает int(1416427200) int(1416686400) ну опять удаляет 20 числа, хотя должно 23 удалить Добавлено спустя 5 минут 16 секунд: тип ставил DATA все равно удаляет 20 числа, хотя должен удалить 23, а вообще я люблю для даты использовать тип varchar
дату надо хранить как дату и сравнивать как дату, а не как строку. это так просто ))) смотри результаты и делай выводы. у тебя два целых числа. какое из них больше? как сработает сравнение в if () ? машина не ошибается, это ты можешь давать ей неправильные команды.
большее число получается $datenorm оно 23 число, а $data 20 число Добавлено спустя 36 секунд: получается ведь верная функция? if (strtotime($data) >= strtotime($datenorm)) {
if это не функция, а условный оператор. выглядит нормально. если исходные данные нормальные, условие будет срабатывать правильно. еще раз, пожалуйста, непосредственно перед if: Код (PHP): var_dump($data); var_dump($datenorm); var_dump(strtotime($data)); var_dump(strtotime($datenorm));
вместо строки с DELETE временно поставь die('bingo!'); чтобы точно знать что условие сработало СЕЙЧАС, а не когда-то в прошлые разы.
получается вставить выше оператора if? var_dump($data); var_dump($datenorm); var_dump(strtotime($data)); var_dump(strtotime($datenorm)); if (strtotime($datenorm) > strtotime("3 day")){ Добавлено спустя 1 минуту 10 секунд: так? Код (Text): // Удаление номера $data = date('d.m.Y'); // дата системная $datenorm=$row['record_date']; // дата в бд if (var_dump(strtotime($data)) >= var_dump(strtotime($datenorm))) { die('bingo!'); } _________________________________ var_dump($data); var_dump($datenorm); var_dump(strtotime($data)); var_dump(strtotime($datenorm)); _________________________________ if (strtotime($datenorm) > strtotime("3 day")){ echo "<td class='p'><center>".$datenorm."</center></tr>"; }else{ $s=skin_tt('Ваш Номер ICQ -'.'<b>'.$t.'</b>'.' удалиться в течении 3-х дней поэтому распечатайте ваши номера'); echo "<td class='tp'><center>".$datenorm."".$s."</center></td>"; }
так вывело int(1416513600) int(1416772800) bingo! Добавлено спустя 1 минуту 33 секунды: это ниже идет, да ссори тут щас этот if не нужен, я понял как вставить так будет Код (Text): // Удаление номера $data = date('d.m.Y'); // дата системная $datenorm=$row['record_date']; // дата в бд var_dump($data); var_dump($datenorm); var_dump(strtotime($data)); var_dump(strtotime($datenorm)); if (var_dump(strtotime($data)) >= var_dump(strtotime($datenorm))) { die('bingo!'); }
спасибо поржал. ты шалунишка. вот это говно Код (PHP): if (var_dump(strtotime($data)) >= var_dump(strtotime($datenorm))) { die('bingo!'); } исправь на Код (PHP): var_dump($data); var_dump($datenorm); var_dump(strtotime($data)); var_dump(strtotime($datenorm)); if (strtotime($data) >= strtotime($datenorm)) { die('bingo!'); } я тебя не просил var_dump() ставить внутрь условия ))) пипец! и больше никаких var_dump() нигде не ставь, ок?
вывело вот это string(10) "21.11.2014" string(10) "24.11.2014" int(1416513600) int(1416772800) int(1416513600) int(1416772800) bingo! Добавлено спустя 1 минуту 16 секунд: ps даты поменялись потому что пришлось по новой номер добавить так как изначальный удалился
убрал, ссори) выдало вот это string(10) "21.11.2014" string(10) "24.11.2014" int(1416513600) int(1416772800) Добавлено спустя 1 минуту 37 секунд: Код (Text): // Удаление номера $data = date('d.m.Y'); // дата системная $datenorm=$row['record_date']; // дата в бд var_dump($data); var_dump($datenorm); var_dump(strtotime($data)); var_dump(strtotime($datenorm)); if (strtotime($data) >= strtotime($datenorm)) { die('bingo!'); } так добавил))) как вы написали)
вот. строка 'bingo!' не вывелась, значит условие не сработало, потому что 21е число меньше 24го. теперь можешь возвращать на место свой DELETE и удалить все var_dump(). на будущее: сделай дату в базе с типом DATE, тогда var_dump($datenorm) будет выглядеть как (string) 2014-11-24 аналогично когда тебе захочется получить дату из строки, пиши strtotime('2014-11-21') ок? это стандарт. Добавлено спустя 1 минуту 33 секунды: а вообще дата "сегодня" получается как strtotime('today') а дата+время "сейчас" получается как time()
хорошо, просто читать не удобно так 2014-11-21 тем более дата выводится на сайт(((( щас кстате проверю все ж удалится или нет))) интересно ведь :=) Добавлено спустя 2 минуты 18 секунд: вернул все на место Код (Text): // Удаление номера $data = date('d.m.Y'); // дата системная $datenorm=$row['record_date']; // дата в бд if (strtotime($datenorm) >= strtotime($data)) { $result=mysql_query("DELETE FROM `".prefix."shinfo` WHERE user='".$USER->id."' and `icq`='".$t."'"); } и опять удалилось, странно