2 PHP Errors


CK3

Grünschnabel
#1
Hallo Leute,

ich bin gerade dabei ein älteres Script wieder lauffähig zu machen für PHP 5.6. Mein Problem ist, dass ich folgende Errors bekomme:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\UwAmp\www\6dl\core.php on line 185
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\UwAmp\www\6dl\core.php on line 179

Da das Script eine Zeilenlänge von 1600 hat, zeige ich euch in dem Spoiler Code die Zeilen von 1-186 von der core.php:
PHP:
<?php




//check for errors
error_reporting(E_ALL);

// Calculate script start/end time
function get_microtime()
{
    list($usec, $sec) = explode(" ", microtime());
   
    return ((float)$usec + (float)$sec);
}

define("START_TIME", get_microtime());

//register_globals
if (ini_get('register_globals') != 1)
{
    if ((isset($_POST) == true) && (is_array($_POST) == true))
    {
        extract($_POST, EXTR_OVERWRITE);
    }
   
    if ((isset($_GET) == true) && (is_array($_GET) == true))
    {
        extract($_GET, EXTR_OVERWRITE);
    }   
}

if (isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']))
{
    $referrer = $_SERVER['HTTP_REFERER'];

} else {

    $referrer = "";
}

//anti-XSS
foreach ($_GET as $check_url)
{
    if ((eregi("<[^>]*script*\"?[^>]*>", $check_url)) || (eregi("<[^>]*object*\"?[^>]*>", $check_url)) || (eregi("<[^>]*iframe*\"?[^>]*>", $check_url)) || (eregi("<[^>]*applet*\"?[^>]*>", $check_url)) || (eregi("<[^>]*meta*\"?[^>]*>", $check_url)) || (eregi("<[^>]*style*\"?[^>]*>", $check_url)) || (eregi("<[^>]*form*\"?[^>]*>", $check_url)) || (eregi("\([^>]*\"?[^)]*\)", $check_url)) || (eregi("\"", $check_url)))
    {
        die("Fuck you!");
    }
}
unset($check_url);
/*
foreach ($_POST as $check_url)
{
    if ((eregi("<[^>]*script*\"?[^>]*>", $check_url)) || (eregi("<[^>]*object*\"?[^>]*>", $check_url)) || (eregi("<[^>]*iframe*\"?[^>]*>", $check_url)) || (eregi("<[^>]*applet*\"?[^>]*>", $check_url)) || (eregi("<[^>]*meta*\"?[^>]*>", $check_url)) || (eregi("<[^>]*style*\"?[^>]*>", $check_url)) || (eregi("<[^>]*form*\"?[^>]*>", $check_url)) || (eregi("\([^>]*\"?[^)]*\)", $check_url)) || (eregi("\"", $check_url)))
    {
        die("Fuck you!");
    }
}
unset($check_url);
*/

$folder_level = "";
$i = 0;
while (!file_exists($folder_level."config.php"))
{
    $folder_level .= "../";
    $i++;
   
    if ($i == 3)
    {
        die("Config file not found");
    }
}

require_once $folder_level."config.php";

$ip = $_SERVER['REMOTE_ADDR'];

define("BASE", $folder_level);
define("QUERY", isset($_SERVER['QUERY_STRING']) ? cleanurl($_SERVER['QUERY_STRING']) : "");
define("REQUEST", isset($_SERVER['REQUEST_URI']) && $_SERVER['REQUEST_URI'] != "" ? $_SERVER['REQUEST_URI'] : $_SERVER['SCRIPT_NAME']);
define("SELF", basename(cleanurl($_SERVER['PHP_SELF']))."?");
define("URL", "http://".$_SERVER['HTTP_HOST'].str_replace("&amp;", "&", REQUEST));
define("USER_IP", md5($ip));
define("IN_SCRIPT", true);
define("PREFIX", $db_prefix);
define("IMAGES", BASE."images/");
define("JS", BASE."javascript/");
define("THEMES", BASE."templates/");

/*connect to db

$db_connect = mysqli_connect("localhost", "root", "root");
$db_name = "6dl";
$db_select = mysqli_select_db($db_connect, $db_name);
if (mysqli_connect_errno())
{
    die("Es konnte keine Verbindung zur DB hergegestellt werden". mysql_error());
}   

if (!$db_select)
{
    die("<div align='center'><strong>Konnte keine Verbindung zur Datenbank herstellen!</strong></div>". mysql_error());
}
else{
    echo "erfolgreich";
}   
delete mysql-configs
unset($db_host, $db_user, $db_pass, $db_name);*/

//mysql-functions
$queries = 0;
$querytime = 0;

function dbquery($query)
{
    //connect to db

    $db_connect = mysqli_connect("localhost", "root", "root");
    $db_name = "6dl";
    $db_select = mysqli_select_db($db_connect, $db_name);
    if (mysqli_connect_errno())
    {
        die("Es konnte keine Verbindung zur DB hergegestellt werden". mysql_error());
    }   

    if (!$db_select)
    {
        die("<div align='center'><strong>Konnte keine Verbindung zur Datenbank herstellen!</strong></div>". mysql_error());
    }
else{
    echo "erfolgreich";
}   
    $var1 = "0";
    global $queries;
    global $querytime;
    $starttime = explode(' ', microtime());
    $result = mysqli_query($db_connect, $query);
    $endtime = explode(' ', microtime());
    $total_time = $endtime[0] + $endtime[1] - ($starttime[1] + $starttime[0]);
    $total_time = round($total_time * 1000);
    $querytime = $querytime+ $total_time;
    #if(iADMIN)
    #{
        #echo "\n<!---".$query." - ".$total_time." ms<br />---!>\n";
    #}
    if (!$result)
    {
        echo mysql_error();
        return false;   
       
    } else {
   
        $queries++;
        return $result;
    }   
}

function no_cache($query)
{
    global $queries;

    $result = mysql_unbuffered_query($query);
   
    if (!$result)
    {
        echo mysql_error();
        return false;
       
    } else {
   
        $queries++;
        return $result;
    }
}

function dbrows($query)
{
    return mysqli_num_rows($query);
   
}

function dbarray($query)
{
    $result = mysqli_fetch_array($query);

    if (!$result)
    {
        echo mysql_error();
        return false;
       
    } else {
   
        return $result;
    }
}
Der Fehler sollte sich in den letzten beiden Funktionen irgendwo wieder spiegeln. Da ich leider gerade ziemlich ratlos bin, stelle ich mal dieser Community die Frage.

Danke für eure Hilfe!

Liebe Grüße CK3
 

merzi86

Erfahrenes Mitglied
#2
Hi CK3,
das Problem liegt weniger an dieser Stelle, sondern eher beim Aufruf der Funktionen.

Den Funktionen wird kein erfolgreiches Query übergeben.
Es wäre Hilfreicher die Code-Stellen zu sehen, an dem die Prozeduren aufgerufen werden.

Grüße merzi
 

CK3

Grünschnabel
#3
Vielen Dank erstmal für deine Hilfe mezi86. Ich hab schon einige PHP Fehler in dem Script behoben, aber an dieser Stelle komme ich leider wenig weiter. Ich blende dir mal den kompletten Code von der core.php ein (Code ist zu lang für das Board, daher lege ich den Code extern auf nopaste.xyz ab):

https://nopaste.xyz/?3e26edebd9d85f93#SsAQkAEyYPgiAzO7VnW5ot9NBuv7gZbL/6gfV2VEzoY=


Falls jemand schlau daraus wird und mir helfen könnte, wäre ich sehr dankbar. Lösungsansätze wie man die Fehler beheben könnte wäre echt gut. Das Script hatte um die 20-30 Fehler, aber diese beiden bekomme ich leider nicht behoben :/.

Liebe Grüße CK3
 

merzi86

Erfahrenes Mitglied
#4
Was mir gerade in gesamten Skript aufgefallen ist.
In der Funktion dbquery wird abgefragt, ob der Query nicht durchgeführt wird.

Du gibst dann in Zeile 149 mysql_error aus.
mysql_error ist aber leer, da du mysqli nutzt.

Ändere mal Zeile 149 zu:
PHP:
echo mysqli_error ( $db_connect );
Dann wird der Fehler angezeigt, weshalb der Query fehlt läuft.
Eine kleine Verbesserung deines Skripts wäre, bevor du das Queryresult nutzt prüfe, ob es ungleich false ist.

z.B. so
PHP:
$result = dbquery("SELECT * FROM ".PREFIX."settings");

if( $result === FALSE ) 
  die( "Query ist fehlgeschlagen! Breche das Skript ab!" );

while($data = dbarray($result)) {
.....
 
Gefällt mir: CK3
#5
Notiz am Rande: PHP5.6 ist auch eine alte Version, für die es bald endgültig keine Sicherheitsupdates etc. mehr gibt.
Wenn du schon dabei bist, wäre ein Umstieg auf PHP7.x sehr sinnvoll...
 

CK3

Grünschnabel
#6
Vielen Dank, das hat mir gerade sehr weiter geholfen. Es fehlen wohl noch paar Datenbanken, deswegen läuft das ganze noch nicht. Baue die DB's gleich nach und dann sollte ich wieder weiter gekommen sein. Danke für eure Hilfe, ihr seid die besten.
 

Neue Beiträge