Variable in PHP

VoinG

Angesehenes Mitglied
Hallo!
Eine ganz blöde Frage, sowas kam mir noch nie vor..
unsure.gif


Ich habe eine .php-Datei in der eine Variable
CODE $var=$x+$y;

existiert.
Diese Variable bekomme ich irgendwo im Code, die ist also nicht vom Anfang an definiert.

Dann habe ich eine .inc-Datei die im gleichen Ordner auf dem Server liegt.
In dieser Datei möchte ich den Wert der Variable $var nutzen.

hier ist klar und deutlich zu lesen:
QUOTE Die Variable $a ist auch in der eingebundenen Datei b.inc verfügbar.


Bei mir ist es aber nicht der Fall! Woran kann es bitte liegen? An Hoster? Daran vielleicht dass ich blöd bin?
biggrin.gif
Hatte schon jemand so ein Problem?

Danke!
 
das geht ganz sicher und ist auch nicht umgebungsabhängig, paste mal relevante stellen deines codes
 
also wenn man ein file included und danach die variable benutzt benötigt man afaik kein global. das braucht man nur wenn man den eigentlich scope überschreiten möchte (z.b. funktionsweit) was aber heutzutage nicht mehr verwendet werden sollte (mal über design patterns und oop informieren)
 
Danke für die schnelle Hilfe, ich seh aber nichts...
Der Code:
1. in der Hauptdatei:
CODE
$kaz.= $_REQUEST['a'] . "*" . $_REQUEST['b'] . " " . $_REQUEST['c'];
include("kss.inc");
$ausgabe.= bildc(); //usw.....
echo $kaz; //!



Die Funktion bild() befindet sich in der .inc-Datei. Aber wenn ich an dieser Stelle mit echo die Variable ausgebe, funktioniert das!

2. in der .inc-Datei befindet sich die Funktion bildc(); , aber egal, wenn ich hier

QUOTE <?php
function bildc()
{
echo $kaz;
}

probiere, funktioniert das nicht, die Variable ist leer! Wie kann das sein?
Danke!

Gerade jetzt habe ich noch etwas festgestellt! Wenn ich die Variable $kaz außer Funktion bildc() definiere, dann gibt es die und die ist nicht leer! Und wenn in der Funktion drin, dann geht es nicht! Die Frage ist dann wohl was ich machen soll damit die Variable auch IN der Funktion sichtbar ist. "global" habe ich ausprobiert, scheint nicht zu funktionieren
 
Das ist in der Eigenschaft von Funktionen so festgelegt, dass die Variabeln darin unabhängig vom Restcode sind
smile.gif
Wenn du eine Variable an die Funktion übergeben willst, dann musst du das in die Klammern schreiben.

Beispiel:

Funktion anlegen:
CODE function function_name($varxy)
{
}

Funktion aufrufen:

CODE $varqz = function_name($input);


$input wird dann Variabelnintern als $varxy angesehen, damit kannst du arbeiten (ausgeben, rechnen oder was auch immer). Wenn du einen return-Wert hast wird dieser in $varqz abgelegt.

Mit globalen Variabeln müsste es auch gehen, das mache ich persönlich aber nicht so gerne.
 
Das PHP Manual erklärt die Sache mit den Gültigkeitsbereichen relativ gut:
http://ch2.php.net/manual/de/language.variables.scope.php

Entweder übergibst du die Variable als Argument an die Funktion oder du verwendest das Schlüsselwort global, um die Variable aus dem globalen Scope zu verwenden. Die erste Variante ist zu bevorzugen, da sie u.a. den Vorteil hat, dass die Funktion unabhängig vom übrigen Code bleibt.
 
Heh, gerade hat das funktioniert und ich habe wieder das ähnliche Problem
smile.gif

Wie soll ich eine Variable zwischen 2 Seiten übergeben?

Ich habe eine Variable $a die ich in der Datei schritt2.php ermittle. Dann muss ich unbedingt eine Bestätigung bekommen und danach diese Variable (und noch ein paar) in die Datei schritt3.php übergeben wo das Ganze nochmals verarbeitet wird.

Mit global $a geht es nicht, mit $GLOBALS["$a"] auch nicht. Ich möchte es ohne get oder post hinkriegen, das ist schließlich kein Formular mehr. Geht es nur mit Sessions oder gibt es andere Möglichkeiten?

Danke!
 
QUOTE (VoinG @ So 11.11.2007, 22:00)Mit global $a geht es nicht, mit $GLOBALS["$a"] auch nicht.

Laut dem von dir im Eröffnungsbeitrag geposteten Link müßte es


CODE $GLOBALS["a"]


heißen.

Abgesehen davon scheint mir dein Code irgendwie merkwürdig zu sein. Unabhängig von der Programmiersprache (PHP nutze ich nicht) genügt es doch, wenn eine eingebundene Datei nur Funktionsdefinitionen enthält (hier JavaScript-Syntax):


CODE function erste_funktion(p1, p2, p3) { viel Code; }

function zweite_funktion(q1, q2, q3) { noch mehr Code; }

...


und selbst keinen Code ausführt, also auch nur die übergebenen bzw. lokalen Variablen kennt. Die aufrufende Codeseite übergibt alle notwendigen Parameter (eventuell per Referenz) und wertet das Ergebnis aus.

Mir scheint, daß Du Dateien so includierst, daß sie beim Einbinden sofort eigenständig Code ausführen - und da ergeben sich dann diverse Probleme. Läßt Du das dagegen weg, dann verschwinden auch alle Probleme - Werte werden nur explizit übergeben.
 
Sorry, ich hab mich vertippt, genauso steht es in meinem Code
CODE $GLOBALS["a"]
und geht nicht.. Ich hab's grade nochmals nachgeprüft, geht nicht!

Und wenn ich mir überlege, sollte das auch nicht gehen. Weil wenn's gehen würde, könnte man auf falsche Variablen ungewollt zugreifen.. Ich glaub, ich löse mein Problem dadurch dass ich die Variable $a aus der Datei schritt2.php an sich selber schicke mit Hilfe von "PHP_SELF" und angehängter URL, so ungefähr wie schritt2.php?aktion=erfolgreich usw.

Danke!

PS. Aber das hier
QUOTE Mir scheint, daß Du Dateien so includierst, daß sie beim Einbinden sofort eigenständig Code ausführen - und da ergeben sich dann diverse Probleme

hast du ganz richtig erkannt, so sollte es nicht sein!
 
Nun verstehe ich das überhaupt nicht..
Warum funktioniert dieser Code nicht? Warum ist $a leer? Es geht doch nur um eine Datei!

CODE
<?php

// ----- wird erst ausgeführt nachdem man auf "GO" geklickt hat.
if ($_REQUEST['action']=='go')
{
echo "action - " . $_REQUEST['action']; // hier überprüfe ich mich, action ist wirklich gleich "go"
echo "<br> a - " . $a; // $GLOBALS["a"] geht auch nicht, die Frage ist WARUM A AN DIESER STELLE LEER IST?
exit(); // wichtig, weiter muss es nicht gehen
}
----- //

$a=2;
echo "a - " . $a; // --- Überprüfung, $a existiert hier wirklich!

echo "<br>";
echo "<a href=" . $_SERVER['PHP_SELF'] . "?action=go>GO</a>"; // man klickt auf den Link, dann wird der Code oben ausgeführt
?>

 
Wenn du die Variable zwischen zwei Seitenaufrufen behalten möchtest, gibt es 2 Möglichkeiten
a) du hängst die Variable der URL als GET-Parameter an: seite2.php?variable=wert
b) du schreibst die Variable in die Session

Grund für dieses Vorgehen: HTTP ist stateless und nach Abarbeitung des Requests wird auch das PHP-Skript beendet, wobei logischerweise auch die Variablen gelöscht werden.

$GLOBALS["a"] hat nichts mit dem Übergeben von Variablen zwischen zwei Seiten zu tun, es ruft ja nur die Variable aus dem globalen Namensraum ab, genau wie das Schlüsselwort global (als Ersatz, sozusagen).

Was du hier fragst sind eigentlich absolut elementare Sachen, die IMHO doch in jedem halbwegs vernünftigen Tutorial stehen müssten.
 
Vielen Dank für eure Antworten! Ich bleibe bei Sessions
smile.gif

Mit dem Problem war ich irgendwie nie konfrontiert, die Variablen habe ich früher nur mit GET/POST übergeben.
Das ganze ist neu für mich, so die Überraschung. Nochmals danke für eure Hilfe!
 
Funktioniert jetzt alles?

Falls ja, am Besten nicht mehr weiter lesen, ansonsten könnte dich das verwirren
smile.gif


Falls nein möchte ich nochmals Bezug nehmen zum letzten Code-Post von VoinG(Dir)...

Da wird $a unterhalb vom IF-Code definiert. Ein PHP-Programm wird von oben nach unten abgearbeitet! Folglich kann es im Fall IF=true gar nichts beinhalten, wenn es nicht via POST o.ä. übergeben wird.

Nur so aus Neugier: Wie lange arbeitest du schon mit PHP?
 
Heh, ich programmiere wirklich nur gelegentlich, fast ausschließlich für mich, für meine Projekte.. Deswegen gibt es viele einfache Sachen die ich überhaupt nicht kenne da ich damit noch nie konfrontiert wurde, einfach nie gesehen
smile.gif

Das Problem hat sich erledigt, ich benutze Sessions und das funktioniert gut.

Wenn du CODE if ($_REQUEST['action']=='go')
meinst dann wird's im URL über GET übergeben.
 
Zurück
Oben