За последние 24 часа нас посетили 17727 программистов и 1672 робота. Сейчас ищут 905 программистов ...

вывод времени из базы данных

Тема в разделе "PHP для новичков", создана пользователем Panich, 17 ноя 2011.

  1. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Код:

    PHP:
    1. <?php
    2.             $toodey = date ("Ymd");
    3.             include ("bd_competition.php");
    4.             $sql13 = "SELECT UNIX_TIMESTAMP('date') AS 'time_comp' FROM `competition`";
    5.             $result13 = mysql_query($sql13, $db_comp) or die ("Ошибка в запросе: " . mysql_error());
    6.             if (!$result13)
    7.             {
    8.             echo "ошибка - ".mysql_error()."<br>";
    9.             echo $sql13;
    10.             exit();
    11.             }
    12.             $myrow13 = mysql_fetch_array($result13);
    13.              
    14.                $time_comp = $myrow13['time_comp'];
    15.                   echo $time_comp;
    16.             ?>
    В поле time_comp забиты значения (2011-12-31, 2011-11-01 и т.д.(сам ручками вбивал в базу данных)),но когда пытаюсь вывести согласно вышеуказанного кода,то выводит "зироу"!Что не так,алерт,хеп!?
     
  2. kotyara

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

    С нами с:
    17 фев 2010
    Сообщения:
    163
    Симпатии:
    0
    во-первых проверь запрос твой работает вообще или нет. в каком либо мускульном клиенте или через майадмин.
    а то фик знает есть у тебя поле date в таблице competition или нет. да и название поле лучше не в апострофы возьми а вот в такие кавычки ` а то у тебя получается какое то строчное значение а не название поля.

    во-вторых
    PHP:
    1. var_dump($myrow13);
    и посмотри как у тебя массив устроен
     
  3. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Когда вывожу myrow:
    array(2){[0]=>string(9)"time_comp"["time_comp"]=>string(9)"time_comp"}
    Когда в Денвере вставляю,то пред вставлением выдаёт ошибку:Data truncated for column 'when' at row 1,которая переводится как:"Данные, усеченные для колонки, 'когда' в ряду 1"
    Что делать,как быть!?!!!
     
  4. kotyara

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

    С нами с:
    17 фев 2010
    Сообщения:
    163
    Симпатии:
    0
    угу спасибо за перевод))
    структуру таблицы дай
     
  5. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    [sql]TABLE `competition` (
    `id_comp` int(255) NOT NULL AUTO_INCREMENT,
    `for_com` varchar(30) NOT NULL,

    `when` varchar(5) NOT NULL,

    `title_comp` varchar(30) NOT NULL,

    `text_comp` varchar(400) NOT NULL,

    `time_comp` date NOT NULL,

    `text_winer` varchar(400) NOT NULL,

    `winer` varchar(30) NOT NULL,

    `id_winer` int(255) NOT NULL,

    PRIMARY KEY (`id_comp`)
    ) ENGINE=MyISAM DEFAULT
    CHARSET=cp1251
    AUTO_INCREMENT=22 ;

    --
    -- Dumping data for table `competition`
    --

    INSERT INTO `competition`
    (`id_comp`, `for_com`, `when`, `title_comp`, `text_comp`, `time_comp`, `text_winer`, `winer`, `id_winer`)
    VALUES
    (1, 'man', 'new', 'Самый-самый', 'Конкурс на самого симпатичного парня сайта', '2011-12-31', 'Подведём итоги прошедшего конкурса. Победителем стал самый активный и самый популярный!', 'Игорь', 0),

    (2, 'oll', 'new', 'История любви', 'Конкурс,на самую романтическую историю о любви', '2011-12-31', 'Не остаётся сомнений,что самая романтическая история оказалась именно эта. ', 'Ольга', 0),

    (7, 'woman', 'new', 'Самая-Самая', 'Размещаете свои фотографии, посетители голосуют и по результатам самая популярная будет победительницей!', '2011-12-31', 'Бесспорной победительницей оказалась:', 'Ирина', 0),

    (9, 'man', 'new', 'Человек-скала', 'Размещаем фотографии своих"мускулистых" особенностей и выигрываем по результатам голосования!', '2011-12-31', 'Самая большая груда мышц у:', 'Дмитрий', 0),

    (16, 'oll', 'new', 'Лучший отдых', 'В данном конкурсе размещаем свои фотографии с места отдыха в 2011 году и выигрываем по результатам голосования', '2011-11-01', 'Победа досталась самому весёлому и активному отдыхающему планеты!', 'Алёна', 0);[/sql]
     
  6. kotyara

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

    С нами с:
    17 фев 2010
    Сообщения:
    163
    Симпатии:
    0
    тогда уж запрос должен быть как минимум таким
    PHP:
    1. $sql13 = "SELECT UNIX_TIMESTAMP(`time_comp`) AS 'time_comp' FROM `competition`";
     
  7. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Вытащил из базы данные как задумал:2011-12-31
    Но теперь я вывожу time('Ymd') и пытаюсь сравнить вытащенную из базы переменную time_comp и сегодняшнюю дату...что прискорбно не происходит сравнение!
     
  8. kotyara

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

    С нами с:
    17 фев 2010
    Сообщения:
    163
    Симпатии:
    0
    покажи что ты там сравниваешь и как
     
  9. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    PHP:
    1. <?php
    2.             $toodey = date ("Ymd");
    3.             include ("bd_competition.php");
    4.             $sql13 = "SELECT `time_comp` FROM competition";
    5.             $result13 = mysql_query($sql13, $db_comp) or die ("Ошибка в запросе: " . mysql_error());
    6.             if (!$result13)
    7.             {
    8.             echo "ошибка - ".mysql_error()."<br>";
    9.             echo $sql13;
    10.             exit();
    11.             }
    12.             else
    13.             {
    14.                while($myrow13 = mysql_fetch_array($result13))
    15.                {
    16.                $time_comp = $myrow13['time_comp'];
    17.                   if ($toodey > $time_comp)
    18.                   {
    19.                   $old = "old";
    20.                   $sql14 = "UPDATE `competition` SET `when` = '$old'";
    21.                   $result14 = mysql_query($sql14, $db_comp) or die ("Ошибка в запросе: " . mysql_error());
    22.                      if (!$result14)
    23.                      {
    24.                      echo "ошибка - ".mysql_error()."<br>";
    25.                      echo $sql14;
    26.                      exit();
    27.                      }
    28.                   }
    29.                   else
    30.                   {
    31.                   $new = "new";
    32.                   $sql15 = "UPDATE `competition` SET `when` = '$new'";
    33.                   $result15 = mysql_query($sql15, $db_comp) or die ("Ошибка в запросе: " . mysql_error());
    34.                      if (!$result15)
    35.                      {
    36.                      echo "ошибка - ".mysql_error()."<br>";
    37.                      echo $sql15;
    38.                      exit();
    39.                      }
    40.                   }
    41.                }
    42.             }
    43.             ?>
    Замысел такой:вытаскиваю дату,что в базе данных,потом беру сегодняшнюю дату и сравниваю!
    Если сегодняшняя дата больше чем та,что в базе,то записываем в поле when значение old,а если меньше,то new!
    Но везде new...
     
  10. kotyara

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

    С нами с:
    17 фев 2010
    Сообщения:
    163
    Симпатии:
    0
    Ну во-первых
    PHP:
    1. $toodey = date ("Ymd");
    так ты получишь строчку типа 20111117 а в базе у тебя строки типа 2011-11-17
    во-вторых вот так
    PHP:
    1. $toodey > $time_comp
    ты сравниваешь строки а не даты
    и в-третьих насколько я понял твою задачу все можно сделать запросом в мускуль
    PHP:
    1. $sql_txt = "update competition set `when`= 'old' where time_comp < '".date("Y-m-d")."';";
    2. $sql_txt = "update competition set `when`= 'new' where time_comp >= '".date("Y-m-d")."';";
     
  11. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Спасибо большое,разобрался:
    PHP:
    1. <?php
    2.             include ("bd_competition.php");
    3.            
    4.             $sql_comp="UPDATE competition SET `when` = 'old' where time_comp < '".date("Y-m-d")."';";
    5.             $sql_comp="UPDATE competition SET `when` = 'new' where time_comp >= '".date("Y-m-d")."';";
    6.            
    7.             ?>
    но везде присвоило old,хотя вывожу значения time_comp в цикле и там:
    1970-01-011970-01-011970-01-011970-01-011970-01-01[/u]
     
  12. kotyara

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

    С нами с:
    17 фев 2010
    Сообщения:
    163
    Симпатии:
    0
    ну значит везде стояли даты меньше чем сегодняшняя =)
     
  13. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    )))Блин!!!!!!!!!!!!
    Вытащил все значения и там все даты больше чем сегодняшняя,но всем присваивает old и как так может быть!?
     
  14. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Я так понял достал!)))
    Но проблема ещё не решена-давайте додавим вместе!?
     
  15. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Вставил в свой,ранее указанный пример:
    echo $sql14 и echo $sql15
    Выводит,что всё как и должно быть вносит в базу-где должен new, вносит new, а где old,вносит old...но когда в браузере открываю phpAdmin,то в базе везде old.Как же так-на странице пишет,что всё внёс,а на самом деле нет!?
     
  16. Mamont

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

    С нами с:
    5 дек 2010
    Сообщения:
    183
    Симпатии:
    0
    Масло-масляное, а не код. Зачем дублирование делать? Хотя бы как-то так написал:
    PHP:
    1. <?php
    2.    $toodey = date ("Ymd");
    3.    include ("bd_competition.php");
    4.    $sql13 = "SELECT `time_comp` FROM competition";
    5.    $result13 = mysql_query($sql13, $db_comp) or die ("Ошибка в запросе: " . mysql_error());
    6.  
    7.    while( $myrow13 = mysql_fetch_array($result13) ){
    8.       $time_comp = $myrow13['time_comp'];
    9.       if( $toodey > $time_comp ){
    10.          $stat = "old";
    11.       } else {
    12.          $stat = "new";
    13.       }
    14.       $sql15 = "UPDATE `competition` SET `when` = '$stat'";
    15.       $result15 = mysql_query($sql15, $db_comp) or die ("Ошибка в запросе: " . mysql_error());
    16.    }
    Какой цикл? он тут не нужен. Всё делается таким кодом:
    PHP:
    1. <?php
    2. include ("bd_competition.php");
    3. date_default_timezone_set('Europe/Moscow');
    4. $today = date ("Y-m-d");
    5.  
    6. mysql_query("UPDATE `competition` SET `when`= IF(`time_comp`<'$today','old','new')")
    7.    or die( mysql_error() );
    8.  
    Всё отлично работает, проверено на предоставленном дампе.
     
  17. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Mamont
    Как Вы писали в первом случае везде записывается old,по второму способу везде new-сам не знаю почему!
    Вы будете смеяться,но с этой задачей борюсь уже два дня и этой ночью(на основе вчерашнего общения)мне приснилось решения(во как заморочился!)
    Вот рабочий код:
    PHP:
    1. <?php
    2.             include ("bd_competition.php");
    3.             date_default_timezone_set('Europe/Moscow');
    4.             $toodey = date ("Y-m-d");
    5.             $sql13="UPDATE `competition` SET `when` = 'old' WHERE time_comp < '".date("Y-m-d")."';";
    6.             $sql13="UPDATE `competition` SET `when` = 'new' WHERE time_comp >= '".date("Y-m-d")."';";
    7.             $result13 = mysql_query($sql13, $db_comp) or die ("Ошибка в запросе: " . mysql_error());
    8.             if (!$result13)
    9.             {
    10.             echo "ошибка - ".mysql_error()."<br>";
    11.             echo $sql13;
    12.             exit();
    13.             }
    14.             ?>
    Сам не знаю почему именно он заработал,но факт остается фактом!)))
    Спасибо всем,кто со мной мучился!Приятно,что Вы есть!