Ergebnis 1 bis 10 von 44

Thema: problem: Top10-Addon VMS1.2

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Avatar von SilentKiller
    Registriert seit
    10.07.2009
    Beiträge
    38
    Zitat Zitat von Sebmaster Beitrag anzeigen
    Version 4 wahrscheinlich

    Folgende Funktion in die functions.lib.php kopieren:

    PHP-Code:
    if (!function_exists('file_put_contents')) {
        function 
    file_put_contents($filename$data) {
            
    $f = @fopen($filename'w');
            if (!
    $f) {
                return 
    false;
            } else {
                
    $bytes fwrite($f$data);
                
    fclose($f);
                return 
    $bytes;
            }
        }

    Dann sollte es funktioieren.

    Mfg
    Sebmaster


    Ich wusste ja schon vorher das ich ein Übersetzungsproblem habe da ich php 4.5 fahre... Wusste auch genau das es nicht schwer zu lösen ist, aber habe nach 3 stunden php forenwälzen nur eine semi elegante version gehabt, die den fehler nur an dieser stelle per if/else behebt...

    Wenn das mal nicht elegant von Dir gelöst ist weis ich auch nicht... genau 2 Sekunden arbeit und nun frisst mein script alle file_put_content befehle obwohl es php4.5 ist....

    Flawless Victory Danke für diesen Fehlerteufelvernichter

    Jetzt brauch ich nurnoch was elegantes um die division durch null zu vermeiden, ich meine, kann ja nicht die lösung sein auf die ersten 10 Betteluser zu warten bevor das weggeht in der top 10. Die Lösung ist auch relativ simpel ich kriegs nur nocht gebacken

    Es müsste ja einfach erst dann teilen, wenn der Wert nicht null ist-

    Also sowas in der Art:

    if($bettelaufrufe == 0){ $Durchschnitt=0; }
    else { $Durchschnitt=$bettelaufrufe / $bettelverdienst; }

    Natürlich nur vom Denkansatz her... ich bin bissel plöd und kriege das nicht
    auf diese Stelle so angewendet....
    Wär natürlich noch geiler wenn man das nach Sebmasters Art in der funktions lib ändern könnte, denn dieses addon ist nicht das einzigste das unsauber auf dieser division geproggt ist, kommt oft genug irgendwo vor, wo halt die meisten Zähler am Anfang mit 0 anfangen, gibt den Fehler irre oft bei vms...

    Er müsste ja einfach nur generell bei Wert 0 eine Null als Ergebnis einsetzen, und erst wenn der Wert nicht 0 ist müsste er die division
    ausführen...

  2. #2
    Erfahrener Benutzer Avatar von jpwfour
    Registriert seit
    06.02.2008
    Beiträge
    3.717
    Dazu müsstest du entweder dein PHP selber kompilieren, oder den PHP Entwickerln sagen, dass man den / Operator überschreiben darf

    Da beides wohl eher nicht in Frage kommt, bleibt an sich nur die Behandlung "an Ort und Stelle":

    vorher:
    PHP-Code:
    $wert $datum1 $datum2
    nachher:
    PHP-Code:
    $wert = ($datum2!=0) ? ($datum1 $datum2) : 0
    Statt 0 kann manchmal auch 100 (Prozent bspw.) sinnvoll sein.
    Da das kein Kompiler und Interpterer nur schwer selber entscheiden koennen, bleibt an sich nur das manuelle Einabuen.

    Ist an sich nur eine verkuerzte Schreibweise für if else

    Mit einem guten Editor/IDE lässt sich sowas aber schnell in allen Dateien ändern.

    Dabei muss aber auch berücksichtigt werden, dass an manchen Stellen, sofern durch 0 geteilt wird, tatsächlich ein Fehler auftreten muss, den man nicht "umgehen" sollte!
    Kill one man, and you are a murderer.
    Kill millions of men, and you are a conqueror.
    Kill them all, and you are a god.
    - Jean Rostand, Thoughts of a Biologist (1939)

  3. #3
    Benutzer Avatar von SilentKiller
    Registriert seit
    10.07.2009
    Beiträge
    38
    Erstmal Danke

    Zitat Zitat von jpwfour Beitrag anzeigen
    Dabei muss aber auch berücksichtigt werden, dass an manchen Stellen, sofern durch 0 geteilt wird, tatsächlich ein Fehler auftreten muss, den man nicht "umgehen" sollte!
    Ja genau aus diesem Grund, und auch oben genanntem ist sicherlich die Lösung an Ort und Stelle sinnvoller. Bin ja auch nicht faul, und würd gerne
    selber überall einzeln die Sachen "säubern".

    Tja, faul zwar nicht aber halt bissel schwer von Begriff

    An einem konkreten Beispiel würd ichs bestimmt besser verstehen, und auch auf andere Situationen übertragen können. In der php von der top10 an besagter Stelle verwirrt mich der Umgebungscode etwas und bin mir unsicher wo genau ich das nun wie einpflanzen muss-

    Also besagte Divisionsanfrage befindet sich in dieser Zeile, so schaut
    die exakt bei mir aus:

    PHP-Code:
    <td width="20%" align="center">'.number_format(($nickb['bv']/$nickb['angebettelt']), 2, ',', '.').' lose</td
    So, falls Du nun so nett sein könntest mir das exakt wie von Dir beschrieben umzuschreiben, bin ich nicht nur äußerst dankbar, sondern auch lernfähig und werde glaube das nächste mal das divisionsproblem selber lösen können. Ist halt nur so, das mich die variablen und die Zeichensetzung in der Zeile irgenwie wirsch machen .

  4. #4
    Erfahrener Benutzer Avatar von jpwfour
    Registriert seit
    06.02.2008
    Beiträge
    3.717
    HTML-Code:
    <td width="20%" align="center">'.number_format(($nickb['bv']/$nickb['angebettelt']), 2, ',', '.').' lose</td>
    Wichtig also nur:

    PHP-Code:
    number_format(($nickb['bv']/$nickb['angebettelt']), 2',''.'
    Dabei tritt innerhalb der Klammer:
    PHP-Code:
    ($nickb['bv']/$nickb['angebettelt']) 
    der Fehler auf.

    Kann man entweder "inline" lösen, was unschön aussieht, oder da eine Variable einsetzen, die man vorher berechnen lässt.

    Oder

    Eine Funktion einsetzen, die man in der functions.lib.php definiert.

    inline:
    PHP-Code:
    (($nickb['angebettelt']!=0)?($nickb['bv']/$nickb['angebettelt']):0
    extern:
    PHP-Code:
    <?php
    $wert 
    = ($nickb['angebettelt']!=0)?($nickb['bv']/$nickb['angebettelt']):0;
    ?>
    <td width="20%" align="center">'.number_format($wert, 2, ',', '.').' lose</td>
    function:

    PHP-Code:
    number_format(divide($nickb['bv'],$nickb['angebettelt']), 2',''.'
    dazu dann:
    PHP-Code:
    function divide($dividend,$divisor,$default=0){

      return (
    $divisor!=0)?($dividend/$divisor):$default;

    Dabei könnte man der Funktion als drittes Argument dann auch bspw. 100 oder 1 übergeben, standardmäßig wird 0 verwendet.
    Kill one man, and you are a murderer.
    Kill millions of men, and you are a conqueror.
    Kill them all, and you are a god.
    - Jean Rostand, Thoughts of a Biologist (1939)

  5. #5
    Benutzer Avatar von SilentKiller
    Registriert seit
    10.07.2009
    Beiträge
    38

    tausend Dank!

    Ey krass es ist nun Fehlerlos!

    Super erklärt!

    Ich hab die inline Version probiert, sie funzt, genause das externe-
    Das mit der Functions lib hab ich nicht gemacht weils halt bissel umständlicher war. Hab mich letzlich für die inline Version entschieden, da die optisch schlank rüberkommt.

    Erst hab ich ja die Welt nich ganz verstanden als sich absolut NIX getan hat... zufällig hab ich dann ne Teile eingeschoben und mich gewundert das der Fehler nichtmal ebenso ne Zeile weiterrutscht... Aber klar, wie soll denn auch, der dynamic cache holt sich ja den ganzen aufbau und ebenso die fehler... Hab dann die txt im cache ordner gelöscht und siehe da, beim nächsten Mal waren alle Fehler weg.

    Da Du das so genau und mit den drei Varianten erklärt hast, war es mir sogar möglich das zu adaptieren, und habe wo ich mir sicher war mit inline, und bei komplexerem Aufbau mit der externen Variante gearbeitet.
    Und insgesamt schon 7 divisionsproblemchen gelöst.

    Gerade die Sache mit der Durchschnittsberechnung für irgendwas kommt doch oft vor... und ja meistens erledigen sich die Sachen mit der Zeit, am Beispiel der Top10 ists ja so das wenn 10 leute gebettelt haben, keiner auf dem Portal mehr den Fehler kriegen kann, aber es gibt auch Beispiele in denen der Durschnitt von irgendwas Userbezogen für seine Anzeige errechnet wird... und wenn der dann nen Fehler hat, nur weil er z.b. noch nie einen gerefft hat ist ja echt mies. Gibts ja auch genug User von.

    Lange Rede(wie immer), kurzer Sinn:

    Perfekte Hilfestellung, sollte sich jeder als Tutorial für division durch null abspeichern, hab ich jedenfalls gemacht... obwohl mitlerweile kann ichs schon auswendig hehe

  6. #6
    Erfahrener Benutzer
    Registriert seit
    20.06.2007
    Beiträge
    1.905
    Zitat Zitat von SilentKiller Beitrag anzeigen
    Aber klar, wie soll denn auch, der dynamic cache holt sich ja den ganzen aufbau und ebenso die fehler... Hab dann die txt im cache ordner gelöscht und siehe da, beim nächsten Mal waren alle Fehler weg.
    Der fehler kommt aus einer Gecachten Datei die wird alle xx Sec. gecacht kannst du auch einstellen, durch das löschen wurde sie nicht gefunden und musste neu gecacht somit neu erstellt werden.

Ähnliche Themen

  1. Top10-addon
    Von shakirafan im Forum Support zu Addons & Erweiterungen
    Antworten: 3
    Letzter Beitrag: 20.01.2011, 16:15
  2. Top10 Addon - Nickname statt ID
    Von Maybach im Forum Support zum VMSone
    Antworten: 15
    Letzter Beitrag: 31.08.2008, 14:07
  3. Antworten: 1
    Letzter Beitrag: 11.04.2008, 18:38
  4. Verschenke Addon vms1 und vms1.2
    Von rudicarell81 im Forum Scripte
    Antworten: 3
    Letzter Beitrag: 25.02.2008, 12:57
  5. Antworten: 4
    Letzter Beitrag: 30.12.2007, 16:34

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •