За последние 24 часа нас посетили 19603 программиста и 1604 робота. Сейчас ищут 872 программиста ...

Проверка есть ли в ячейке данные

Тема в разделе "PHP и базы данных", создана пользователем Serjuk, 23 ноя 2011.

  1. Serjuk

    Serjuk Активный пользователь

    С нами с:
    31 окт 2011
    Сообщения:
    44
    Симпатии:
    0
    Здравствуйте.возникла проблема не могу проверить если в ячейке данные или она пуста.
    делаю так:
    Код (Text):
    1.  
    2. if ( $row['bdate'] != NULL) {
    3. $bdate = explode('.', $row['bdate']);
    4. $birthdate_unix = mktime(0, 0, 0, $bdate[1], $bdate[0], $bdate[2]);
    5. $current_unix = time();
    6. $period_unix=$current_unix - $birthdate_unix;
    7. $age = floor($period_unix / (365*24*60*60));
    8. } else if ( $row['bdate'] == NULL)  {
    9. $age = 'Скрыто';
    10. }
    Суть в том, что если ячейка в столбце bdate пустая, то мы переменной age присваиваем значение "Скрыто", если есть дата вида 1.1.2011 то высчитываем количество лет.. Так вот почему то такое условие не работает.. Переменной age не присваивается значение Скрыто. Помогите пожалуйста..
     
  2. kotyara

    kotyara Активный пользователь

    С нами с:
    17 фев 2010
    Сообщения:
    163
    Симпатии:
    0
    ну для твоего примера я бы посоветовал в условиях не производить сравнения с NULL , а просто
    PHP:
    1. if ( $row['bdate']){
    2. ..
    3. }
    4. else{
    5. ...
    6. }
    а вообще возраст лучше в мускле определяй, например так http://kobzarev.com/programming/determi ... mysql.html или может сам что придумаешь (смотри работу в мускле с датами http://mysql.ru/docs/man/Date_and_time_functions.html).
    и есть подозрение что у тебя поле bdate текстового типа, сделай его типа date или timestamp
     
  3. Serjuk

    Serjuk Активный пользователь

    С нами с:
    31 окт 2011
    Сообщения:
    44
    Симпатии:
    0
    Спасибо, но почему то проверку не проходит правильно..
    Код (Text):
    1.  
    2.  if ( $row['bdate']){  
    3.  $bdate = explode('.', $this->bdate);
    4.         $birthdate_unix = mktime(0, 0, 0, $bdate[1], $bdate[0], $bdate[2]);
    5.         $current_unix = time();
    6.         $period_unix=$current_unix - $birthdate_unix;
    7.         $age = floor($period_unix / (365*24*60*60)); }
    8. else {
    9. $age = 'Скрыто'; }    
    Все время выводит 'Скрыто', даже если есть значения в ячейке.
    Пробовал еще заменить
    Код (Text):
    1.  else на  else if (empty( $row['bdate']))
    тоже самое.
    Поле bdate - varchar(12), просто у меня дата записывается в виде : день.месяц.год , например в виде 1.1.2001, а в типе date вид 00-00-0000..[/code]
     
  4. kotyara

    kotyara Активный пользователь

    С нами с:
    17 фев 2010
    Сообщения:
    163
    Симпатии:
    0
    ну так посмотри что у тебя в твоей переменной, походу там пусто.
    и не храни ты дату в текстовом поле, ни к чему пополнять ряды говнокодеров!
     
  5. Serjuk

    Serjuk Активный пользователь

    С нами с:
    31 окт 2011
    Сообщения:
    44
    Симпатии:
    0
    В том то и дело, что оно не пусто)
    а дату приходится хранить в строковом виде из-за того, что она на входе подается в виде день.месяц.год и если поле в таблице будет типа date, то там все даты будут нулевыми ( 00-00-0000).
    А преобразовать ее не получается..
    Вот так я записываю в базу:
    Код (Text):
    1.  
    2.  
    3. $bd = new BD();
    4.     $bd->sql("INSERT INTO user ( bdate) VALUES
    5.     ('$user->bdate')");
    6. unset($bd);
    7. ?>
     
  6. kotyara

    kotyara Активный пользователь

    С нами с:
    17 фев 2010
    Сообщения:
    163
    Симпатии:
    0
    проблема с невозможностью конвертации даты вообще мне не понятна, вариантов полно, хотя бы как то так

    PHP:
    1. /*$date_string формата dd.mm.yyyy или dd.mm.yy в зависимости от значения $q_zn*/
    2. function DateToMySQL($date_string,$q_zn=4){
    3.     $result = "";
    4.     if(ereg ("([0-9]{2})\.([0-9]{2})\.([0-9]{".$q_zn."})", $date_string, $datetime)) {
    5.         if ($q_zn==2) {
    6.             if (intval($datetime[3])>30) $year = "19" . $datetime[3];  
    7.             else $year = "20" . $datetime[3];
    8.         }
    9.         else $year = $datetime[3];
    10.         $result = $year."-".$datetime[2]."-".$datetime[1];     
    11.     }
    12.     return $result;
    13. }
    не лучший пример, с некоторыми ньюансам, но работает.

    а по твоему коду... НЕ ВЕРЮ. до условия поставь
    PHP:
    1. var_dump($row['bdate']);
    и напиши сюда результат. и заодно весь кусок кода скопипасть сюда
     
  7. Serjuk

    Serjuk Активный пользователь

    С нами с:
    31 окт 2011
    Сообщения:
    44
    Симпатии:
    0
    Спасибо большое за помощь - разобрался! )