Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> php + mysql (прибавить дату) 
:(
    Опции темы
Dmitry_177
Дата 17.12.2007, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



в таблице есть поле с датой, по умолчанию она NULL, т.е. при создании таблицы я этому полю указал(DEFAULT NULL).. Так вот мне нужно следующее: если нету даты, то к текущей дате прибавить например 1 год и записать ее в таблицу, если есть, то взять уже имеющуюся дату прибавить к ней год и записать.. Делаю я так:

Код
          $select_enddate_q = mysql_query("SELECT enddate FROM table WHERE id=".$_REQUEST['id']." LIMIT 1");
          $select_enddate_arr = mysql_fetch_array($select_enddate_q);
          if(empty($select_enddate_arr['enddate']))
            {
              mysql_query("UPDATE table SET enddate=ADDDATE(CURDATE(), INTERVAL 1 YEAR) WHERE id=".$_REQUEST['id']);
            }
          else
            {
              mysql_query("UPDATE table SET enddate=ADDDATE(".$select_enddate_arr['enddate'].", INTERVAL 1 YEAR) WHERE id=".$_REQUEST['id']);
            }


работает только когда нету даты.. если есть то год не прибавляется.. по идее в $select_enddate_arr['enddate'] хранится дата в том формате какая и нужна MySQL, она же от туда же и берется.. Но что-то не работает.. Подскажите пожалуйста..
PM MAIL   Вверх
Feldmarschall
Дата 17.12.2007, 00:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



сдается мне, что у тебя в запросе не дата, а арифметическое выражение...

а вообще, зачем тягать значение поля, если можно подставить его имя?
UPDATE table SET enddate=ADDDATE(enddate, INTERVAL 1 YEAR)

PM   Вверх
Dmitry_177
Дата 17.12.2007, 01:09 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Цитата

сдается мне, что у тебя в запросе не дата, а арифметическое выражение...

да нет.. я привел код такой какой у меня..

Цитата

а вообще, зачем тягать значение поля, если можно подставить его имя?
UPDATE table SET enddate=ADDDATE(enddate, INTERVAL 1 YEAR)

вот так получилось.. спасибо smile 
PM MAIL   Вверх
Feldmarschall
Дата 17.12.2007, 01:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



при чем здесь код?
я про запрос говорил, а не про код.
учитесь, наконец, различать SQL запрос и пхп код, который его формирует. Это разные вещи.
В запросе у тебя арифметическое выражение.

выполни запрос SELECT 2007-12-15
что он вернёт?
PM   Вверх
Dmitry_177
Дата 17.12.2007, 01:25 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Цитата

при чем здесь код?
я про запрос говорил, а не про код.
учитесь, наконец, различать SQL запрос и пхп код, который его формирует. Это разные вещи.
В запросе у тебя арифметическое выражение.

что-то я не пойму.. где у меня там арифметика? Я составляю строку запроса только лишь и всего..
PM MAIL   Вверх
SelenIT
Дата 17.12.2007, 03:11 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(Dmitry_177 @  17.12.2007,  00:34 Найти цитируемый пост)
по идее в $select_enddate_arr['enddate'] хранится дата в том формате какая и нужна MySQL

...т.е. в строковом виде, я полагаю. А при подстановке строк в запрос их надо брать в кавычки. Иначе с точки зрения базы это будет не строка нужного формата, а нечто совсем другое (на что и намекает пример Feldmarschallа ;).

Цитата(Dmitry_177 @  17.12.2007,  01:25 Найти цитируемый пост)
что-то я не пойму.. где у меня там арифметика?

Потому что надо приучать себя при отладке скриптов, работающих с базой, выводить текст запроса на экран. Многое станет понятным с первого взгляда, и куча времени и нервов сэкономится.

А вообще, в данном случае, можно действительно обойтись одним запросом UPDATE без предварительного вытягивания значения SELECT-ом и анализа его в скрипте. Вся необходимая логика поддерживается самим MySQL-ем:
Код

UPDATE table SET enddate=ADDDATE(IFNULL(enddate, CURDATE()), INTERVAL 1 YEAR)




--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Feldmarschall
Дата 17.12.2007, 09:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Dmitry_177, 
Цитата(Dmitry_177 @  17.12.2007,  01:25 Найти цитируемый пост)
что-то я не пойму.. где у меня там арифметика? Я составляю строку запроса только лишь и всего.. 

в запросе. в запросе, который ты составляешь.

выполни запрос SELECT 2007-12-15
что он вернёт? 

Это надо сделать обязательно. Чтобы понимать - что вообще делают твои скрипты.
чтобы научиться отличать PHP код от SQL запроса. 
Чтобы понять - что делают твои запросы.
Выполни, пожалуйста.
PM   Вверх
Dmitry_177
Дата 12.1.2008, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



из всего я как понял чтов запросах нельзя делать арифметику??? т.е. нужно составлять строку и присваивать ее какой-то переменной.. а ее уже подставлять в mysql_query??? я так понял? хотя всеравно непонимаю.. почему нельзя составлять строк прям в запрсе..
PM MAIL   Вверх
Golda
Дата 12.1.2008, 08:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 20
Всего: 42



Dmitry_177, составлять строки прямо в запросе можно. Проблема была просто в том, что Вы неправильно это сделали. Вместо

Код

mysql_query("UPDATE table SET enddate=ADDDATE(".$select_enddate_arr['enddate'].", INTERVAL 1 YEAR) WHERE id=".$_REQUEST['id']);


нужно было писать

Код

mysql_query("UPDATE table SET enddate=ADDDATE('".$select_enddate_arr['enddate']."', INTERVAL 1 YEAR) WHERE id=".$_REQUEST['id']);


Кавычки забыты. Как результат - MySql не понял, что речь идет о дате , а воспринял как выражение

 2007-12-15 

2007 минус 12 минус 15. Вот что пытался Вам втолкавать Feldmarschall.

Если же говорить о ситуации в целом, не нужно делать в PHP то, с чем прекрасно справляется сама база данных. Воспользуйтесь запросом, который привел SelenIT. И кода меньше, и работать быстрее будет

Это сообщение отредактировал(а) Golda - 12.1.2008, 09:00


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.