MyBB.de Forum

Normale Version: Fehlermeldung in der index.php dabei keine Änderungen dort vorgenommen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hellöah ihr Lieben,
ich habe folgende Änderung in meinem Board gemacht und habe seither obwohl ich wieder auf das Original gegangen bin nicht verschwindet. Was hat das zu Bedeuten und wie bekomme ich es wieder weg?

Von:
Code:
eval("\$post['inplaytracker'] = \"".$templates->get("ipt_postbit")."\";");

ZU:
Code:
if ($postcounter == 1) {
    eval("\$post['inplaytracker'] = \"".$templates->get("ipt_postbit")."\";");
} else {
    $post['inplaytracker'] = "";
}

Fehlermeldung: Warning [2] Division by zero - Line: 500 - File: index.php PHP 7.4.33 (Linux)
File
Line
Function/inc/class_error.php
153
errorHandler->error
/index.php
500
errorHandler->error_callback

Warning [2] Division by zero - Line: 501 - File: index.php PHP 7.4.33 (Linux)
File
Line
Function/inc/class_error.php
153
errorHandler->error
/index.php
501
errorHandler->error_callback


Das ist was in den Zeilen in der index.php steht und dort habe ich ja keine Veränderung vorgenommen. 

Code:
$averageWords =  round($words/$ipPosts, 2);
$averageCharacters =  round($characters/$ipPosts, 2);




Ich glaube nicht das es an meiner Code Änderung in der PHP Datei die ipt.php heißt aber ich frage lieber mal nach. Ich habe auch die PHP Datei komplett gelöscht und neu hochgeladen aber es funktioniert nicht.Hatte mir auch andere Themen mit Division etc gelesen aber keines mit einer Lösung für mein Problem.


Vielen Dank schon einmal für eure Hilfe. 


Liebe Grüße 
Marta
Hallihallo,

die originale index.php hat nicht einmal 500 Zeilen, also wurde da scheinbar eine Menge eigener Code eingebaut!?

Die Variable $ipPosts ist hier das Problem. Sie benötigt einen Wert größer 0.
Wo und wie wird diese Variable mit einem Wert (einer Zahl) bestückt?

Ohne deinen PHP-Code zu lesen, kann man hier kaum weiterhelfen.

Grüße zurück,
[ETS]
Hey,

da ich mal vermute, dass du folgendes Tutorial von aheartforspinach eingebaut hast sieht der Code wie folgt aus (im Original):

Für den Inplaytracker 3.0 von sparksfly:
PHP-Code:
$query $db->simple_select('ipt_scenes''tid');
$inplayscenes $db->num_rows($query);
$ipPosts $words $characters 0;
while (
$row $db->fetch_array($query)) {
    $posts $db->simple_select('posts''message, tid''visible = 1 and tid = '$row['tid']);
    while ($post $db->fetch_array($posts)){
        $ipPosts++;
        // https://www.php.net/manual/en/function.str-word-count.php#107363
        $words += count(preg_split('~[^\p{L}\p{N}\']+~u'$post['message']));
        $characters += strlen($post['message']);
    }
}
$averageWords =  round($words/$ipPosts2);
$averageCharacters =  round($characters/$ipPosts2); 

Für den Inplaytracker 2.0 von sparksfly:
PHP-Code:
$inplay $mybb->settings['inplaytracker_forum'];
$archive $mybb->settings['inplaytracker_archiv'];

$query $db->simple_select(
    'threads t join 'TABLE_PREFIX 'forums f on t.fid = f.fid'
    'tid',
    'find_in_set('.$inplay.', parentlist) or find_in_set('.$archive.', parentlist)'
);
$inplayscenes $db->num_rows($query);
$ipPosts $words $characters 0;
while (
$row $db->fetch_array($query)) {
    $posts $db->simple_select('posts''message, tid''visible = 1 and tid = '$row['tid']);
    while ($post $db->fetch_array($posts)){
        $ipPosts++;
        // https://www.php.net/manual/en/function.str-word-count.php#107363
        $words += count(preg_split('~[^\p{L}\p{N}\']+~u'$post['message']));
        $characters += strlen($post['message']);
    }
}
$averageWords =  round($words/$ipPosts2);
$averageCharacters =  round($characters/$ipPosts2); 

Es ist schlussendlich egal, welche Version vom Inplaytracker du nutzt, da beide auf die Warnung hinweisen würden.
Deine Warnung "Division by zero" sagt im Grunde aus, dass du durch 0 dividierst und dies ist mathematisch nicht möglich.
Die Division wird an zwei Stellen (die du schon richtig rausgelesen hast) angwendet:
$words/$ipPosts
$characters/$ipPosts

$ipPosts ist in dem Falle 0.

Du kannst das ganze umgehen und zwar mit einer if/else.
Und zwar wäre dies eine Möglichkeit:
PHP-Code:
if($ipPosts != 0) {
$averageWords =  round($words/$ipPosts2);
$averageCharacters =  round($characters/$ipPosts2);
} else {
$averageWords $averageCharacters 0;


Wenn man bis zu dem Zeitpunkt noch keinen Inplaypost geschrieben hat wird bei den durchschnittlichen Zeichen und Wörter auch 0 nun angezeigt.

Liebe Grüße
Lara

P.S. Wenn du in Zukunft direkt in dem Thema zu dem dazugehörigen Tutorial dich meldest kann man dir wahrscheinlich besser helfen, weil man den Codeteil kennt.