Помогите с PHP

M1
На сайте с 24.09.2013
Offline
55
783

Проблема такая есть сайт на DLE,на нем рейтинг сайтов,при добавление сайта в рейтинг,вверху вылазит ошибка

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in /public_html/engine/classes/mysqli.class.php on line 143

вот сам код

<?php




if(!defined('DATALIFEENGINE'))
{
die("Hacking attempt!");
}

function getRealIpAddr() {
if (!empty($_SERVER['HTTP_CLIENT_IP']))
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}

function variables() {
if ($_GET) {
$cont = array();
foreach ($_GET as $var_name => $var_value) $cont[] = "
".$var_name."=".$var_value;
$content = "GET - ".implode(", ", $cont);
}
if ($_POST) {
$cont = array();
foreach ($_POST as $var_name => $var_value) {
///$var_value = is_array($var_value) ? fields_save($var_value) : $var_value;
$var_value = str_replace(array("[", "]"), array("***091;", "***093;"), htmlspecialchars($var_value));
$cont[] = "
".$var_name."=".$var_value."";
}
$content .= "POST - ".implode(", ", $cont);
}
if ($_COOKIE) {
$cont = array();
foreach ($_COOKIE as $var_name => $var_value) $cont[] = "
".$var_name."=".$var_value;
$content .= "COOKIE - ".implode(", ", $cont);
}
if ($_FILES) {
$cont = array();
foreach ($_FILES as $var_name => $var_value) $cont[] = "
".$var_name."=".$var_value;
$content .= "FILES - ".implode(", ", $cont);
}
if ($_SESSION) {
$cont = array();
foreach ($_SESSION as $var_name => $var_value) $cont[] = "
".$var_name."=".$var_value;
$content .= "SESSION - ".implode(", ", $cont);
}
return $content;
}

class db
{
var $db_id = false;
var $query_num = 0;
var $query_list = array();
var $mysql_error = '';
var $mysql_version = '';
var $mysql_error_num = 0;
var $mysql_extend = "MySQLi";
var $MySQL_time_taken = 0;
var $query_id = false;


function connect($db_user, $db_pass, $db_name, $db_location = 'localhost', $show_error=1)
{
$db_location = explode(":", $db_location);

if (isset($db_location[1])) {

$this->db_id = @mysqli_connect($db_location[0], $db_user, $db_pass, $db_name, $db_location[1]);

} else {

$this->db_id = @mysqli_connect($db_location[0], $db_user, $db_pass, $db_name);

}

if(!$this->db_id) {
if($show_error == 1) {
$this->display_error(mysqli_connect_error(), '1');
} else {
return false;
}
}

$this->mysql_version = mysqli_get_server_info($this->db_id);

if(!defined('COLLATE'))
{
define ("COLLATE", "cp1251");
}

mysqli_query($this->db_id, "SET NAMES '" . COLLATE . "'");

return true;
}

function query($query, $show_error=true)
{
$time_before = $this->get_real_time();

if(!$this->db_id) $this->connect(DBUSER, DBPASS, DBNAME, DBHOST);

if(!($this->query_id = mysqli_query($this->db_id, $query) )) {

$this->mysql_error = mysqli_error($this->db_id);
$this->mysql_error_num = mysqli_errno($this->db_id);

if($show_error) {
$this->display_error($this->mysql_error, $this->mysql_error_num, $query);
}
}

$this->MySQL_time_taken += $this->get_real_time() - $time_before;

$this->query_list[] = array( 'time' => ($this->get_real_time() - $time_before),
'query' => $query,
'num' => (count($this->query_list) + 1));

$this->query_num ++;

return $this->query_id;
}

function get_row($query_id = '')
{

if ($query_id == '') $query_id = $this->query_id;

вот на эту строку ругается- return mysqli_fetch_assoc($query_id);
}

function get_array($query_id = '')
{
if ($query_id == '') $query_id = $this->query_id;

return mysqli_fetch_array($query_id);
}

function super_query($query, $multi = false)
{

if(!$multi) {

$this->query($query);
$data = $this->get_row();
$this->free();
return $data;

} else {
$this->query($query);

$rows = array();
while($row = $this->get_row()) {
$rows[] = $row;
}

$this->free();

return $rows;
}
}

function num_rows($query_id = '')
{
if ($query_id == '') $query_id = $this->query_id;

return mysqli_num_rows($query_id);
}

function insert_id()
{
return mysqli_insert_id($this->db_id);
}

function get_result_fields($query_id = '') {

if ($query_id == '') $query_id = $this->query_id;

while ($field = mysqli_fetch_field($query_id))
{
$fields[] = $field;
}

return $fields;
}

function safesql( $source )
{
if ($this->db_id) return mysqli_real_escape_string ($this->db_id, $source);
else return mysql_escape_string($source);
}

function free( $query_id = '' )
{

if ($query_id == '') $query_id = $this->query_id;

@mysqli_free_result($query_id);
}

function close()
{
@mysqli_close($this->db_id);
}

function get_real_time()
{
list($seconds, $microSeconds) = explode(' ', microtime());
return ((float)$seconds + (float)$microSeconds);
}

function display_error($error, $error_num, $query = '')
{
global $db, $tpl, $config;

if($query) {
// Safify query
$query = preg_replace("/([0-9a-f]){32}/", "********************************", $query); // Hides all hashes
$query_str = "$query";
}

$ip = getRealIpAddr();
$datee = time()+($config['date_adjust']*60);
$d = $_REQUEST['do'];
$s = $_REQUEST[subaction];
$md = $_REQUEST['mod'];
if ($d!='') $analizator_d = "?do=".$d."";
if ($s!='') $analizator_s = "?subaction=".$s."";

$config['offline_reason'] = "Страница ".$config['http_home_url']."".$analizator_d."".$analizator_s." находится на реконструкции, через 10-15 минут она будет доступна.
<br>Приносим вам свои извинения за доставленные неудобства.
<br><br> Вы можете перейти на главную страницу <a href='".$config['http_home_url']."' style='color:#000;'>".$config['home_title']."</a>";

$text_osh_msq = '
Возникла ошибка: '.$error.'
Номер ошибки: '.$error_num.'
Текст ошибки: '.$query_str.'
Обращение с IP: '.$ip.'
Подробнее: '.variables().'
';

$datees=date('Y-m-d-H-m-s',$datee);

$loc_file = ENGINE_DIR.'/cache/logs/'.$md.''.$s.''.$d.''.$datees.'.txt';
if (!file_exists($loc_file))
{
$handler = fopen(ENGINE_DIR.'/cache/logs/'.$md.''.$s.''.$d.''.$datees.'.txt', "w");
fwrite($handler, $text_osh_msq);
fclose($handler);
}

require_once ENGINE_DIR.'/classes/parse.class.php';
require_once ENGINE_DIR.'/modules/sitelogin.php';
///include_once ENGINE_DIR . '/modules/offline.php';

}

}


?>

заранее всем спасибо))

3331c3
md5by
На сайте с 30.12.2011
Offline
68
#1
maksim1992:
Проблема такая есть сайт на DLE,на нем рейтинг сайтов,при добавление сайта в рейтинг,вверху вылазит ошибка
вот сам код
<тут был код>
заранее всем спасибо))

Какая версия DLE ? Больше подробностей ☝

M1
На сайте с 24.09.2013
Offline
55
#2

версия 9.5

TakingBackMySoul
На сайте с 09.11.2011
Offline
65
#3

Думаю дело в function connect()

Во-первых в условии дважды указывается хост базы:

83 - $this->db_id = @mysqli_connect($db_location***91;0***93;, $db_user, $db_pass, $db_name, $db_location***91;1***93;);

Во-вторых $db_name надо указывать в функции mysql_select_db()

Причем это относится и к else данной функции

Да и вообще что это: $db_location***91;0***93; ?? переменной это быть не может, ибо в имени переменных не может быть ";", а если вы тупо подписали к переменной строку, то ее нужно было конкатенировать.

В результате неверного коннекта в mysql_fetch_assoc() возвращается не массив, а false

md5by
На сайте с 30.12.2011
Offline
68
#4
TakingBackMySoul:
Думаю дело в function connect()
Да и вообще что это: $db_location***91;0***93; ?? переменной это быть не может, ибо в имени переменных не может быть ";", а если вы тупо подписали к переменной строку, то ее нужно было конкатенировать.

Это тутошний тег корявит исходник )

TitanIKS
На сайте с 25.01.2013
Offline
46
#5

Ошибка не в классе который вы тут выложили mysqli.class.php

А в том, что не верные данные передаете в сам класс, не посредственно в метод get_row() который вызывает функцию mysqli_fetch_assoc() с этими данными.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий