Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2011, 18:09   #1
YuZi_2009
Новичок
Джуниор
 
Регистрация: 09.02.2011
Сообщений: 6
По умолчанию Счетчик обратного отсчета!

Доброго времени суток!
Нуждаюсь в помощи!
У меня есть код, работает все как часы и формат подходящий(устанавливаю отсчет из MYSQL) но

есть одна труднось которую не могу решить. Нуждаюсь в Вашей помощи!
Счетчик можно ставить только один на странице, а мне требуется их несколько!
как это сделать? Помогите разобраться!


КОД:
___________________________________ __________________________________
INDEX.PHP

<body>

<SCRIPT language="JavaScript" SRC="countdown.php?timezone=Europe/Kiev&countto=2011-02-10

14:00:00&do=t&data=Время вышло!"></SCRIPT>

</body>
___________________________________ ___________________________________

COUNTDOWN.PHP

PHP код:
<?php
header
('Content-Type: text/javascript'); 

$timezone trim($_GET['timezone']);
putenv("TZ=$timezone");

$countdown_to trim($_GET['countto']);

$count_from date("Y-m-d H:i:s");


function 
datediff($interval$datefrom$dateto$using_timestamps false)
  {
 
  
  if (!
$using_timestamps) {
    
$datefrom strtotime($datefrom0);
    
$dateto strtotime($dateto0);
  }
  
$difference $dateto $datefrom;
   
  switch(
$interval) {
   
    case 
'yyyy'

      
$years_difference floor($difference 31536000);
      if (
mktime(date("H"$datefrom), date("i"$datefrom), date("s"$datefrom), date("n"

$datefrom), date("j"$datefrom), date("Y"$datefrom)+$years_difference) > $dateto) {
        
$years_difference--;
      }
      if (
mktime(date("H"$dateto), date("i"$dateto), date("s"$dateto), date("n"

$dateto), date("j"$dateto), date("Y"$dateto)-($years_difference+1)) > $datefrom) {
        
$years_difference++;
      }
      
$datediff $years_difference;
      break;

    case 
"q"

      
$quarters_difference floor($difference 8035200);
      while (
mktime(date("H"$datefrom), date("i"$datefrom), date("s"$datefrom), 

date("n"$datefrom)+($quarters_difference*3), date("j"$dateto), date("Y"$datefrom)) < 

$dateto) {
        
$months_difference++;
      }
      
$quarters_difference--;
      
$datediff $quarters_difference;
      break;

    case 
"m"

      
$months_difference floor($difference 2678400);
      while (
mktime(date("H"$datefrom), date("i"$datefrom), date("s"$datefrom), 

date("n"$datefrom)+($months_difference), date("j"$dateto), date("Y"$datefrom)) < 

$dateto) {
        
$months_difference++;
      }
      
$months_difference--;
      
$datediff $months_difference;
      break;

    case 
'y'

      
$datediff date("z"$dateto) - date("z"$datefrom);
      break;

    case 
"d"

      
$datediff floor($difference 86400);
      break;

    case 
"w"

      
$days_difference floor($difference 86400);
      
$weeks_difference floor($days_difference 7); // Complete weeks
      
$first_day date("w"$datefrom);
      
$days_remainder floor($days_difference 7);
      
$odd_days $first_day $days_remainder// Do we have a Saturday or Sunday in the 

remainder?
      if (
$odd_days 7) { 
        
$days_remainder--;
      }
      if (
$odd_days 6) { 
        
$days_remainder--;
      }
      
$datediff = ($weeks_difference 5) + $days_remainder;
      break;

    case 
"ww"

      
$datediff floor($difference 604800);
      break;

    case 
"h"

      
$datediff floor($difference 3600);
      break;

    case 
"n"

      
$datediff floor($difference 60);
      break;

    default: 

      
$datediff $difference;
      break;
  }    

  return 
$datediff;
}


$diff datediff("s"$count_from$countdown_to);
?>


countdown = <?=$diff?>;


function convert_to_time(secs)
{
    secs = parseInt(secs);    
    hh = secs / 3600;    
    hh = parseInt(hh);    
    mmt = secs - (hh * 3600);    
    mm = mmt / 60;    
    mm = parseInt(mm);    
    ss = mmt - (mm * 60);    
        
    if (hh > 23)    
    {    
       dd = hh / 24;    
       dd = parseInt(dd);    
       hh = hh - (dd * 24);    
    } else { dd = 0; }    
        
    if (ss < 10) { ss = "0"+ss; }    
    if (mm < 10) { mm = "0"+mm; }    
    if (hh < 10) { hh = "0"+hh; }    
    if (dd == 0) { return (hh+":"+mm+":"+ss); }    
    else {    
        if (dd == 1) { return (dd+" день "+hh+":"+mm+":"+ss); }
        else if (dd > 4) { return (dd+" дней "+hh+":"+mm+":"+ss); }
        else { return (dd+" дня "+hh+":"+mm+":"+ss); }
    }    
}


function do_cd()
{
    if (countdown < 0)    
    {     
        <?php
            
if(strtolower(trim($_GET['do'])) == 'r' )
            {
        
?>
        // redirect web page
        document.location.href = "<?=$_GET['data']?>";
        <?php ?>

        <?php
            
if(strtolower(trim($_GET['do'])) == 't' )
            {
        
?>
        // change text
        document.getElementById('cd').innerHTML = "<?=$_GET['data']?>";
        <?php ?>

    }    
    else    
    {    
        document.getElementById('cd').innerHTML = convert_to_time(countdown);
        setTimeout('do_cd()', 1000);
    }    
    countdown = countdown - 1;    
}

document.write("<div id='cd'></div>\n");

do_cd();

<? exit(); ?>
YuZi_2009 вне форума Ответить с цитированием
Старый 09.02.2011, 21:57   #2
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

document.write("<div id='cd'></div>\n");
Замените здесь id на name, class или еще что-нить. И работайте в скриптах уже с коллекцией элементов. Например получая их с помощью document.getElementsByName или еще лучше Jquery (c ним гораздо проще будет)
Cronos20 вне форума Ответить с цитированием
Старый 11.02.2011, 11:57   #3
YuZi_2009
Новичок
Джуниор
 
Регистрация: 09.02.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Cronos20 Посмотреть сообщение
document.write("<div id='cd'></div>\n");
Замените здесь id на name, class или еще что-нить. И работайте в скриптах уже с коллекцией элементов. Например получая их с помощью document.getElementsByName или еще лучше Jquery (c ним гораздо проще будет)

PHP код:
 document.getElementByName('cd').innerHTML = "<?=$_GET['data']?>"; 
        <?php ?> 

    }     
    else     
    {     
        document.getElementByName('cd').innerHTML = convert_to_time(countdown); 
        setTimeout('do_cd()', 1000); 
    }     
    countdown = countdown - 1;     


document.write("<div Name='cd'></div>\n"); 

do_cd(); 

<? exit(); ?>
В таком варианте вообще несчётчик не выводится.

Что касается Jquery я в нём нечего не понимаю.... тут с PHP пытаюсь разобраться (знаю только основы и пытаюсь самоучкой пойти глубже).
Может я что-то не правельно сделал в предложеном Вами варианте?
YuZi_2009 вне форума Ответить с цитированием
Старый 11.02.2011, 14:50   #4
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

не getElementByName, а getElementsByName - что в корне меняет дело.
Я же написал, что тут уже нужно будет работать с коллекцией элементов (которую возвращает getElementsByName - а вовсе не один элемент).
По этой коллекции придется проходиться каким-нибудь foreach.
на jquery проще - создайте <div class='cd'></div>
Код:
$('.cd').each(function(i){
this // вот каждый ваш div, выполняйте с ним свои функции
});
Cronos20 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер обратного отсчета kpachbiu JavaScript, Ajax 4 09.01.2011 15:32
Счетчик обратного действия в режиме реального времени Панчо PHP 1 20.09.2010 20:37
Таймер обратного отсчета работает не так как надо.. нужно найти ошибку в коде... Человек_Борща Общие вопросы Delphi 10 13.04.2010 20:06
Таймер обратного отсчета Bilargo Помощь студентам 6 30.09.2009 17:02
Таймер обратного отсчета на С Raptor Помощь студентам 6 08.01.2008 01:11