Hallo macflie,
das ergibt aber dann keine Fehlermeldungen und hat nichts mit Deklaration zu tun. Aber damit kann ich wenigstens ein wenig anfangen, auch wenn weiterhin eine Menge unklar ist.
Ich NEHME AN, dass du das Script im Rahmen einer Webseite mehrfach aufrufst. Webseiten arbeiten mit dem HTTP-Protokoll. Dieses ist zustandslos. Es kann also keine Übergabe von Variablen von einem Seitenaufruf auf den nächsten geben.
Um auf Webseiten Zustände verwenden zu können, gibt es mehrere Varianten.
1.: Übergabe von Variablen per URL
2.: Übergabe von Variablen per (HTML-) Formular
3.: Sessions, z.B. mittels Cookies
Erläuterungen
zu 1.:
Die Variablen werden einfach an die URL des Scripts angehängt. Zum Beispiel:
http://www.deineseite.de/script.php?var1=wert1&var2=wert2
Dafür müssen sie natürlich als String konvertiert werden und die URL muss für das neue Laden der Seite verwendet werden, z.B. als Link der geklickt wird.
Innerhalb des Scripts werden sie dann per $_GET wieder abgerufen, in dem Beispiel als:
if(isset($\_GET['var1'] && strlen($\_GET['var1']) \> 0)
{
$var1 = $\_GET['var1'];
} else {
$var1 = '';
}
Wichtig dabei ist: Diese Variablen können von jedermann gesehen und auch bearbeitet werden. Verlasse dich also niemals auf den Inhalt dieser Variablen, er kann von Angreifern beliebig manipuliert werden!
zu 2.:
Hierfür wird in die Seite ein HTML-Formular eingebettet, dass per POST die gewünschten Variablen versendet.
Funktioniert im wesentlich genau wie GET. Auch hier kann alles beliebig von Angreifern verändert werden.
zu 3.:
Hierfür wird ganz zu Beginn der Scriptausführung eine Session gestartet (vor ALLEM anderen, was ausgegeben wird!).
Die Variablen werden dann der Session hinzugefügt.
Auch hier kann alles manipuliert werden.
Sessions sind ein wesentlich komplexeres Thema, wenn man es richtig und sicher machen will, deshalb verweise ich hier erstmal auf Google.
Bei allen Varianten ist es elementar wichtig, dass du dich keinesfalls auf die Inhalte der Variablen verlässt. Lade beispielsweise auf gar keinen Fall ein Script, dass über eine Variable benannt ist.
/\* NIE machen! \*/
$scriptname = $\_GET['scriptname'];
readfile($scriptname);
Mit so einem Konstrukt ist es einem Angreifer möglich, so ziemlich alles zu tun, was er will.
Sinnvoller wäre es beispielsweise, ein Array zu definieren, dass Indizes einem Namen zuordnet. Dann könntest du so vorgehen:
if(array\_key\_exists(intval($\_GET['scriptname']), $scripts))
$scriptname = $scripts[intval($\_GET['scriptname'])];
Auch damit kann noch Schindluder getrieben werden, aber es werden schonmal keine externen Scripts mehr geladen, sondern nur noch solche, die du explizit zugelassen hast.
Was mich etwas verwundert, ist, dass du sagst, bei Klassen gebe es keine Probleme. Ich halte es durchaus für möglich, dass du ein Problem mit dem Scope von Variablen hast. Beispiel:
$var1 = 1; //ausserhalb von allem, global
class test
{
public $var1 = 2; // nur innerhalb der Klasse per $this-\>
function foo()
{
$var1 = 3; // nur innerhalb foo()
}
function bar()
{
$var2 = $var1; // $var2 = 0 und Warnung oder Fehlermeldung
}
function bar2()
{
global $var1;
$var3 = $var1; // verwendet die $var1 von ausserhalb der class
}
}
Das sind drei Variablen, die nichts miteinander zu tun haben.
In der Methoda bar() wird eine Variable $var1 verwendet, die an dieser Stelle nicht existiert.
In der Methode bar2() wird schließlich über global die globale Variable $var1 in die Klasse geholt.
Ich hoffe, das hilft dir weiter.
Ansonsten bitte mehr Informationen, vor allem Fehlermeldungen und Beispielcode!
Schönen Sonntag!
frozen