На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > PHP counter , Не работает
      Привет.
      Есть такой счётчик, который не хочет работать/ проявляться
      ExpandedWrap disabled
        <?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);
        ?>

      Чё, ему, надо?
        cupoma58, скажем так - вопрос серьезный :) Но деталей мало.

        Нужна отладка. А для этого я тебе предлагаю:

        1) Определить "критические" точки в твоём скрипте
        2) В этих критических точках вывести отладочные сообщение, которые будут выводить содержимое текущих значимых сущностей.

        Увы, у PHP нет "вменяемых" средств отладки (про ХDebug не говорим - убожество). Но трассировку переменных в критических местах ни кто не отменял.

        Постарайся "облепить" свой скрипт вот такими отладочными сообщениями. И ты поймешь где что-то происходит не так.
          Идея - понятная. Непонятно - куда, сообщения, выводиться будут. Если переделать код под PDO:
          ExpandedWrap disabled
            ...
            catch (PDOException $e) {
                echo "<font color='#ff0000'>Ошибка:</font> " . $e->getMessage();
            }

          Счётчик, на странице, представлен png-файлом, на который добавляются цифры.
          Кроме файла активации (разового):
          ExpandedWrap disabled
            <?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):
          ExpandedWrap disabled
            <?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();
            }
            ?>

          ничего нет.
            А что у вам там такое страшное на 26 строке? Что за APDATE? Первый раз об этом слышу.
            На 27, 28, 36 и 37 то же что-то страшное.
            ExpandedWrap disabled
              SELECT COUNT(*) as todaycounter FROM kscount WHERE date='$date'";

            Учитывая создаваемое количество записей начинать передачу их из базы в скрипт, чтобы посчитать строки - не рационально. Лучше пускай БД этим занимается сама.
            Сообщение отредактировано: macomics -
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0217 ]   [ 14 queries used ]   [ Generated: 15.06.25, 21:03 GMT ]