Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Событие по истечении времени
 
 автор: Dmitry_RM   (18.12.2008 в 11:13)   письмо автору
 
 

С помошью хороших людей собрал такой код:

<?php 

$timestamp 
strtotime('now');  
  
$start '20081219 1700';   

$timestamp strtotime($start);  
   
$start_time=strtotime($start) - strtotime($now);  

header("Refresh: $start_time; url=test.php"); 

$day=floor($start_time/86400);   
$hours=floor(($start_time/3600)-$day*24);   
$min=floor(($start_time-$hours*3600-$day*86400)/60);   
$sec=$start_time-($min*60+$hours*3600+$day*86400);  

?> 

<html> 
<head> 
<SCRIPT LANGUAGE='JavaScript'> 

var d = <?php echo $day ?>
var h = <?php echo $hours ?>
var i = <?php echo $min ?>
var s = <?php echo $sec ?>;  

function startCountdown() 
{  
s--; 
d=(d<0)?0:d; 
h=(h<0)?0:h; 
i=(i<0)?0:i; 
var ii=(i >= 10)?"":"0"; 
var ss=(s >= 10)?"":"0";  

     if((s-1)  > 0) 
    {                 
        document.getElementById('start_time').innerHTML = 'дней: '+ d+' часов: '+h+' минут: '+ii+i+' секунд: '+ss+s;  
      setTimeout('startCountdown()',1000); 
     
    } 
    else 
    { 
    i--; 
    s = 60; 
    startCountdown() 
    } 
               if(i==0&&h!=0) 
            { 
            h--; 
            i=59; 
            } 
                 if(h==0&&d!=0) 
                { 
                d--; 
                h=23; 
                } 

}  

</script> 
</head> 
<body onload="startCountdown()"> 
Начало -  
<?php echo date('d F Y h:i:s A'$timestamp);?> 
<br> 
До начала осталось <br /> 
<div id="start_time"></div></body>



Теперь немогу доработать так, чтобы при 00:00:00 происходило действие:
- допустим переход на другую страницу, а на той странице где отображался отсчет вывести любую другую надпись.

Кто поможет буду благодарен.

  Ответить  
 
 автор: HaJIuBauKa   (18.12.2008 в 11:39)   письмо автору
 
   для: Dmitry_RM   (18.12.2008 в 11:13)
 

зачем так?
$day=floor($start_time/86400);   
$hours=floor(($start_time/3600)-$day*24);   
$min=floor(($start_time-$hours*3600-$day*86400)/60);   
$sec=$start_time-($min*60+$hours*3600+$day*86400);

правильней будет так:
$day=date ( "j" , $start_time);
$hours=date ( "G" , $start_time);
$min=date ( "i" , $start_time);
$sec=date ( "s" , $start_time);


и еще одно, вместо date лучше использовать gmdate - время по гринвичу - одно для всех часовых поясов.

  Ответить  
 
 автор: Dmitry_RM   (18.12.2008 в 15:15)   письмо автору
 
   для: HaJIuBauKa   (18.12.2008 в 11:39)
 

>вместо date лучше использовать gmdate - время по гринвичу - одно для всех часовых поясов.
мне так удобнее я сверяю по своим часам, хотя можно и так

А по моей теме можете что-нибудь посоветовать?

  Ответить  
 
 автор: Николай2357   (18.12.2008 в 15:26)   письмо автору
 
   для: Dmitry_RM   (18.12.2008 в 11:13)
 

Ну а немного подумать? Это же я из Ваших кодов собрал.
if(h==0&&d==0&&i==0&&s==0)  
                {  
ПОПЁЁЁЁРЛИ!!!!!
                } 
К тому же это совсем не обязательно делать. Ведь стоит же рефреш. И про форматирование даты уже советовал. Вы не захотели оптимизировать, взяли всё готовое. Не тратьте время, не Ваше это. Заработайте денег другим способом и закажите сайт специалистам - мой Вам совет.

  Ответить  
 
 автор: Dmitry_RM   (18.12.2008 в 19:23)   письмо автору
 
   для: Николай2357   (18.12.2008 в 15:26)
 

>Это же я из Ваших кодов собрал.
Я тот переделал под свой сайт, а этот выложил чтоб понятней было и все видно.

>
if(h==0&&d==0&&i==0&&s==0)  
>                {  
>ПОПЁЁЁЁРЛИ!!!!!
>                } 

Вот именно так я уже делал - не работает, в смысле время вообще не отображается.

> ...закажите сайт специалистам - мой Вам совет.
Я обращался к специалистам - они сказали 100 тыс. рублей. У меня таких денет нет.

Да и сайт я уже почти закончил. Осталось совсем фигня:
- вот это (что выше)
- статистику на сайте (кол-во зарегестрированных пользователей, кол-во он-лайн и т.п.)
- и расмещение сайта в Интернете.

  Ответить  
 
 автор: Николай2357   (18.12.2008 в 19:55)   письмо автору
 
   для: Dmitry_RM   (18.12.2008 в 19:23)
 

Не, ну столько конечно такой сайтик вряд ли стоит ))).
Так растолкуйте во первых, какое действие Вы хотите произвести, во вторых, куда Вы это ставили, что не работает, и в третьих, если это у Вас вызывает затруднения, то вывести к-во пользователей и пр. будет совсем не фигня. И ещё, если Вы сюда выложили не то, что у Вас на сайте, то как же тогда можно правильно подсказать?

  Ответить  
 
 автор: Dmitry_RM   (19.12.2008 в 06:21)   письмо автору
 
   для: Николай2357   (18.12.2008 в 19:55)
 

<? ***

$timenow strtotime('now');  
$start '20081218 1358';   
$timestamp strtotime($start);  
$start_time=strtotime($start) - $timenow;  

header("Refresh: $start_time; url=start_vik.php"); 

$day=floor($start_time/86400);   
$hours=floor(($start_time/3600)-$day*24);   
$min=floor(($start_time-$hours*3600-$day*86400)/60);   
$sec=$start_time-($min*60+$hours*3600+$day*86400);  
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="description" content="<?php echo $myrow['meta_d']; ?>">
<meta name="keywords" content="<?php echo $myrow['meta_k']; ?>">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title><?php echo $myrow['title']; ?></title>
<link href="style.css" rel="stylesheet" type="text/css">

***

<SCRIPT LANGUAGE='JavaScript'> 

var d = <?php echo $day ?>
var h = <?php echo $hours ?>
var i = <?php echo $min ?>
var s = <?php echo $sec ?>;  

function startCountdown() 
{  
s--; 
d=(d<0)?0:d; 
h=(h<0)?0:h; 
i=(i<0)?0:i; 
var ii=(i >= 10)?"":"0"; 
var ss=(s >= 10)?"":"0";  

     if((s-1)  > 0) 
    {                 
        document.getElementById('start_time').innerHTML = d +' дн.  '+ h +' час.  '+ ii + i +' мин.  '+ ss + s +' сек.  ';  
      setTimeout('startCountdown()',1000); 
     
    } 
    else 
    { 
    i--; 
    s = 60; 
    startCountdown() 
    } 
               if(i==0&&h!=0) 
            { 
            h--; 
            i=59; 
            } 
                 if(h==0&&d!=0) 
                { 
                d--; 
                h=23; 
                } 
    
}  

</script> 

***
</head>

<body onLoad="startCountdown()"></body>
<body onload=' *** здесь у меня навигация "> // два BODY и оба работают без конфликтов


<!--До начала викторины осталось <br /> 
<div id="start_time"></div></body>--> // эту строку я занес в БД, он выводится от туда

***
            <td><strong>Статистика сайта</strong></td> // в этой таблице статистику сайта будет
          </tr>
          <tr>
            <td><table width="164" border="1">
              <tr>
                <td><p>&nbsp;</p>
                  <p>&nbsp;</p>
                  <p>&nbsp;</p>
                  <p>&nbsp;</p>
                  <p>&nbsp;</p>
                  <p>&nbsp;</p>
                  <p>&nbsp;</p></td>
              </tr>
            </table></td>
          </tr>

***

    <FONT CLASS=stat>Copyright &copy; 2008 <A HREF='http://localhost/viktorina_com'>viktorina.com&trade;</A><BR>
    </td>
  </tr>
</table>
</BODY>
</HTML>


Вот такой у меня сейчас код.

>Не, ну столько конечно такой сайтик вряд ли стоит ))).
А вот мне такую сказали.

>Так растолкуйте во первых, какое действие Вы хотите произвести,
По окончанию отсчета переходим на страницу start_vik.php, а на странице index.php оставляем надпись типа "Викторина уже началась"

>во вторых, куда Вы это ставили, что не работает,
function startCountdown() 
{  
***
               if(i==0&&h!=0) 
            { 
            h--; 
            i=59; 
            } 
                 if(h==0&&d!=0) 
                { 
                d--; 
                h=23; 
                } 
     *** // СЮДА    
}


и вот так тоже

function startCountdown() 
{  
s--; 
d=(d<0)?0:d; 
h=(h<0)?0:h; 
i=(i<0)?0:i; 
var ii=(i >= 10)?"":"0"; 
var ss=(s >= 10)?"":"0";  

if //(СЮДА)
{
// ДЕЙСТВИЕ
}
else
{
     if((s-1)  > 0) 
    {                 
        document.getElementById('start_time').innerHTML = d +' дн.  '+ h +' час.  '+ ii + i +' мин.  '+ ss + s +' сек.  ';  
      setTimeout('startCountdown()',1000); 
     
    ***
     }    
}


Только не ругайтесь :-)

  Ответить  
 
 автор: Dmitry_RM   (19.12.2008 в 06:52)   письмо автору
 
   для: Dmitry_RM   (19.12.2008 в 06:21)
 

Разобрался почему не работал переход на страницу start_vik.php.
Дело было в пустяке.
только вот не показывает последние секунды 1и 0. И переходит на страницу спустя 2 сек после "обнуления отсчета". Некрасиво получается.4 -> 3 -> 59 -> 58 -> start_vik.php
Теперь еще надо поменять надпись на idex.php.

  Ответить  
 
 автор: Николай2357   (19.12.2008 в 09:09)   письмо автору
 
   для: Dmitry_RM   (19.12.2008 в 06:52)
 

Да я не ругаюсь, я просто советую, видя Ваши неимоверные мучения ))) Просто у меня возникает ассоциация с тем, что бы я испытывал, если бы меня принудили заниматься балетом.
Ну вопервых, не нужно ставить два тега <body>, достаточно сделать так:

<body onload="*** здесь у меня навигация ; startCountdown() ">

Во вторых, чтоб было совсем красиво, сделайте так:

<SCRIPT LANGUAGE='JavaScript'>  
var st = <?php echo $start_time ?>;
var d = <?php echo $day ?>;  
var h = <?php echo $hours ?>;  
var i = <?php echo $min ?>;  
var s = <?php echo $sec ?>;   

function startCountdown()  
{
if(st < 0)
{     
document.getElementById('start_time').innerHTML = "Поезд ту-ту!";
return false;
}
   
if(h==0&&d==0&&i==0&&s==1)
{     
document.getElementById('start_time').innerHTML = "ПОПЁЁЁЁРЛИ!!!!!";
return false;
}

И учтите то, что точности до секунды всё равно не выйдет. Разная скорость интернета, всякие глюки сети и пр... Надеюсь у Вас не по 5 сек на ответ дается?

  Ответить  
 
 автор: Dmitry_RM   (19.12.2008 в 09:49)   письмо автору
 
   для: Николай2357   (19.12.2008 в 09:09)
 

Так как у меня текст страницы index.php хранится в БД, то я подумал и сделал так:
function startCountdown() 
{
if(h==0&&d==0&&i==0&&s==2) 
{      
clearTimeout(timer); 
// потом конечно укарашу и добавлю еще, но главное что работает.
<? 
$result
=mysql_query("UPDATE settings SET text='Викторина уже началась!!!'");
?>


>Надеюсь у Вас не по 5 сек на ответ дается?
Да нет не 5 сек, а 5 или 10 мин.

  Ответить  
 
 автор: Николай2357   (19.12.2008 в 09:53)   письмо автору
 
   для: Dmitry_RM   (19.12.2008 в 09:49)
 

Посмотрите на верх, я маленько поправил. Если у Вас участники викторины должны предварительно зарегистрироваться, совсем ни к чему лишний раз дергать базу. Достаточно всё сделать на клиенте. И уж совсем ни к чему заставлять каждого клиента апдейтить запись. Ой как это не хорошо...
И еще забыл, вот так лучше:
//if((s-1)  > 0) 
if(s != 0)

  Ответить  
 
 автор: Dmitry_RM   (19.12.2008 в 10:09)   письмо автору
 
   для: Николай2357   (19.12.2008 в 09:53)
 

>Посмотрите на верх, я маленько поправил.
Это я поправил.

>Если у Вас участники викторины должны предварительно зарегистрироваться, совсем ни к чему лишний раз дергать базу. Достаточно всё сделать на клиенте.
А где я дергаю базу?Какую? Непонял.

>И уж совсем ни к чему заставлять каждого клиента апдейтить запись. Ой как это не хорошо...
А как? Если у меня именно из базы берется "Надпись на странице".

>И еще забыл, вот так лучше:
>
//if((s-1)  > 0) 
>if(s != 0)

И правда лучше.

  Ответить  
 
 автор: Николай2357   (19.12.2008 в 11:24)   письмо автору
 
   для: Dmitry_RM   (19.12.2008 в 10:09)
 

Вы посмотрите, как именно сейчас написано наверху. Там немного иначе, нежели я писал первый раз. Не нужно вот этого:
<?  
$result
=mysql_query("UPDATE settings SET text='Викторина уже началась!!!'"); 
?>
, если время вышло, и так всё напишется. Просто сейчас возьмите верхний код и вставьте в свой первый скрипт. Всё будет работать без всякой базы.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования