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

Форум PHP

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

 

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

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

тема: Функция time(), как подсчитать время проведеное на странице
 
 автор: Ванек2010   (22.01.2010 в 01:48)   письмо автору
 
 

Как подсчитать время проведеное на странице?
С помощью функции time(), наверно =)
у меня отображает слишком много циферок 12641138060
А мне надо только секунды..как избавиться от лишнего?

  Ответить  
 
 автор: tvv123456   (22.01.2010 в 02:10)   письмо автору
 
   для: Ванек2010   (22.01.2010 в 01:48)
 

Почитайте, что вам овтетили в пердыдущей вашей теме.
А заодно возьмите книжку и почитайте что такое: php,flash,javascript
А особое внимание обратите на то как они отличаються с точки зрения обработки кода(где происходит эта обработка)
А про стандартные функцииphp вы сможете прочитать в мануале( в инете этого дорбра выше крыши)

Форум все-таки создан чтоб помогать решить задачи или подсказать что-нибудь, а тупо решать проблемы автора, который не хочет посидеть в яндексе или гугле это сорри.....

  Ответить  
 
 автор: Commander   (22.01.2010 в 07:08)   письмо автору
 
   для: Ванек2010   (22.01.2010 в 01:48)
 

PHP вам в этом не помошник. На открытие страницы он может прореагировать - а на закрытие нет. Все дело в том, что когда пользователь читает страницу, сам скрипт уже свое отработал и сделать ничего (в том числе и время определить) в принципе не может. Надо использовать JavaScript:
<body onload="window.setTimeout('getSecs()', 1)">

<script language="javascript">
startday = new Date();
clockStart = startday.getTime();

function initStopwatch()
{
    var myTime = new Date();
    var timeNow = myTime.getTime();
    var timeDiff = timeNow - clockStart;
    this.diffSecs = timeDiff / 1000;
    return (this.diffSecs);
}

function getSecs()
{
    var mySecs = initStopwatch();
    var mySecs1 = "" + mySecs;
    mySecs1 = mySecs1.substring(0, mySecs1.indexOf(".")) + " сек";
    document.getElementById('time').innerHTML = "Вы провели на этой странице: "+mySecs1+" секунд";
    window.setTimeout('getSecs()', 1000);
}
</script>

<div id="time"></div>

</body>

  Ответить  
 
 автор: sim5   (22.01.2010 в 11:20)   письмо автору
 
   для: Commander   (22.01.2010 в 07:08)
 

Скрипт то отработал, но можно запомнить метку времени когда отдали пользователлю форму, и получить метку времени, когда пользователь ее отправил. Если уж на то пошло, и я бы захотел выглядеть умным в каком-то там тесте - я отключу JS, пусть Ванек считает меня гением.

  Ответить  
 
 автор: Ванек2010   (22.01.2010 в 11:54)   письмо автору
 
   для: Commander   (22.01.2010 в 07:08)
 

Спасибо, но мы тут наоборот от JS хотим уйти)) Т.к. его просто могут отключить, и нужна работа php..

  Ответить  
 
 автор: Diplex   (22.01.2010 в 12:20)   письмо автору
 
   для: Ванек2010   (22.01.2010 в 11:54)
 

Можно использовать js - как фронт. Пускай показывает отсчёт времени, активирует нужные элементы и т.д. Но в тоже время, все данные по заходу в тест и т.д. должны записываться куда-то, и на основании их давать дальнейшие возможности в скрипте. Также по-возможности предупредить пользователя, чтобы включил js, а иначе у него ничего не получится, т.к. php следит за его действиями.

  Ответить  
 
 автор: neadekvat   (22.01.2010 в 12:19)   письмо автору
 
   для: Ванек2010   (22.01.2010 в 01:48)
 

Вас Попов в мануал заглядывать не научил?
У меня даже кошка знает, что за "много циферок" возвращает time()

Начинаете сессию, записываете туда время
По окончанию теста вычитаете - вот вам и время.
Но это бред чистой воды. Я вместо двух минут буду два часа может проходить этот тест, а потом меня пошлют в лес, потому что две минуты уже давно истекли?

  Ответить  
 
 автор: Diplex   (22.01.2010 в 12:23)   письмо автору
 
   для: neadekvat   (22.01.2010 в 12:19)
 

Ну можно сразу при переходе на след вопрос отлавливать сессию, если время не просрочено, то обновлять сессию на текущее время и показывать вопрос...

  Ответить  
 
 автор: neadekvat   (22.01.2010 в 12:26)   письмо автору
 
   для: Diplex   (22.01.2010 в 12:23)
 

А как я узнаю, сколько мне еще отведено администратором, в процессе ответа на вопрос?..

  Ответить  
 
 автор: Diplex   (22.01.2010 в 12:30)   письмо автору
 
   для: neadekvat   (22.01.2010 в 12:26)
 

Для этого js использовать, если пользователь выключил js - то предупредить и не дать пройти тест (параллельно вести записи на php со всеми входами/выходами).

  Ответить  
 
 автор: Valick   (22.01.2010 в 13:07)   письмо автору
 
   для: Diplex   (22.01.2010 в 12:30)
 

Лично меня бы вы не увидели на своем сайте после такого обращения со мной как с пользователем. Ибо требовать включения js для функционала данного мероприятия на мой взгляд ересь.
Просто дайте мне вопрос, укажите время когда он был мне выдан на странице, и напишите что на все про все у меня есть 2 минуты. Дальше уже мои проблемы, буду сидеть с секундомером на пару с неадекватом.
А ваша задача проверить уложился ли я в отведенное время, послать меня нафиг если всетаки не уложился и любезно предложить второй (и тд) вопрос.

  Ответить  
 
 автор: Diplex   (22.01.2010 в 13:27)   письмо автору
 
   для: Valick   (22.01.2010 в 13:07)
 

Я исхожу из задачи поставленной автором :) В любом случае, удобнее, когда тикает таймер :)

  Ответить  
 
 автор: Valick   (22.01.2010 в 13:00)   письмо автору
 
   для: neadekvat   (22.01.2010 в 12:26)
 

"Если хочешь есть варенье, не слови хлебалом мух" :)
как альтернатива секундомер в руке

Вот если бы автор темы слушал, то уже давно бы решили данный вопрос.
1) отправляем вопрос и фиксируем время в базе данных для данного пользователя
2) получаем ответ, записываем время ответа, проверяем правильность ответа и время отведенное на на этот ответ. если лимит превышен, то ответ не защитывается даже если он правильный.
3) одновременно с выводом вопроса в браузер, стартуем таймер, который показывает время оставшееся до окончания приема ответа на вопрос (у neadekvat секундомер, что тоже не плохо само по себе), но который никого никуда не пересылает (об этом и я и sim5 пытаемся обьяснить автору темы ибо автоматическая отсылка куда-либо это есть зло) и в идеале после истечения времени заменяет кнопку "Отправить ответ" на кнопку "Получить следующий вопрос"

эх.... (

  Ответить  
 
 автор: Ванек2010   (22.01.2010 в 19:59)   письмо автору
 
   для: Valick   (22.01.2010 в 13:00)
 

Я уже придумал совсем по другому.
Сделать submit невидимым.
Тестов 8, на каждый тест по 2 минуты.
В тестах нет вопросов, там логикаческая тема. Надо просто переключатель правильно ставить.
Перед началом теста, человек будет проинформирован, что если вы намерено выключили JavaScript, увы вы не сможете пройти тест. Если же вы ни чего не трограли в настройках браузера, то Welcome на проф. тестирование.
Кнопка просто будет скрыта и даться автоматически через 2 минуты. Если же пользователь отключил JS, то на последущие тесты его не пустит, а значит и не даст результата.
Вот и выход, всем спс.
Половина коментаторов, не представляет что за тест, и думают что время тут только мешает!
Я говорю время это ОБЯЗАТЕЛЬНАЯ часть, так устроена психология.

  Ответить  
 
 автор: sim5   (22.01.2010 в 20:05)   письмо автору
 
   для: Ванек2010   (22.01.2010 в 19:59)
 

Круто. Только запомните - если форму отправлять посредством JS, то кнопки SUBMIT вообще не надо, так что не стоит пугать этим пользователя, сам же метод отправки (submit) никак не сделать "невидимым" ;-)

  Ответить  
 
 автор: Ванек2010   (22.01.2010 в 20:31)   письмо автору
 
   для: sim5   (22.01.2010 в 20:05)
 

<div class='invis'>
  <input  type='submit' name='submit3' id='submit1' value='Далее'>
      </div>


css

.invis 
{
    visibility: hidden;

}

  Ответить  
 
 автор: sim5   (22.01.2010 в 20:34)   письмо автору
 
   для: Ванек2010   (22.01.2010 в 20:31)
 

Ну а зачем тогда "Далее"? ) Если вы это так хотите ее засекретить, то зря, код ваш всегда будет доступен, так что его можно подменить, если на то пошло.
Зачем кнопку то прятать, кто-то может и не ждать ваших 2-х минут, а ответить сразу, значит ему нужна кнопка.

  Ответить  
 
 автор: Ванек2010   (22.01.2010 в 20:41)   письмо автору
 
   для: sim5   (22.01.2010 в 20:34)
 

Да я тоже задавался этим вопрос, а если кто-то выполнит раньше 2 минут.
Но психолог сказал, именно так... тест следущий должен подаваться не раньше 2 минут, незнаю в чем тут прикол конечно)))
Но раньше полторы наврятли закончат =)
А вот по поводу Далее, эт просто на скорую руку щас сделал, потом уберу.
А что вы имели ввиду под словом "подменить" ? Эт как кнопку можно подменить, первый раз слышу =)
Кнопку можно было бы убрать, но такой JS код, что без нее не будет работать..
Мне и такой сойдет пока что... т.к. в JS не секу не че, а просить по 100 раз это через чур))

  Ответить  
 
 автор: sim5   (22.01.2010 в 20:49)   письмо автору
 
   для: Ванек2010   (22.01.2010 в 20:41)
 

Даже так - 2 минуты и ни шага в сторону?! Ну прямо таки тест для робота автомата.)

Все, что вы отдаете клиенту ему доступно для просмотра, а значит и для редактирования (подмены), какой угодно.
Если форму отправлять методом JS submit(), то кнопка SUBMIT тут сбоку припеку, о ее наличии этот метод даже и не поинтересуется. С чего вы взяли, что JS метод без нее не будет работать (не отпавит форму), где вы таких глупостей начитались?

  Ответить  
 
 автор: Ванек2010   (22.01.2010 в 22:24)   письмо автору
 
   для: sim5   (22.01.2010 в 20:49)
 

Я просто убрал кнопку и все перестало работать :)
Поставил кнопку, дал ей id='submit1' и заработало

  Ответить  
 
 автор: sim5   (23.01.2010 в 10:59)   письмо автору
 
   для: Ванек2010   (22.01.2010 в 22:24)
 

<?
print_r
($_POST);
?>
<form action="" method="post" id="as">
<input type="text" name="fld" value="12">
</form>
<script>
setTimeout("document.getElementById('as').submit()",5000);
</script>

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

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