1. sid и SID разные колонки 2. нужно проверять все mysql_query на оишбки. $timeout=time()+0.5*60; может тут знак минус? 8) или ты уже в будущее собрался?
Код (Text): $sql_1="select TIME from SESSION where ('SID'='$sid[id]')"; $sql_2="update SESSION set TIME=$timeout where ('SID'='$sid[id]')"; $sql_3="insert into SESSION values('$sid[id]','$timeout','1')"; делаю так! со временем помоему всё ок так как я TIME=$timeout и также где $sql_del="delete from SESSION where (TIME<$time)"; тока не могу понять одного, в базе получается множество записей при обновлении страници, а при одной и той же сессии должна быть тока одна запись с именем этой сессии!
Pasha работающий код http://440hz.ru/trash/sessions/ PHP: <? // стартуем сессию session_start(); // получаем е ID $sid=session_id(); // текущее время $now=time(); // время жизни сессии в секундах $deadline = $now - 60; // базовые хлопоты $server="localhost"; $user="440hz"; $passwd="*****"; $conn=mysql_connect($server,$user,$passwd); mysql_select_db("440hz",$conn); // уничтожаем сессии, которые просрочены $sql_del="delete from SESSION where (TIME < ".$deadline.")"; // поиск сессии $sql_cnt = "select count(*) as CNT from SESSION where SID ='$sid'"; // обновление сессии $sql_upd = "update SESSION set TIME = ".$now.", PAGES = PAGES+1 where SID = '$sid'"; // вставка новой сессии $sql_ins = "insert into SESSION (SID,TIME,PAGES) values('$sid',$now,1)"; function Query($sql,$conn) { // получаем запрос $result = mysql_query($sql,$conn); // обрабатываем if(!$result) { print('<hr>Ошибка выполнения запроса: '.$sql.''); print('<hr>'.mysql_error()); exit(); } // при успехе возвращаем return $result; } // убираем лишние Query($sql_del,$conn); // ищем $result = Query($sql_cnt,$conn); // получаем результат $cnt = mysql_fetch_object($result); if ($cnt->CNT) { // если ужо есть такая Query($sql_upd,$conn); } else { // новая сессия Query($sql_ins,$conn); } print ('<a href="./?rnd='.$now.'">обновить</a><hr>'); $rows = Query('SELECT * FROM SESSION',$conn); print('<table border=1>'); while($row = mysql_fetch_object($rows)) { print('<tr><td>'.$row->SID.'</td><td>'.date('d.m.Y H:i'.$row->TIME).'</td><td>'.$row->PAGES.'</td></tr>'); } print('</table>'); ?>
я все же не пойму почему же у меня нормально скрипт не работает ведь строка Код (Text): $sql_2="update SESSION set TIME=".$timeout." where ('SID'='$sid[id]')"; должна заменять TIME на значение в $timeout подскажите, в чём же я ошибаюсь? плиз?
Pasha а ты выведи запрос. увидишь что там на самом деле. я ж тебе привел РАБОЧИЙ код ... что-то не так?
Во первых, как я уже говорил я новечёк в программирование, и в данный момент в первые изучаю что такое БД и с чем его едят и я не могу понять что вы подразумиваете под выводом этого запроса, этоже действие-иль у него есть результат? тогда как его вывести?-под выводом я понимаю что нужно послать запрос к бд, ражбить полученныи результат на дма массива и вывести его в таблице Во вторых я не совсем пойму что делает, а точнее как работает строка: $sql_cnt = "select count(*) as CNT from SESSION where SID ='$sid'"; и что такое $cnt->CNT
Pasha 1. это отладка. как только что-то не выполняется (напримр запрос) нужно удостовериться что запрос корректный. Для этого он выводится просто в броузер $sql = 'bls-bls-bls'; print($sql); $res=mysql_query($sql); запрос типа SELECT возвращает ресурс из которого можно получить или именованные массивы или объекты. я привык пользоваться объектами. select count(*) as cnt ... вернет кол-во записей подходящих под условие WHERE. так делается для того что б избежать лишних проверок ине тянуть все записи в скрипт. cnt это имя столбца в который эти данные поместяться. нужно же нам потом их оттуда доставать? пример: тебе нужно посчитать кол-во записей в таблице. новичек делает так: $res = mysql_query(select * from table); print mysql_num_rows($res); не подозревая о том, что все эти данные были закачаны из базы в скрипт. а сли таких записей 1000000? их что? тянуть все в скрипт? Конечно нет! Вот для этого и используют конструкции типа count(*) as cnt, тогда запрос вернет всего ОДНЦ строку в которой будет содержаться кол-во записей. $CNT->cnt это синтаксис к доступу переменной, принадлежащей объекту, который возвращает mysql_fetch_object($res); многие используют массивы. я редпочитаю объекты. дело вкуса, наверное.
Pasha реальный запрос с php.ru. эта цифра видна на первой странице. при условии времени жизни сессии 24 часа. Код (Text): mysql> select count(*) as CNT from oops_sessions; +------+ | CNT | +------+ | 2845 | +------+ 1 row in set (0.00 sec) понятно?
Pasha select count(*) as CNT from oops_sessions; - запрос CNT - поле 2845 - значение 1 row in set (0.00 sec) - время выполнения запроса.
Hight т.е. поле CNT используется для временного хранеия информации, если да то для какой же информации и зачем?
Pasha извини,,, я не следил за вашей беседой с 440hz и не знаю что это поле у вас означает ) вы там чего-то спроектировали уже непонятного,,,, я лишь ответил на предыдущий вопрос )
select count(*) as CNT from oops_sessions; конкретно в этом запросе, в поле CNT будет храниться значение количества записей таблицы
Hight Спасибо и на этом, хот я и подредактировал код 440hz(Отдельное вам спасидо) и он у меня работает, я так и не понял как же всёже это работает но как будет время и бодет по больше знаний так я сраз посторуясь разобраться, p.s. с паскалем было намного проще! 8) :roll:
Спасибо, я разобрался и по аналогии кода 440hz подредактировал свой под себя и у меня всё заработало! вопрос закрыт, спасибо!
Доброго всем чегонибудь. Вот вопрос возник... счётчик это хорошо, а со статистикой ПО СТРАНАМ это вообще прелесть. на ВоВэбе нашёл один вроде нормальный, установился, считал... по началу.... но статистику не выводит вообще никак. сам скрипт (в архиве) http://planeta.uz/country.zip неподскажете в чём может быть дело? где ошибка, у кого? Заранее спасибо. UPD убрал ссылку самой статистики по причине замены счётчика. хотя нашёл в интернете такой же - работающий: http://www.vladtermo.ru/123/stat.php?d=t&what=countries связался с администрацией, которая любезно предоставила файлы прям с сетвера, чтоб я проверил на своём, сейчас будем смотреть.
стганно, стганно... а уведомления на мыло не приходят... ну и ладно... аватарку поменял, терь бы кто помог со счётчиком, который страны контролировать будет...
всем привет! у меня вопрос по первоначальной теме счетчика посетителей написал я себе оный, все замечательно работает, только бывает глюк следующего плана: session_id() иногда не возвращает значения не понимаю в чем может быть ошибка http://mx9-2004.l2favorit.ru/ - здесь пример