[PHP]Problem mit forech - Schleife

krizzelfix

Commander
Registriert
Sep. 2005
Beiträge
2.626
//gelöst
Hallo User,

ich hab mal wieder ein Problem mit PHP.
Und zwar will ich in einer Datei die Werte für Variablen verändern und diese Daten wieder Speichern.
Dazu habe ich mir eine Array erstellt in dem erst der "Datentyp" steht und dann der Variablenname als Key mit dem Wert der zugewiesen werden soll. Das sieht dann so aus:
PHP:
$vars['bool']['ENABLE_USER'] 					= (isset($_POST['user']) ? "true" : "false");
$vars['bool']['ENABLE_PASSFILES'] 				= (isset($_POST['pass']) ? "true" : "false");
$vars['bool']['ENABLE_RSS'] 					= (isset($_POST['rss']) ? "true" : "false");
Und dann geh ich die Datei Zeile für Zeile durch und überprüfe per RegEx ob es was zu ersetzen gibt.
PHP:
foreach ($initaccess as $acc_key  => $acc_value) {
	$subject = $acc_value;
	if (preg_match("~^\s*\$~is", $subject)) {
		echo "acc =  ".$acc_value." = ".$acc_key;
		foreach ($vars['bool'] as $key => $value) {
			$pattern = "~^\s*\$".$key."\s*=[^;]*;\s*$~is";
			$replace = "$".$key."\t\t\t\t\t=".$value.";";
			$subject = $acc_value;
			
			echo '<span style="color: #ff0000;>Boolean</span><br/><br/>';
			
			echo htmlentities($pattern)." = pattern<br/>";
			echo htmlentities($replace)." = replace<br/>"; 
			echo htmlentities($subject)." = subject<br/>";
			
			if(preg_replace($pattern, $replace, $subject))
			{
				$initaccess[$acc_key] = $subject;
			}
		}
		
		foreach ($vars['zahl'] as $key => $value) {
			$pattern = "~^\s*\$".$key."\s*=[^;]*;\s*$~is";
			$replace = "$".$key."\t\t\t\t\t=".$value.";";
			$subject = $acc_value;
			
			echo '<span style="color: #ff0000;>Zahl</span><br/><br/>';
			
			echo htmlentities($pattern)." = pattern<br/>";
			echo htmlentities($replace)." = replace<br/>"; 
			echo htmlentities($subject)." = subject<br/>";
			
			if(preg_replace($pattern, $replace, $subject))
			{
				$initaccess[$acc_key] = $subject;
			}
		}
		
		foreach ($vars['name'] as $key => $value) {

			$pattern = "~^\s*\$".$key."\s*=[^;]*;\s*$~is";
			$replace = "$".$key."\t\t\t\t\t= array(\"".$value."\");";
			$subject = $acc_value;
			
			echo '<span style="color: #ff0000;>name</span><br/><br/>';
			
			echo htmlentities($pattern)." = pattern<br/>";
			echo htmlentities($replace)." = replace<br/>"; 
			echo htmlentities($subject)." = subject<br/>";
			
			if(preg_replace($pattern, $replace, $subject))
			{
				$initaccess[$acc_key] = $subject;
			}
		}
		
	}
}
Mein Problem ist jetzt das die Variable $acc_value immer leer ist. Aber die ganzen echos werden ausgegeben.
Teil der Ausgabe:
acc = = 1Boolean

~^\s*$ENABLE_LANGUAGES\s*=[^;]*;\s*$~is = pattern
$ENABLE_LANGUAGES =false; = replace
= subject
Boolean

~^\s*$ENABLE_USER\s*=[^;]*;\s*$~is = pattern
$ENABLE_USER =true; = replace
= subject
Boolean

~^\s*$ENABLE_RSS\s*=[^;]*;\s*$~is = pattern
$ENABLE_RSS =true; = replace
= subject
Boolean

~^\s*$ENABLE_ARTICLE_BACKUPS\s*=[^;]*;\s*$~is = pattern
$ENABLE_ARTICLE_BACKUPS =false; = replace
= subject
Boolean

~^\s*$ACCESS_SHOP['bestellfunktion']\s*=[^;]*;\s*$~is = pattern
$ACCESS_SHOP['bestellfunktion'] =false; = replace
= subject
Boolean

~^\s*$ACCESS_SHOP['produktgalerie'] \s*=[^;]*;\s*$~is = pattern
$ACCESS_SHOP['produktgalerie'] =false; = replace
= subject
Boolean

~^\s*$ACCESS_SHOP['produktdownloads']\s*=[^;]*;\s*$~is = pattern
$ACCESS_SHOP['produktdownloads'] =false; = replace
= subject
Zahl

~^\s*$ACCESS_SHOP['anzahl_shopprodukte']\s*=[^;]*;\s*$~is = pattern
$ACCESS_SHOP['anzahl_shopprodukte'] =0; = replace
= subject

Bin für jeden Tipp dankbar

Grüße

tewes

// Edit: Problem gefunden. Die variable $subject wurde immer von dem preg_match überschrieben.
 
Zuletzt bearbeitet:
Zurück
Oben