Wer rettet mich vor Variable overflow

speicher

Erfahrenes Mitglied
Hallo,

ich bin der Verzweiflung nah.....das von mir verwendetem Menu-Skript will meinen Browser testen.

Wenn ich einen Button-klicke wird wie gewünscht eine GET Variable "in" hinzugefügt. Doch leider wird bei jedem weitern Klick diese nicht ersetzt sondern noch eine angehängt. Wo liegt der Fehler? Ich bin dankbar für jeden Hinweis.

Der Aufruf der Menu.php erfolgt durch
PHP:
//Menüroot
$main3 = new menu('<img src="button.php?fg=000000&bg=ffffff&txt='.$proben.'" 
    border="0" >', ''.$proben.'');

//Menüunterpunkt mit Link
$main3->add('<img src="button.php?fg=666666&bg=ffffff&txt=%20_print" 
    border="0">', $_SERVER['PHP_SELF']."?$QUERY_STRING&in=kontakt");

//Menüunterpunkt mit Link
$main3->add('<img src="button.php?fg=666666&bg=ffffff&txt=%20_radio" 
   border="0">', $_SERVER['PHP_SELF']."?$QUERY_STRING&in=news");

Menu.php
PHP:
?php

class menu {

    var $image;
    var $items;
    var $open;
    var $closed;
    var $indent;
    var $name;

    function menu($image,
                  $name,
                  $open = '',
                  $closed = '',
                  $indent = ''
                 )
    {
        $this->items  = array();
        $this->image   = $image;
        $this->name = $name;
        $this->open   = $open;
        $this->closed = $closed;
        $this->indent = $indent;
    }

    function add($image, $href = "", $target = "") {
        $n = count($this->items);

        if (is_object($image)) {
            $this->items[$n] = $image;
        } else {
            $this->items[$n]['image'] = $image;
            $this->items[$n]['href'] = $href;
            $this->items[$n]['target'] = $target;
        }
    }

    function show($nest = 0) {
        $urlimage = strtr ($this->name, ' ', '_');
        $indent = '';
        global $$urlimage;
        global $PHP_SELF;
        global $QUERY_STRING;

        if ($nest) { // > php4
            if(function_exists("str_repeat")){
                $indent = str_repeat($this->indent, $nest);
            } else { // php3
                for($i=0; $i<$nest; $i++){
                    $indent = $indent . $this->indent;
                }
            }
        }

        if (isset($$urlimage)) {
            printf('%s<a href="%s?%s">%s</a><br>',
                   $indent . $this->open,
                   basename ($PHP_SELF),
                   ereg_replace("{$urlimage}=&", '', $QUERY_STRING),
                   $this->image);
            echo "\n";

            while (list(,$item) = each($this->items)) {
                if (is_object($item)) {
                    $item->show($nest);
                } else {
                    printf('%s<a href="%s"%s>%s</a><br>',
                           $indent . $this->indent,
                           $item['href'],
                           (!empty($item['target']) ? ' target="' . $item['target'] . '"' : ''), $item['image']);
                    echo "\n";
                }
            }
        } else {
            printf('%s<a href="%s?%s=&%s">%s</a><br>',
                   $indent . $this->closed,
                   basename ($PHP_SELF),
                   $urlimage, $QUERY_STRING,
                   $this->image);
            echo "\n";
        }
    }
}
?>
 
Warum verstößt du den absichtlich gegen die Boardregeln und holst deine Beiträge immer wieder nach oben?
Die Variable wird mehrfach angehängt, da du $QUERY_STRING mit übergibst.
Noch ein kleiner Tip: Dein Script wird unter aktuellen PHP-Versionen nicht laufen, da du davon ausgehst, daß register_globals eingeschaltet ist.
 
Hallo...warum ist es denn verboten, seinen Beitrag noch einmal nach oben zu holen....anyway. Vielen Dank für die Hinweise.
 
Zurück