# PHP Problem: Geltungsbereich von Variablen



## Guest (6. Jan 2009)

Ich stehe vor folgendem Problem, ich habe ien kleines script geschrieben wo ich 2 php classen mittels include eingebunden habe. Nach langen hin und her wurde mir mitgeteiilt das das erste $mysql objekt in der funktion pruefe_usernamen() nicht bekannt ist mit hinweis auf den "geltungsbereich von variabeln" http://www.php.net/manual/de/language.variables.scope.php.

Das Problem traat erst mit einbindung der function pruefe_usernamen() auf. Die classen wurden vorher ausgibig getestet. Sie Funktionen, an rechten in der datenbank liegt es auch nicht.

Ich verstehe das Problem kann mir aber leider nicht erklären wie ich das ganze beheben soll. Hier erstmal der Code vllt hat ja einer von euch eine idee.


```
<?php			
	include("classes/formular_class.php"); 
   include("classes/mysql_class.php"); 
	
	$form = new formular_class();
	$mysql = new mysql_class();              [b]   // <-- Müsste global sein :/[/b]
	$form -> textfeld('Username: ', array('Username'));
	$form -> textfeld('Vorname: ', array('Vorname'));
	$form -> textfeld('Nachname: ', array('Nachname'));
	$form -> textfeld('PLZ / Wohnort: ', array('PLZ', 'Ort'));
	$form -> textfeld('Email: ', array('Email'));
	$form -> textfeld('Geburtsdatum: ', array('gebdat'));

	$form -> passwort('Passwort: ', array('Pw'));
   $form -> passwort('Passwort-Wiederholung: ', array('Pwwdh'));	
	$form -> submit('register', 'Registrierung');
	$form -> output();
	
	if(isset($_POST['register']))
	{
		pruefe_usernamen();
		register();	
	}

	function pruefe_usernamen()
	{
		$mysql = new mysql_class();
		$mysql -> waehle_db('kemper');
		$sql = "SELECT Nr FROM sometable WHERE Username = irgendeinnick";
		$result = mysql_query($sql);
	}

	function register()
	{
		$mysql -> waehle_db('kemper');
		$mysql -> erstelle_tabelle('user',  array('Username'  => 20, 'Vorname' => 20, 'Nachname' => 20, 'Geburtsdatum' => 20, 'PLZ' => 20,	'Wohnort' => 5,	'Email' => 20, 'Passwort' => 40));
      $mysql -> eintrag_erstellen('user', array('Username','Vorname', 'Nachname', 'Geburtsdatum', 'PLZ', 'Wohnort', 'Email', 'Passwort'),
																			  array($_POST['Username'], $_POST['Vorname'], $_POST['Nachname'], $_POST['gebdat'], 
																						  $_POST['PLZ'], $_POST['Ort'], $_POST['Email'], md5($_POST['Pw'])));
	}

		$mysql -> verbindung_beenden();	
?>
```
[/quote]


----------



## Gast (8. Jan 2009)

So ganz versteh ich nicht was du da im Code vorhast. Wieso erzeugst du in der Methode nochmal ein Objekt  $mysql? Ich weiß zwar nicht genau was die zugehörige Klasse macht, aber ich vermute das ich Blödsinn.

Wie wäre es, wenn du der funktion pruefe_usernamen() einfach die variable $mysql als Parameter übergibst?


----------



## Gast (8. Jan 2009)

Gleiches gilt natürlich auch für die Funktion register()


----------



## Gelöschtes Mitglied 6946 (8. Jan 2009)

um in funktionen von php auf globale variablen zugreifen zu können, musst du sie dennoch vorher deklarieren:

```
function blablubb() {
    global $mysql;
    // jetzt erst kann die globale variable $mysql verwendet werden
}
```

abgesehen davon gilt aber das, was ein anderer gast schon sagte - übergib es am besten als parameter, das ist sauberer. ansonsten schadet es sicher auch nicht, wenn du dich grundsätzlich mit der sichtbarkeit von variablen beschäftigst, sonst stolperst du vielleicht noch häufiger über solche probleme


----------

