Seite 1 von 1

Variable ändern durch include-Datei

Verfasst: 21.10.2004 21:54
von MrMind
Moin Leutz,

hätte lieber einen aussagekräftigeren Titel genommen, aber der wäre zu lang gewesen ;)

Also ich habe folgendes Problem wo ich momentan nicht durchblicke:

Ich habe eine Variable in einer globalen Datei als leer Deklariert. In einer anderen Datei wird diese Variable gefüttert mit Inhalt.

Die Zuweisung wird aber über eine Funktion gemacht. (Ich weiß bis jetzt blickt keiner durch). ;)

Es soll genauso wie beim phpBB mit der Sprache funktionieren.
In der common.php wird $lang als leeres Array deklariert und über die Funktion init_userprefs() mit Inhalt gefüllt.

Die Funktion deklariert die Variable $lang global in die Funktion ein und includet die Sprachdatei (lang_main.php), welche die $lang mit Inhalten füttert.

Variablen die global in eine Funktion eingebunden werden und verändert werden, werden auch global verändert, daher muss net expliziet die $lang wieder an die auffrufende Datei zurück gegeben werden sondern wird automatisch angepasst.

Genauso habe ich dies auch in meiner Funktion gemacht, aber es gelingt nicht.

Variable global leer deklariert
in Funktion global eingebunden
Datei includet die die Variable füttert
Variable wird nicht zurück gegeben.

Warum wird es nun nicht global verändert??? gibt es da eine Idee woran das liegen könnte.

Das gleich in der selben Funktion habe ich schonmal gemacht, aber da wird die globale Variable net mit einer Datei gefüttert sondern mit einer Funktion die eine Array zurück gibt.
Warum aber net mit Dateien???

Die Datei findet er und kann auch laden, daran liegt es auch net.

Ich hab keinen Schimmer mehr.

Wäre super wenn jemand ne Idee hat, woran das liegen könnte.

Mfg
MrMind

Verfasst: 21.10.2004 23:56
von Blutgerinsel
Nach diesem ellenlangen blabla weiss ich soviel wie vorher......

Nur wie steuerst du die Globalen an, dass hast du mit keiner Silbe genannt....

Code: Alles auswählen

$GLOBALS
Dieses Array ist in jedem Script verfügbar.....und ist seit PHP 3 verfügbar

Verfasst: 22.10.2004 15:49
von MrMind
Ich weiß ich kann sehr verwirrend schreiben ;)

Also die globalen Variablen werden einfach in einer Datei normal defniert die in jeder Seite eingebunden ist (somit sind sie ja global).

Wenn ich nun diese in einer Funktion benötige und nicht als Parameter übergeben möchte "include" ich sie über den global Befehl in die Funktion hinein:

Code: Alles auswählen

function eins()
{
    global $db;
    //...
}

Die Variable $db ist außerhalb der Funktion bekannt und deklariert.
Wird sie nun in der Funktion mit einem anderen Inhalt gefüttert wie folgendes:

Code: Alles auswählen

function eins()
{
    global $db;
     
     $db = zwei();
}

function zwei()
{
   return 'In Funktion zwei';
}
ändert sich der Inhalt der Variable nicht nur in der Funktion sondern sie wird auch global verändert. Damit meine ich, wenn ich ein Hauptscript habe, die die Funktion eins aufruft und nach dem Aufruf mir $db ausgeben lassen, würde da stehen: In Funktion zwei.

Code: Alles auswählen

<?php
$db = 'Leer';

eins();

echo $db;
?>
Gibt die Ausgabe:
In Funktion zwei

Wenn ich aber den Inhalt einer Variable änder wie folgt:

db_set.php

Code: Alles auswählen

<?php
$db[0] = 'Null';
$db[1] = 'Eins';
$db[2] = 'Zwei';
?>
Funktions.php

Code: Alles auswählen

<?php
function eins()
{
   global $db;
    
    if( file_exist('./db_set.php') )
    {
       include('./db_set.php');
    }
}
?>
index.php

Code: Alles auswählen

<?php
$db = array();

include('./Funktions.php');

eins();

while( list($key,$val) = each($db) )
{
        echo $key . '=' . $val; //Wird keine Ausgabe zeugen, da $db net mit Inhalten gesetzt wurde.
}
?>

Das Kommentar sollte alles aussagen ;)

Wenn ich nun mit $db arbeiten wollte, dann müsste ich es mit Inhalten füttern, obwohl dazu eigenlich das includen in der Funktion eins dienen soll.

Verstehste nun wie ich das meine???

Mfg
MrMind

Verfasst: 22.10.2004 16:05
von Blutgerinsel
hmm ich scheine zu verstehen......

was ergibt:

Code: Alles auswählen

var_dump($db);
Mir scheint das $db als Array zu einer normalen Var überschrieben wird....
Wenn ich das jetzt richtig verstanden habe.....

Verfasst: 22.10.2004 16:15
von MrMind
Das gibt gar nichts aus => LEER.

Das erste Beispiel mit den zwei Funktionen, klappt auch, wenn Funktion zwei keinen String sondern ein Array zurück gibt. Die Variable wird verändert und das auch in der aufrufenden Seite.

Allerdings verstehe ich dann aber net warum das mit dem Includen nicht klappt. weil das includen ist doch lediglich ein Art einbettung und wenn eine Variable durch eine Rückgabe verändert werden kann, warum wird diese dann nicht verändert, wenn eine globale Datei in der Funktion "manuel" definiert wird (meine damit das includen, das Array wird ja Zeile für Zeile mit Index deklariert).

Hier mal der Code der Funktion in der die Datei verändert werden soll:

Code: Alles auswählen

function init_userprefs()
{
  global $db, $table_prefix, $mc_config, $t, $mc_root_path, $user_data, $phpEx, $theme, $lang;
  
  if( !empty($user_data['user_lang']) )
  {
     $mc_config['default_lang'] = $user_data['user_lang'];
  }
  
  if( !empty($user_data['user_dateformat']) )
  {
     $mc_config['default_dateformat'] = $user_data['user_dateformat'];
  }
  
  	if ( !file_exists($mc_root_path . 'language/lang_' . $mc_config['default_lang'] . '/lang_main.'.$phpEx) )
	{
		$mc_config['default_lang'] = 'german';
	}

	include($mc_root_path . 'language/lang_' . $mc_config['default_lang'] . '/lang_main.' . $phpEx);
  
  if( $user_data['user_id'] != ANONYMUS && $user_data['user_style'] > 0 )
  {
     $theme = getStyle($user_data['user_style']);
  }
  else
  { 
     $theme = getStyle($mc_config['default_style']);
  }
}
Wunder dich net, ich habe einiges vom phpBB übernommen und lediglich angepasst damit das phpBB und meiner HP 1:1 kommunizieren können ;)

Mfg
MrMind

Verfasst: 25.10.2004 08:46
von MrMind
Thema hat sich erledigt.

Es lag nicht an der $lang Variable sondern an meiner Templateszuweisung.

Hatte die phpBB Template-Klasse verwendet und die Variablen in einem BEGIN - END Block gesetzt und auch dies mit assign_block_vars() zugewiesen . Hatte aber die Variablen "normal" im Template deklariert und nicht mit dem Blocknamen like :

blockname.VARIABLENAME

Trotzdem danke für die Hilfe.

Mfg
MrMind

Verfasst: 25.10.2004 12:44
von Blutgerinsel
MrMind hat geschrieben:Thema hat sich erledigt.

Es lag nicht an der $lang Variable sondern an meiner Templateszuweisung.

Hatte die phpBB Template-Klasse verwendet und die Variablen in einem BEGIN - END Block gesetzt und auch dies mit assign_block_vars() zugewiesen . Hatte aber die Variablen "normal" im Template deklariert und nicht mit dem Blocknamen like :

blockname.VARIABLENAME

Trotzdem danke für die Hilfe.

Mfg
MrMind
Du hast mit keinem Wort Templates erwähnt :wink:

Verfasst: 25.10.2004 14:36
von MrMind
Blutgerinsel hat geschrieben:Du hast mit keinem Wort Templates erwähnt :wink:
Ja ich weiß, weil ich dachte, das es nicht an den Templates liegen könnte (das Layout hatte ja geklappt).

Aber wie heißt es so schön: Das Problem liegt meistens dort, wo man es am wenigsten erwartet ;)

Mfg
MrMind

Verfasst: 25.10.2004 18:48
von Blutgerinsel
Jop und deshalb stimmen die Mc Murphy Computer LAW Gesetze vollkommen :wink: