Witam,
Mam 2 problemy z modułem i już nie wiem gdzie kryje się błąd...
Na początek mój moduł wyświetla ostatnio aktywnych użytkowników na stronie oraz aktualnych.
1. Błąd jak jest to z jakiegoś powodu na PHP 5.6 (nie wiem jak na starszych ale raczej jest ok) w przeglądarce po znalezieniu mojej strony w "opisie" jest taki komunikat:
The Error returned was: Something is wrong in your syntax obok '`time`=VALUES(`time`)' w linii 3. SQL query: INSERT INTO `dle_online` (`http://www.php.net/key`, `uid`, `uname`, `http://www.php.net/time`, `ip`, `user_agent`, `os`, `location`, `proxy`, `foto`, `user_group`) VALUES ('c73438351767789436b3403cb68c2728', '0', 'robot', '1515768201', ...
Pokaż błędy php.
Właśnie problem w tym że nie pokazuje żadnego błędu. Jak napisałem wyżej na php7 działa moduł z tym że nie pokazuje żadnych użytkowników... możesz wejść na moją stronę i sam zobaczysz...
http://dj-alexn.pl
Na samym dole strony ten licznik jest
http://www.php.net/error_reporting(-1); http://www.php.net/ini_set('display_errors', true);
Po wejściu na stronę wyświetla się ostrzeżenie o bezpieczeństwie. Nie masz tam jakiegoś wirusa?
to co podałeś to znalazłem coś podobnego w pliku gdzie jest tylko:
<?php /* #################################################### @copyright (c) 2015-2017 Dj_AlexN Graphic @name Moduł Online by Dj_AlexN Graphic @version 6.2 @link http://dj-alexn.xaa.pl #################################################### */ @http://www.php.net/error_reporting(7); @http://www.php.net/ini_set('display_errors', true); @http://www.php.net/ini_set('html_errors', false); http://www.php.net/define('DATALIFEENGINE', true); http://www.php.net/define('ROOT_DIR', '../..'); http://www.php.net/define('ENGINE_DIR', '..'); include ENGINE_DIR.'/data/config.php'; @http://www.php.net/header("HTTP/1.0 200 OK"); @http://www.php.net/header("HTTP/1.1 200 OK"); @http://www.php.net/header("Cache-Control: no-cache, must-revalidate, max-age=0"); @http://www.php.net/header("Expires: 0"); @http://www.php.net/header("Pragma: no-cache"); @http://www.php.net/header("Content-type: text/css; charset=".$config['charset']); $data = "Ustawienia"; http://www.php.net/echo $data; ?>
To co masz w liniach od 11 do 13 zamień na to
http://www.php.net/error_reporting(-1); http://www.php.net/ini_set('display_errors', true);
Więc rozumiem że mówisz o wyświetlaniu tego błędu w przeglądarce:
The Error returned was: Something is wrong in your syntax obok '`time`=VALUES(`time`)' w linii 3. SQL query: INSERT INTO `dle_online` (`http://www.php.net/key`, `uid`, `uname`, `http://www.php.net/time`, `ip`, `user_agent`, `os`, `location`, `proxy`, `foto`, `user_group`) VALUES ('c73438351767789436b3403cb68c2728', '0', 'robot', '1515768201', ...
No to dobra to jest rozwiązanie z 1 ale teraz dlaczego jak zmienię wersję PHP na 7.0 to nagle w bloku nie wyświetla mi użytkowników a po zmianie na php 5.6 pojawiają się... tu na pewno jest coś nie tak z kodem php
Wklej tu kod, bo ludzie raczej nie wczhodzą na nieznane strony i nie otwierają nieznanych plików.
Ok więc tak w szablonie daję kod:
{include file='engine/modules/online.php'}
Kod z tego pliku:
<?php /* #################################################### @copyright (c) 2015-2017 Dj_AlexN Graphic @name Moduł Online by Dj_AlexN Graphic @version 6.2 @link <a href="http://dj-alexn.xaa.pl" target="_blank">http://dj-alexn.xaa.pl</a> #################################################### */ if(!http://www.php.net/defined('DATALIFEENGINE')) { http://www.php.net/die("Hacking attempt!"); } /* ==================================== Podłączenie klasy ==================================== */ require_once ROOT_DIR.'/engine/classes/online.class.php'; /* ==================================== Usuwanie starych zapisywań ==================================== */ $time = $_TIME - $online_config['time_out'] * 60; $rand = http://www.php.net/rand(1, 20); if($rand%2 == 0) { $db->query("DELETE FROM `".PREFIX."_online` WHERE `time` < '$time'"); } /* ==================================== Określenie miejsca pobytu ==================================== */ $location = $online_api->getUserLocation(); /* ==================================== Określenie IP, Proxy, User agent ==================================== */ $_IP = $db->safesql($_SERVER['REMOTE_ADDR']); $_UA = $db->safesql($_SERVER['HTTP_USER_AGENT']); $_PROXY = $db->safesql(http://www.php.net/getenv('HTTP_X_FORWARDED_FOR')); /* ============================================== Jeśli użytkownik wszedł - czyści ciasteczka ============================================== */ if( http://www.php.net/isset( $_POST['login'] ) and $_POST['login'] == "submit" ) { if( PHP_VERSION < 5.2 ) { http://www.php.net/setcookie( "module_online", "", 0, "/", DOMAIN . "; HttpOnly" ); } else { http://www.php.net/setcookie( "module_online", "", 0, "/", DOMAIN, NULL, TRUE ); } $key = http://www.php.net/md5("guest".$_IP); $db->query("DELETE FROM `".PREFIX."_online` WHERE `key`='{$key}'"); } /* ================================================= Ciasteczka nope? Dryfuje na liście użytkowników ================================================= */ if(!http://www.php.net/isset($_COOKIE['module_online'])) { /* ==================================== Jeśli jesteś zalogowany ==================================== */ if($is_logged) { /* ==================================== Określić system operacyjny ==================================== */ $OS = $online_api->getUserOS($_UA); /* ==================================== Ustalamy przeglądarkę ==================================== */ $user_agent = $online_api->getUserBrowser($_UA); /* ==================================== Tworzenie klucza, dodać do listy ==================================== */ $key = http://www.php.net/md5($member_id['user_id'].$_IP); $db->query("INSERT INTO `".PREFIX."_online` (`key`, `uid`, `uname`, `time`, `ip`, `user_agent`, `os`, `location`, `proxy`, `foto`, `user_group`) VALUES ('{$key}', '{$member_id['user_id']}', '{$member_id['name']}', '$_TIME', '{$_IP}', '{$user_agent}', '$OS', '$location', '$_PROXY', '{$member_id['foto']}', '{$member_id['user_group']}') ON DUPLICATE KEY UPDATE `key`=VALUES(`key`), `uid`=VALUES(`uid`), `uname`=VALUES(`uname`), `user_agent`=VALUES(`user_agent`), `foto`=VALUES(`foto`), `OS`='$OS', `proxy`='$_PROXY', `time`='$_TIME', `location`='$location', `user_group`=VALUES(`user_group`)"); } else { /* ==================================== Jeśli nie jest zalogowany ==================================== */ /* ==================================== Ustal robota ==================================== */ $robot = $online_api->check_robot($_UA); /* ========================================================= Umieszcza się w bazie danych robota lub odwiedzających ========================================================= */ if($robot != '') { $key = http://www.php.net/md5($robot.$_IP); $db->query("INSERT INTO `".PREFIX."_online` (`key`, `uid`, `uname`, `time`, `ip`, `user_agent`, `os`, `location`, `proxy`, `foto`, `user_group`) VALUES ('{$key}', '0', 'robot', '$_TIME', '{$_IP}', '{$user_agent}', '$OS', '{$location}', '{$_PROXY}', 'unknown', '{$member_id['user_group']}') ON DUPLICATE KEY UPDATE `key`=VALUES(`key`), `user_agent`=VALUES(`user_agent`), `OS`='$OS', `location`='$location' `time`=VALUES(`time`)"); } else { $key = http://www.php.net/md5("guest".$_IP); $db->query("INSERT INTO `".PREFIX."_online` (`key`, `uid`, `uname`, `time`, `ip`, `location`) VALUES ('{$key}', '0', 'guest', '$_TIME', '{$_IP}', '{$location}') ON DUPLICATE KEY UPDATE `uid`='0', `uname`='guest', `user_agent`='unknown', `foto`='unknown', `OS`='unknown', `proxy`='unknown', `time`='$_TIME', `location`='unknown', `user_group`='unknown'"); } } /* ========================================== Tworzenie plików cookie na czas wyjścia ========================================== */ $expires = http://www.php.net/time() + ($online_config['time_out'] * 60); if( PHP_VERSION < 5.2 ) { http://www.php.net/setcookie( "module_online", "1", $expires, "/", DOMAIN . "; HttpOnly" ); } else { http://www.php.net/setcookie( "module_online", "1", $expires, "/", DOMAIN, NULL, TRUE ); } } /* =============================================== Jeśli AKTYWNY - aktualizowanie lokalizacji =============================================== */ if($online_config['show_location'] == "yes" OR $online_config['show_last_visit'] == "yes") { if($is_logged) { $key = http://www.php.net/md5($member_id['user_id'].$_IP); $db->query("UPDATE `".PREFIX."_online` SET `time`='$_TIME', `location`='{$location}' WHERE `key`='{$key}'"); } else { $robot = $online_api->check_robot($_UA); if($robot != null) { $key = http://www.php.net/md5($robot.$_IP); $db->query("UPDATE `".PREFIX."_online` SET `time`='$_TIME', `location`='{$location}' WHERE `key`='{$key}'"); } } } $OnlineList = $online_api->getOnlineList(); $all = $OnlineList['all']; $users_count = $OnlineList['users_count']; $users = $OnlineList['users']; $guests = $OnlineList['guests']; $robots_count = $OnlineList['robots_count']; $robots = $OnlineList['robots']; /* ========================================== wuświetlanie 20-stu ostatnich aktywnych ========================================== */ if($online_config['show_twenty_users'] == "yes") { $sql = $db->query("SELECT lastdate, user_id, name, logged_ip, foto, user_group FROM ".USERPREFIX."_users ORDER BY lastdate DESC LIMIT 20"); $twenty_users_count = 0; $twenty_users = null; while($row = $db->get_row($sql)) { $online_api->start($row['user_id'], $row['name'], $row['logged_ip'], $row['lastdate'], null, $row['user_group'], null, null, null, $row['foto']); $twenty_users .= $online_api->getUserInfo(); $twenty_users_count++; $online_api->clear(); } } /* ==================================== Usuń ostatni przecinek ==================================== */ if($users_count == 0) { $users = "0"; } else { $users = http://www.php.net/substr($users, 0, -2); } if($robots_count == 0) { $robots = "0"; } else { $robots = http://www.php.net/substr($robots, 0, -2); } if($twenty_users_count == 0) { $twenty_users = "0"; } else { $twenty_users = http://www.php.net/substr($twenty_users, 0, -2); } /* ==================================== Otwórz szablon, wprowadź kody ==================================== */ $tpl->load_template('online/list.tpl'); $tpl->set('{guests}', $guests); $tpl->set('{users}', $users); $tpl->set('{robots}', $robots); $tpl->set('{twenty_users}', $twenty_users); $tpl->set('{users_count}', $users_count); $tpl->set('{robots_count}', $robots_count); $tpl->set('{twenty_users_count}', $twenty_users_count); $tpl->set('{all}', $all); $tpl->compile('online'); $tpl->clear(); http://www.php.net/echo $tpl->result['online']; ?>
Ale nadal to nie rozwiązuje problemu z brakiem wyświetlania aktywnych użytkowników na php 7
Sprawdź logi serwera bo masz pewnie kupę błędów których nie wyświetlasz. Teb obiekt db to mam nadzieję nie rozszerzenie mysql?
Sprawdziłem logi i nic tam nie ma jedyne błędy to z rss.xml
A co do tego obiektu db to w systemie w wielu miejscach jest podobne odniesienie do bazy danych np:
$db->query( "SELECT * FROM " . PREFIX . "_category ORDER BY posi ASC" );
Jeśli masz błędy rss.xml to zapewne nie sprawdzasz błędy php tylko logi wejść.
wszystkie logi serwera jakie mogłem sprawdzić to sprawdziłem i jedyne błędy jakie były to tylko z rss i nic więcej
Apache generuje domyślnie 2 logi error_log i access_log. Sprawdzasz to u siebie lokalnie czy na serwerze?
Mówię że nie ma żadnych błędów...
Niemożliwe żeby błąd zapytania który sypał co najmniej warningiem nie został nigdzie uwzględniony. Raczej to wyżej nie działa. czyli które ci się zapytania wykonują na nowej wersji a które nie? Wkładania rekordów do bazy działa ale nie działa samo ich pobieranie?
Napiszę to co pisałem jednemu użytkownikowi na PW.
Moduł działa na zasadzie że: użytkownik, gość lub robot wchodząc na stronę jego dane są wysyłane do bazy na określony czas. Na stronie w bloku wyświetla liczbę aktywnych użytkowników ale nie wyświetla nicków i nawet w konsoli ich nie ma tak jakby nie istniały. W panelu admina gdzie mam konfigurację tam również można zobaczyć kto jest online i ich dane i w panelu wszystko jest ok tylko na stronie coś nie chce wyświetlać.
Jak zmienię wersję PHP na 5.6 to wszystko pokazuje jak należy ale jak zmienię na 7.x to już nagle brak użytkowników.
Wcześniejszy błąd dotyczący bazy co podałem wyświetlał w wyszukiwarce jak wpisało się adres strony to tak jakby w opisie strony przykład:
//////////////////////////////////////////////
Problem z wyświetlaniem użytkowników rozwiązany ale nadal ni stąd ni z owąd nadal pojawia się błąd z SQL w 'opisie' strony w wynikach wyszukiwania. Skopiowałem część tego błędu by znaleźć czy dużo jest takich stron... na szczęście nie ale to strasznie odstrasza ludzi jak coś wpisują w wyszukiwarkę i wyskakuje im 1 strona gdzie w opisie jest błąd...
Po przetłumaczeniu tego błędu wychodzi:
if($is_logged) { $OS = $online_api->getUserOS($_UA); $user_agent = $online_api->getUserBrowser($_UA); $key = http://www.php.net/md5($member_id['user_id'].$_IP); // Pierwsze Odwołanie $db->query("INSERT INTO `".PREFIX."_online` (`key`, `uid`, `uname`, `time`, `ip`, `user_agent`, `os`, `location`, `proxy`, `foto`, `user_group`) VALUES ('{$key}', '{$member_id['user_id']}', '{$member_id['name']}', '$_TIME', '{$_IP}', '{$user_agent}', '$OS', '$location', '$_PROXY', '{$member_id['foto']}', '{$member_id['user_group']}') ON DUPLICATE KEY UPDATE `key`=VALUES(`key`), `uid`=VALUES(`uid`), `uname`=VALUES(`uname`), `user_agent`=VALUES(`user_agent`), `foto`=VALUES(`foto`), `OS`='$OS', `proxy`='$_PROXY', `time`='$_TIME', `location`='$location', `user_group`=VALUES(`user_group`)"); } else { $robot = $online_api->check_robot($_UA); if($robot != '') { $key = http://www.php.net/md5($robot.$_IP); // 2 Odwołanie $db->query("INSERT INTO `".PREFIX."_online` (`key`, `uid`, `uname`, `time`, `ip`, `user_agent`, `os`, `location`, `proxy`, `foto`, `user_group`) VALUES ('{$key}', '0', 'robot', '$_TIME', '{$_IP}', '$robot', 'unknown', 'unknown', 'unknown', '/engine/skin/images/online/icon_root.png', 'unknown') ON DUPLICATE KEY UPDATE `key`=VALUES(`key`), `time`=VALUES(`time`)"); } else { $key = http://www.php.net/md5("guest".$_IP); $db->query("INSERT INTO `".PREFIX."_online` (`key`, `uid`, `uname`, `time`, `ip`) VALUES ('{$key}', '0', 'guest', '$_TIME', '{$_IP}') ON DUPLICATE KEY UPDATE `uid`='0', `uname`='guest', `user_agent`='unknown', `foto`='unknown', `OS`='unknown', `proxy`='unknown', `time`='$_TIME', `location`='unknown', `user_group`='unknown'"); } }
Nie te zapytania podałeś... Błąd masz ewidentnie w zapytaniu SQL ale nie w tym. I na dodatek z przecinkiem o którym Ci już mówiłem.
Tamtego zapytania już nie ma, zrobiłem nowe zapytanie co jest wyżej podane z względów nie wyświetlania wszystkich informacji w bloku ale nigdzie nie brakuje tego przecinka a w wyszukiwarce nadal pojawia się błąd...
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)