
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.75] |
![]() |
|
Сообщ.
#1
,
|
|
|
Привет.
Есть такой счётчик, который не хочет работать/ проявляться ![]() ![]() <?php Error_Reporting(E_ALL & ~E_NOTICE); require_once 'config.inc.php'; // подключение - всё в порядке if (!extension_loaded('gd')) { echo '<font color="#ff00ff">не загружен модуль GD</font>'; exit; } // определяем ip-адрес и дату $ip = (isset($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : false; $date = date('Y-m-d'); // перед добавлением информации, в БД, нужно применить addslashes() $cookie = addslashes($today_hosts); $referer = addslashes($r); $screen = addslashes($screen); $java = addslashes($je); $browser = addslashes($na); $page = addslashes($p); $result = "INSERT INTO kscount VALUES ('".$ip."', '".$cookie."', '".$referer."', '".$screen."', '".$java."', '".$browser."', '".$page."', '".$date."')";//t2 // хиты (просмотры страниц) за все время $result2 = "APDATE countall SET countall = countall + 1";//d1 $result3 = "SELECT countall FROM countall";//t1 $num_results3 = mysql_num_rows($result3); for ($i = 0; $i<$num_results3; $i++) { $row = mysql_fetch_array($result3); $all_hits = htmlspecialchars(stripslashes($row["countall"])); } // хиты за сегодня $result4 = "SELECT * FROM kscount WHERE date='$date'"; $today_hits = mysql_num_rows($result4); // хосты (посетители) за сегодня $result5 = "SELECT DISTINCT usip FROM kscount WHERE date='$date'"; $today_hosts = mysql_num_rows($result5); // если число будет длиннее 15 цифр или неизвестно, то выведем знак '?' if (strlen($all_hits)>15||!isset($all_hits)) {$all_hits = "?";} // всего хитов if (strlen($today_hits)>15||!isset($today_hits)) {$today_hits = "?";} // хиты за сегодня if (strlen($today_hosts)>15||!isset($today_hosts)) {$today_hosts = "?";} // хосты за сегодня // создаем картинку и запрещаем кэширование, что-бы картинка не сохранялась, в кэше браузера, а обновлялась при каждой загрузке header("Expires: Mon, 25 Jul 2005 10:00:00 GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Content-type: image/png"); $image = imagecreatefrompng("counter.png"); // выбираем цвет для текста счетчика $color = imagecolorallocate($image, 255, 255, 0); // желтый цвет шрифта для хитов за все время $color2 = imagecolorallocate($image, 0, 0, 255); // синий цвет шрифта для хитов за сегодня $color3 = imagecolorallocate($image, 0, 0, 0); // черный цвет шрифта для хостов за сегодня // рисуем, к примеру, строку $all_hits, цветом $color, шрифтом 5, лву: х=2 у=2, на изображении $image imagestring($image, 5, 41, 2,"$all_hits", $color); imagestring($image, 5, 69, 21, "$today_hits", $color2); imagestring($image, 5, 69, 40, "$today_hosts", $color3); imagepng($image); imagedestroy($image); ?> Чё, ему, надо? |
Сообщ.
#2
,
|
|
|
cupoma58, скажем так - вопрос серьезный
![]() Нужна отладка. А для этого я тебе предлагаю: 1) Определить "критические" точки в твоём скрипте 2) В этих критических точках вывести отладочные сообщение, которые будут выводить содержимое текущих значимых сущностей. Увы, у PHP нет "вменяемых" средств отладки (про ХDebug не говорим - убожество). Но трассировку переменных в критических местах ни кто не отменял. Постарайся "облепить" свой скрипт вот такими отладочными сообщениями. И ты поймешь где что-то происходит не так. |
Сообщ.
#3
,
|
|
|
Идея - понятная. Непонятно - куда, сообщения, выводиться будут. Если переделать код под PDO:
![]() ![]() ... catch (PDOException $e) { echo "<font color='#ff0000'>Ошибка:</font> " . $e->getMessage(); } Счётчик, на странице, представлен png-файлом, на который добавляются цифры. Кроме файла активации (разового): ![]() ![]() <?php // Используется один раз, при запуске проекта: http://site/counter/install.php --> inter require_once 'config.inc.php'; try { //$t1 = "CREATE TABLE countall (countall char(255) null);"; // вручную //$d1 = "INSERT INTO countall (coutall) VALUES ('22645');"; // вручную $t2 = "CREATE TABLE kscount(usip char(30) null, cookie char(10) null, referer text null, screen char(30) null, java char(10) null, browser char(255) null, page char(255) null, date date null);"; $conn->exec($t2); //echo'<font color="#00ff00">Таблица kscount создана</font>'; } catch (PDOException $e) { echo '<font color="#ff0000">Таблица kscount не создана:</font> ' . $e->getMessage(); } ?> и файла подключения к mySQL-серверу (config.inc.php): ![]() ![]() <?php try { $conn = new PDO("mysql:host=localhost;dbname=baza", "baza", "password"); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "<font color='#00ff00'>mySQL - на связи</font>"; } catch (PDOException $e) { echo "<font color='#ff0000'>mySQL - занято:</font> " . $e->getMessage(); } ?> ничего нет. |
Сообщ.
#4
,
|
|
|
А что у вам там такое страшное на 26 строке? Что за APDATE? Первый раз об этом слышу.
На 27, 28, 36 и 37 то же что-то страшное. ![]() ![]() SELECT COUNT(*) as todaycounter FROM kscount WHERE date='$date'"; Учитывая создаваемое количество записей начинать передачу их из базы в скрипт, чтобы посчитать строки - не рационально. Лучше пускай БД этим занимается сама. |