Variable zählt nicht richtig

Gsus

schwankend^^
ID: 215354
L
22 Mai 2006
1.553
68
Hallo,
habe in meinem Code den folgenden Schnipsel:
PHP:
 $id = (int)$_GET['id'];
 if($id != 0) {
     $result = $mysql->query("UPDATE `".$mysql_data['prefix']."_refs` SET `klicks` = `klicks`+1 WHERE `id` = %u", $id);     
 }
 $id = 0;
die funktion query der klasse mysql ist die folgende:
PHP:
    public function query($query) {
        $this->_querycount++;
        $args = func_get_args();
        $vargs = array();
        for($i=1; $i<func_num_args(); $i++) {
            if(get_magic_quotes_gpc()) $args[$i] = stripslashes($args[$i]);
            $vargs[] = mysql_real_escape_string($args[$i]);
        }
        $query = vsprintf($query, $vargs);
        echo $query;
        $result = mysql_query($query);
        return $result;
    }

Problem ist nun dieses:
Wenn ich die Datei mit dem ?id=7aufrufe, wird `klicks` von id=7 um 2 hochgezählt und nicht um 1... das was die funktion als query ausgibt ist aber nur +1 und auch wenn ich die kopiere und in phpmyadmin ausführe wird nur um 1 hochgezählt.

wo kann der fehler liegen, dass es immer um 2 hochgezählt wird? um auszuschließen, dass es woanders im code passiert habe ich $id=0 eingefügt um das dann auf 0 zu setzen..

mfg
Gsus
 
um auszuschließen, dass es woanders im code passiert habe ich $id=0 eingefügt um das dann auf 0 zu setzen..

Also wenn du "woanders" den Code genauso hast wie da, wird $id aber wieder neu gesetzt, da ist vollkommen egal, dass dus jetzt auf 0 setzt.

Wenn, dann musst du schon $_GET['id'] auf 0 setzen.
 
Also wenn du "woanders" den Code genauso hast wie da, wird $id aber wieder neu gesetzt, da ist vollkommen egal, dass dus jetzt auf 0 setzt.

Wenn, dann musst du schon $_GET['id'] auf 0 setzen.
ja ist schon klar.. aber dann würde auch in der ausgabe die query 2mal stehen, da die query-funktion alle querys ausgibt.. das tut sie aber nicht :( und ich habe per suchfunktion des editor alle mysql funktionen im script gesucht und da sind nurnoch ein insert und ein select die das ja auch nicht nochmal hochzählen können.. also liegt der fehler irgendwo anders :(
 
ich weise mal wieder darauf hin:

https://www.united-domains.de/portfolio/help/url-hiding.html?type=urlhiding

d.h. du rufst du Seite bei united-domains auf, der Server von united-domains ruft deine Seite auf und leitet sie an dich weiter. Das Problem dabei, die Server (mehrzahl da es immer paar verschiedene Ips sind) rufen die Seite meistens 2-3x auf. Dadurch entstehen solche "Doppelhochzählungen" obwohl als Ausgabe nur +1 ausgegeben wird. Hab da mal Stunden damit verbracht den Fehler zu finden ;)

Vielleicht ist es bei dir ein ähnlicher Fall? Ruf die Seite doch mal über die direkte Domain bzw. IP falls möglich auf ob da das Problem verschwindet falls du auch so eine Weiterleitung drinnen hast.

mfg

chris
 
@chrisi01:
wie mach ich das und wenn es daran liegt, was tue ich dagegen?

@topic:
habe nun mal alles möglich auskommentiert und bin dazu gekommen, dass es an einem admangement-sytsem liegt... und zwar an genau dieser zeile:
PHP:
<a href="ad/click.php?id=<?=$banner['id'];?>"><img src="<?=$banner['bannerurl'];?>" border="0"></a>
ist diese zeile auskommentiert, tritt der fehler nicht mehr auf... allerdings tritt der fehler auch dann nur auf, wenn
PHP:
 $result = $mysql->query("SELECT `global_ads`.`id`, `global_ads`.`bannerurl` FROM `global_ads` LEFT JOIN `global_ads_reload` ON (`global_ads`.`id` = `global_ads_reload`.`id` AND `global_ads_reload`.`ip` = INET_ATON('%s')) WHERE (`global_ads`.`views_gebucht` > `global_ads`.`views_abgebaut` OR `global_ads`.`klicks_gebucht` > `global_ads`.`klicks_abgebaut`) AND (`global_ads_reload`.`id` IS NULL OR (DATE_ADD(`global_ads_reload`.`zeit`, INTERVAL `global_ads`.`reload` SECOND))<=NOW()) ORDER BY RAND() LIMIT 1", $_SERVER['REMOTE_ADDR']);
 $banner = mysql_fetch_assoc($result);
kein ergebnis liefert.. also nur dann, wenn kein banner in der datenbank steht -.- sobald ein banner drinsteht und der banner angezeigt werden kann, ist das problem behoben.. warum??

mfg
Gsus

edit: habe eine if-abfrage eingefügt, die die zeile nur anzeigt, wenn ein banner vorhanden ist. nun geht es.. komisch...
 
Zuletzt bearbeitet: