PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem: Top10-Addon VMS1.2



pepe665
05.06.2008, 12:51
habe das top10-addon installiert, anzeige und werte stimmen auch, nur kommen trotzdem 2 fehlermeldungen:
1. vor den top10-bettlern:

Warning: Division by zero in /var/www/user/pepe665.xail.net/content/intern/top10.php on line 95

2. am ende der Tabellen:

Warning: file_put_contents(dynamic_cache/top10_adi.txt) [function.file-put-contents (http://pepe665.xail.net/function.file-put-contents)]: failed to open stream: No such file or directory in /var/www/user/pepe665.xail.net/content/intern/top10.php on line 139

Kann mir jeman bitte helfen, diese fehlermeldungen wegzubekommen?

Xenon
05.06.2008, 16:22
Ganz einfach ist das problem zu lösen

Warning: Division by zero in /var/www/user/pepe665.xail.net/content/intern/top10.php on line 95
Du hast einen user der 0 mal gebbettelt hat und wie es so ist in mathe man kann nix durch 0 teilen :frusty:


Warning: file_put_contents(dynamic_cache/top10_adi.txt) [function.file-put-contents (http://pepe665.xail.net/function.file-put-contents)]: failed to open stream: No such file or directory in /var/www/user/pepe665.xail.net/content/intern/top10.php on line 139
Erstelle einen ordner namnes dynamic_cache und vergeb die rechte 777 und dann sollte es gehn wenn nicht dann drück Strg+F5 .


MFG
adi

pepe665
05.06.2008, 17:26
darauf, einen ordner "dynamic_cache" zu erstellen, bin ich auch schon gekommen, hab ich also gemacht und fehler wird trotzdem angezeigt. auch schreibrechte hat er natürlich......

und die andere sache: das bleibt also stehen, bis die user gebettelt haben...kann ich nix machen?

Xenon
05.06.2008, 17:31
es müssten mind. 10 user min. 1 gebbetelt haben den man kann eine 0 nicht teilen es sei den du entfernst den durchschnitt .

Und welche PHP version nutzt du ? wenn du PHP 4 hast dann müsstest du es noch umbauen . :der:


MFG
adi

pepe665
05.06.2008, 18:04
hab php5

Xenon
05.06.2008, 18:19
Dann sollte es laufen , zur not erstelle mal eine txt datei -> top10_adi.txt und stell die da rein und in den ordner und vergeb die schreibrechte 777 , geb mal deine domain damit ich es mal testen kann :thumb:

jpwfour
05.06.2008, 18:32
Ganz einfach ist das problem zu lösen

Du hast einen user der 0 mal gebbettelt hat und wie es so ist in mathe man kann nix durch 0 teilen :frusty:
...

hm, sollte nicht der progger des addons darauf achten, und auch diesen fall (der ja nu nich so unwahrscheinlich ist, gerade bei neuen seiten) korrekt in sein addon einbringen?

sprich, vor der division eine abfrage machen, ob der divisor auch ungleich 0 ist :knueppel:

Xenon
05.06.2008, 18:44
hm, sollte nicht der progger des addons darauf achten, und auch diesen fall (der ja nu nich so unwahrscheinlich ist, gerade bei neuen seiten) korrekt in sein addon einbringen?

sprich, vor der division eine abfrage machen, ob der divisor auch ungleich 0 ist :knueppel:

Du hast leicht reden , jpwfour meld dich in icq bei mir möchte kurz über das addon mit dir reden :der:

pepe665
05.06.2008, 19:07
auch die textdatei habe ich natürlich erstellt und entsprechende schreibrechte vergeben.

die domain: http://pepe665.xail.net

Xenon
05.06.2008, 19:12
auch die textdatei habe ich natürlich erstellt und entsprechende schreibrechte vergeben.

die domain: http://pepe665.xail.net
laut domain ist da nix ?
http://pepe665.xail.net/dynamic_cache/top10_adi.txt :suspicious:

pepe665
05.06.2008, 19:22
ich hatte den ordner erst als unterordner im content, hab ihn jetzt ins hauptverzeichnis verschoben....geht trotzdem nicht

Xenon
05.06.2008, 19:24
weil es so ne datei bei dir garnichtt gibt
Forbidden

You don't have permission to access /dynamic_cache/top10_adi.txt on this server.




vergeb den mal wenn es vorhanden ist die redchte 777

pepe665
05.06.2008, 19:28
der ordner und die txt.-datei im ordner sind da, entsprechende schreibrechte sind gesetzt.

Xenon
05.06.2008, 19:31
schreib mir per pn dein icq nr dann helfe ich dir da weil hier wird zu viel diskutiert :thumb:

pepe665
05.06.2008, 19:38
mom, hab kein icq...installiere mal schnell

pepe665
05.06.2008, 19:58
adi, hast PN

pepe665
05.06.2008, 21:04
danke für die hilfe, nun kann es sich sehen lassen:thumb:

ruddi1
15.06.2008, 14:58
Hallo adi,
hoffe es ist erlaubt sich mit hier dranzuhängen bekomme beim
klick auf die Top10

diese Meldung

Warning: Division by zero in /home/web146/html/content/intern/top10.php on line 38

hast Du :der:eine Ahnung wie ich das weg bekomme?
Für Deine Hilfe schon mal im vorraus Danke.

MfG
ruddi1

Xenon
15.06.2008, 15:31
Also der fehler kommt zustanden weil er durch 0 etwas teilen möchte alos den durchschnitt und es ist auch rein mathematisch nicht möglich 0:1 oder 2:0 ... zuteilen aber ich und jpwfour arbeiten an diesen fehler und bald wird es behoben sein , eig ist es kein fehler nur nicht einsehbarer 0 teiler :thumb:

jpwfour
15.06.2008, 15:37
dieser fehler verschwindet eh von alleine, sobald man mehr als 10 user hat, die in der liste mit werten über 0 auftauchen, was ja normalerweise innerhalb kürzester zeit der fall ist.

ruddi1
15.06.2008, 15:43
Joo,Danke Euch dann ist ja gut.

MfG
ruddi1

dieser fehler verschwindet eh von alleine, sobald man mehr als 10 user hat, die in der liste mit werten über 0 auftauchen, was ja normalerweise innerhalb kürzester zeit der fall ist.

Tevion
14.12.2008, 16:27
Also das einzige was ich geschafft habe zu "fixen" war das teilen durch 0 ^^.
da hab ich einfach die spalte mit dem dazugehörigen php tag gelöscht

jedoch bleiben mir immernoch 2 fehler übrig.

<code>Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /www/htdocs/w0090b1f/vms/content/intern/top10.php on line 11</code>

und
<code>Fatal error: Call to undefined function: file_put_contents() in /www/htdocs/w0090b1f/vms/content/intern/top10.php on line 134</code>

ich hab den dynamic orner im hauptverzeichnis. keine Textdatei, weil sonst NICHTS angezeigt wird.

zu erreichen ist das unter www.klick4ad.de (auf der rechten seite 2tes menü)

bitt eum hilfe

Xenon
14.12.2008, 16:42
Ist das das von mir ? wenn ja schick mir deins per pn dann schaue ich mir es mal an bwz poste es hier öffentlich den ganzen code damit wir den sehen können und was du da verändert hast :thumb:

Tevion
14.12.2008, 16:50
<?
/************************************************** ************************************************** **********************************
*****Diese Addon wurde vom User adi , klammid : 248998 zusammen gebaut und alle rechte unterliegen ihm .*******************************
*****Sollten sie dieses Copyright ohne Erlaubnis entfernen , erlischt ihre Lizenz und zieht rechtliche Schritte mit sich .*************
*****Wenn sie das Copyright entfernen wollen kontacktieren sie mich im forum per pn .************************************************* *
*****Spenden sind gern gesehn , spenden gerne an die klammid : 284998 ************************************************** ***************
************************************************** ************************************************** ***********************************/
userstatus();
?>
<?
//Cache damit es weniger db abfragen macht und den traffic schont
if (!file_exists('dynamic_cache/top10_adi.txt') || @filemtime('dynamic_cache/top10_adi.txt') < time()-7200) //Hier sind es 7200 sec Reload = 2 Std
{
ob_start(); ?>
<?head("Top 10 - Klicker");?>
<table width="100%" cellpadding="1" cellspacing="1" border="0" bgcolor="#187BDF">
<tr bgcolor="#1839DF">
<td width="5%" align="center"><b>Rang</b></td>
<td width="20%" align="center"><b>User</b></td>
<td width="20%" align="center"><b>Klicks</b></td>
<td width="20%" align="center"><b>Erklickt</b></td>
</tr>
<?
$rang = 1;
$platz1 = db_query("SELECT k.uid,k.klicks,k.kv,u.nickname FROM
vms_kontodaten AS k
LEFT JOIN vms_userdaten AS u ON u.uid=k.uid
ORDER BY k.klicks DESC LIMIT 10");
while ($nickk = mysql_fetch_array($platz1)){
$i++;
echo '
<tr class="tr_row'.($i % 2 == 0 ? '0' : '1').'">
<td align="center">'. $rang++ .'</td>
<td align="center"><a href="?content=/nickpage&nick='.$nickk['nickname'].'">'.$nickk["nickname"].'</a></td>
<td align="center">'.number_format($nickk[klicks],0,",",".").'</td>
<td width="20%" align="center">'.number_format($nickk['kv'],0,",",".").' </td>
</tr>
';
}
?>
</table>
<?foot();?>
<br>
<?head("Top 10 - Guthaben");?>
<table width="100%" cellpadding="1" cellspacing="1" border="0" bgcolor="#187BDF">
<tr bgcolor="#1839DF">
<td width="5%" align="center"><b>Rang</b></td>
<td width="20%" align="center"><b>User</b></td>
<td width="20%" align="center"><b>Guthaben</b></td>
</tr>
<?
$rang = 1;
$platz2 = db_query("SELECT k.uid,k.kontostand,u.nickname FROM
vms_kontodaten AS k
LEFT JOIN vms_userdaten AS u ON u.uid=k.uid
ORDER BY k.kontostand DESC LIMIT 10");
while ($nickg = mysql_fetch_array($platz2)){
$i++;
echo '
<tr class="tr_row'.($i % 2 == 0 ? '0' : '1').'">
<td align="center">'. $rang++ .'</td>
<td align="center"><a href="?content=/nickpage&nick='.$nickg['nickname'].'">'.$nickg["nickname"].'</a></td>
<td align="center">'.number_format($nickg['kontostand'],2,",",".").'</td>
</tr>
';
}
?></table>
<?foot();?>
<br>
<?head("Top 10 - Bettler");?>
<table width="100%" cellpadding="1" cellspacing="1" border="0" bgcolor="#187BDF">
<tr bgcolor="#1839DF">
<td width="5%" align="center"><b>Rang</b></td>
<td width="20%" align="center"><b>User</b></td>
<td width="20%" align="center"><b>Gebettelt</b></td>
<td width="20%" align="center"><b>Erbettelt</b></td>
</tr>
<?
$rang = 1;
$platz3 = db_query("SELECT k.uid,k.angebettelt,k.bv,u.nickname FROM
vms_kontodaten AS k
LEFT JOIN vms_userdaten AS u ON u.uid=k.uid
ORDER BY k.angebettelt DESC LIMIT 10");
while ($nickb = mysql_fetch_array($platz3)){
$i++;
echo '
<tr class="tr_row'.($i % 2 == 0 ? '0' : '1').'">
<td align="center">'. $rang++ .'</td>
<td align="center"><a href="?content=/nickpage&nick='.$nickb['nickname'].'">'.$nickb["nickname"].'</a></td>
<td align="center">'.number_format($nickb[angebettelt],0,",",".").'</td>

<td width="20%" align="center">'.number_format($nickb['bv'],0,",",".").' </td>
</tr>
';
}
?>
</table>
<?foot();?>
<br>
<?head("Top 10 - Refjäger");?>
<table width="100%" cellpadding="1" cellspacing="1" border="0" bgcolor="#187BDF">
<tr bgcolor="#1839DF">
<td width="5%" align="center"><b>Rang</b></td>
<td width="20%" align="center"><b>User</b></td>
<td width="20%" align="center"><b>Refs</b></td>
</tr>
<?
$rang = 1;
$platz4 = db_query('SELECT COUNT(w.uid) as anz,w.werber,u.nickname FROM '.$db_prefix.'_werberdaten AS w LEFT JOIN vms_userdaten AS u ON u.uid=w.werber WHERE w.werber!=0 GROUP BY w.werber ORDER BY COUNT(w.uid) DESC LIMIT 10');
while($nickw = mysql_fetch_array($platz4)){
$i++;
$row = ($i % 2 == 0) ? 0 : 1;
echo '
<tr class="tr_row'.$row.'">
<td align="center">'. $rang++ .'</td>
<td align="center"><a href="?content=/nickpage&nick='.$nickw['nickname'].'">'.$nickw["nickname"].'</a></td>
<td align="center">'.$nickw['anz'].'</td>
</tr>
';
}
echo '
</table>
';
foot();?>
<?head("Copyright");?>
<!-- Diese Addon wurde vom User adi , klammid : 248998 zusammen gebaut und alle rechte unterliegen ihm .
Sollten sie dieses Copyright ohne Erlaubnis entfernen , erlischt ihre Lizenz und zieht rechtliche Schritte mit sich .
Wenn sie das Copyright entfernen wollen kontacktieren sie mich im forum per pn .
-->
<div align="center"><font size="1">Top10 Addon &copy; by <a href="http://www.vms-tutorial.de" target="_blank">adi</a></font></div>
<?foot();?>
<?
//Auslesen des traffics der vor xx sec eingelesen wurde
file_put_contents('dynamic_cache/top10_adi.txt', ob_get_flush() );

}else{
echo file_get_contents('dynamic_cache/top10_adi.txt');
}
?>

Xenon
14.12.2008, 16:56
<code>Fatal error: Call to undefined function: file_put_contents() in /www/htdocs/w0090b1f/vms/content/intern/top10.php on line 134</code>

Undefiniert ?
Welche PHP Version nutzt du ?

Sebmaster
14.12.2008, 17:13
Undefiniert ?
Welche PHP Version nutzt du ?

Version 4 wahrscheinlich :biggrin1:

Folgende Funktion in die functions.lib.php kopieren:



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

Tevion
14.12.2008, 17:15
sauber sebmaster jetzt hab ich nur noch ein problem ^^

Top 10 - Refjäger

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /www/htdocs/w0090b1f/vms/content/intern/top10.php on line 110

Sebmaster
14.12.2008, 17:23
Dann mach mal:


$platz4 = db_query('SELECT COUNT(w.uid) as anz,w.werber,u.nickname FROM '.$db_prefix.'_werberdaten AS w LEFT JOIN vms_userdaten AS u ON u.uid=w.werber WHERE w.werber!=0 GROUP BY w.werber ORDER BY COUNT(w.uid) DESC LIMIT 10');

ersetzen mit:


$platz4 = db_query('SELECT COUNT(w.uid) as anz,w.werber,u.nickname FROM '.$db_prefix.'_werberdaten AS w LEFT JOIN vms_userdaten AS u ON u.uid=w.werber WHERE w.werber!=0 GROUP BY w.werber ORDER BY COUNT(w.uid) DESC LIMIT 10') or die(mysql_error());

Xenon
14.12.2008, 17:25
Version 4 wahrscheinlich :biggrin1:

Deswegen habe ich gefragt :biggrin1:

Aber der Fehler mit den Refjäger ist mir noch nicht vorgekommen aber ich glaube der fehler liegt daran das sich keine user angemeldet haben bwz es noch keinen werber gibt

Sebmaster
14.12.2008, 17:26
Aber der Fehler mit den Refjäger ist mir noch nicht vorgekommen aber ich glaube der fehler liegt daran das sich keine user angemeldet haben bwz es noch keinen werber gibt

Möglich, deswegen ja der Mysql_error() :wink:

webkle
20.12.2008, 00:56
sauber sebmaster jetzt hab ich nur noch ein problem ^^

Top 10 - Refjäger

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /www/htdocs/w0090b1f/vms/content/intern/top10.php on line 110

Diese Meldung hatte ich auch !


Dann mach mal:


$platz4 = db_query('SELECT COUNT(w.uid) as anz,w.werber,u.nickname FROM '.$db_prefix.'_werberdaten AS w LEFT JOIN vms_userdaten AS u ON u.uid=w.werber WHERE w.werber!=0 GROUP BY w.werber ORDER BY COUNT(w.uid) DESC LIMIT 10');

ersetzen mit:


$platz4 = db_query('SELECT COUNT(w.uid) as anz,w.werber,u.nickname FROM '.$db_prefix.'_werberdaten AS w LEFT JOIN vms_userdaten AS u ON u.uid=w.werber WHERE w.werber!=0 GROUP BY w.werber ORDER BY COUNT(w.uid) DESC LIMIT 10') or die(mysql_error());

und habe die php mit obiger Zeile upgedatet, doch jetzt kommt MELDUNG:

Top 10 - Refjäger
Invalid use of group function

kann mir jemand sagen was falsch ist ? - SYSTEM mysql Vers. 4

Hardy
20.12.2008, 10:36
Diese Meldung hatte ich auch !



und habe die php mit obiger Zeile upgedatet, doch jetzt kommt MELDUNG:

Top 10 - Refjäger
Invalid use of group function

kann mir jemand sagen was falsch ist ? - SYSTEM mysql Vers. 4
GROUP BY und ORDER BY geht meines erachtens nicht zusammen...
schmeiß mal GROUP BY w.werber raus

jpwfour
20.12.2008, 10:43
Doch, sollte schon zusammen funktionieren, nur ist MySQL 4 da etwas "zickig", was solche Bezeichner angeht:
w.werber
evtl. mal das "w." weglassen, kann zwar, wenn's dann funktionieren sollte, zu einem falschen Ergebnis führen, aber manchmal hilft das, könnte dann halt sein, dass man's dann im ORDER BY statement auch weglassen muss.

GROUP BY kann man schlecht rausnehmen, da dann ja der Grundgedanke, also alle Refs EINER id zu zählen, verloren geht, so würde das dann immer nur 1,1,1,1,1,... ausgeben, und man müsste via php die Zahlen je werber id aufaddieren.
ORDER BY ist insofern wichtig, da die Liste ja die ersten 10 absteigend anzeigen soll, anhand der Anzahl refs.

Tevion
21.12.2008, 19:02
Sorry das ich mich so lange nichgt gemeldet habe, lag seit MI im Krankenhaus.
hatte ne Harte OP aber jetzt geht es wieder.

So ich habe den Code wie Oben gepostet geändert. jetzt zeigt der "Invalid use of group function" an ich weiß zwar nicht ob das so richtig ist aber wahrscheinlich auf die nichtvorhandenen REFS und Werber zurück zu führen ....

jpwfour
21.12.2008, 22:06
wie lautet der code/mysql befehl noch mal genau? also bei dem die fehler meldung "invalid use of group function" kommt

Tevion
22.12.2008, 10:04
<?
$rang = 1;
$platz4 = db_query('SELECT COUNT(w.uid) as anz,w.werber,u.nickname FROM '.$db_prefix.'_werberdaten AS w LEFT JOIN vms_userdaten AS u ON u.uid=w.werber WHERE w.werber!=0 GROUP BY w.werber ORDER BY COUNT(w.uid) DESC LIMIT 10') or die(mysql_error());
while($nickw = mysql_fetch_array($platz4)){
$i++;
$row = ($i % 2 == 0) ? 0 : 1;
echo '
<tr class="tr_row'.$row.'">
<td align="center">'. $rang++ .'</td>
<td align="center"><a href="?content=/nickpage&nick='.$nickw['nickname'].'">'.$nickw["nickname"].'</a></td>
<td align="center">'.$nickw['anz'].'</td>
</tr>
';
}
echo '
</table>
';
foot();?>
<?head("Copyright");?>
<!-- Diese Addon wurde vom User adi , klammid : 248998 zusammen gebaut und alle rechte unterliegen ihm .
Sollten sie dieses Copyright ohne Erlaubnis entfernen , erlischt ihre Lizenz und zieht rechtliche Schritte mit sich .
Wenn sie das Copyright entfernen wollen kontacktieren sie mich im forum per pn .
-->
<div align="center"><font size="1">Top10 Addon &copy; by <a href="http://www.vms-tutorial.de" target="_blank">adi</a></font></div>
<?foot();?>
<?
//Auslesen des traffics der vor xx sec eingelesen wurde
file_put_contents('dynamic_cache/top10_adi.txt', ob_get_flush() );

}else{
echo file_get_contents('dynamic_cache/top10_adi.txt');
}
?>

~Zusammengeführt, by Sebmaster~


<?
$rang = 1;
$platz4 = db_query('SELECT COUNT(w.uid) as anz,w.werber,u.nickname FROM '.$db_prefix.'_werberdaten AS w LEFT JOIN vms_userdaten AS u ON u.uid=w.werber WHERE w.werber!=0 GROUP BY w.werber ORDER BY COUNT(w.uid) DESC LIMIT 10') or die(mysql_error());
while($nickw = mysql_fetch_array($platz4)){
$i++;
$row = ($i % 2 == 0) ? 0 : 1;
echo '
<tr class="tr_row'.$row.'">
<td align="center">'. $rang++ .'</td>
<td align="center"><a href="?content=/nickpage&nick='.$nickw['nickname'].'">'.$nickw["nickname"].'</a></td>
<td align="center">'.$nickw['anz'].'</td>
</tr>
';
}
echo '
</table>
';
foot();?>

jpwfour
22.12.2008, 16:13
Dieser MySQL Befehl:

SELECT COUNT( w.uid ) AS anz, w.werber, u.nickname
FROM vms_werberdaten AS w
LEFT JOIN vms_userdaten AS u ON u.uid = w.werber
WHERE w.werber !=0
GROUP BY w.werber
ORDER BY COUNT( w.uid ) DESC
LIMIT 10
Wird auf MySQL v5 korrekt ausgeführt ohne Fehlermeldung, daher wird es wohl an eurer veralteten MySQL Version liegen.

Da ich keine alten Versionen benutze, kann ich das jetzt nicht testen, aber vielleicht gehts so?

$platz4 = db_query('SELECT COUNT(w.uid) as anz,w.werber,u.nickname FROM '.$db_prefix.'_werberdaten AS w LEFT JOIN vms_userdaten AS u ON u.uid=w.werber WHERE w.werber!=0 GROUP BY werber ORDER BY COUNT(w.uid) DESC LIMIT 10') or die(mysql_error()); MySQL 4 hat ja teilweise Probleme mit Tabellen Referenzen Alias(sen :der:) :wink:

Tevion
22.12.2008, 16:33
hmm leider immernoch der selbe fehler

OK wie kann ich meine PHP version auf 5 uppen ???

SilentKiller
25.11.2009, 03:25
Version 4 wahrscheinlich :biggrin1:

Folgende Funktion in die functions.lib.php kopieren:



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.... :thumb::thumb::thumb:

Flawless Victory :cool: Danke für diesen Fehlerteufelvernichter :biggrin1:

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 :frusty::frusty::frusty:

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...

jpwfour
25.11.2009, 13:06
Dazu müsstest du entweder dein PHP selber kompilieren, oder den PHP Entwickerln sagen, dass man den / Operator überschreiben darf :wink:

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

vorher:

$wert = $datum1 / $datum2;

nachher:

$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!

SilentKiller
25.11.2009, 13:56
Erstmal Danke :thumb:



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 :suspicious:

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:


<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 :suspicious:.

jpwfour
25.11.2009, 15:07
<td width="20%" align="center">'.number_format(($nickb['bv']/$nickb['angebettelt']), 2, ',', '.').' lose</td>Wichtig also nur:


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

($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 :wink:

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

inline:

(($nickb['angebettelt']!=0)?($nickb['bv']/$nickb['angebettelt']):0)extern:

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


number_format(divide($nickb['bv'],$nickb['angebettelt']), 2, ',', '.')dazu dann:

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.

SilentKiller
26.11.2009, 01:43
:cool: Ey krass es ist nun Fehlerlos!:cool:

:whoo: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... :suspicious: 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 :thumb:

Xenon
26.11.2009, 14:14
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.