php function - variabel nicht verfügbar

olegbr
Folgendes Problem: Ich habe eine php datei mit mehren functionen und möchte in der function $link benutzen (die datenbanverbindung) [eigentl. aus einem include]

In der Funktion sind allerdings nur die variabeln verfügbar die inerhalb der Funktion liegen. Wie bekomme ich zugriff auf eine Variabel ausserhalb der function() ?

Folgenden Fehlermeldung wird im browser angezeigt:

Zitat:

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /srv/www/htdocs/web25/html/content/funktionen.php on line 35


line 35 ist: $result = mysql_query($query,$link);

code:
1:
2:
3:
4:
5:
6:
// verbindung zum mysql server aufbauen
$link = mysql_connect($host,$user,$pw);
//datenbank auswählen und verbinden
mysql_select_db($db,$link);



code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function gibSprachId($landeskurzel){
echo"1: $host";
echo"2: $user";
echo"3: $pw";
$query = "select id from sprachen where (landeskennung = '$landeskurzel')";
$result = mysql_query($query,$link);
if (mysql_errno()) die ("MySQL-Error: " . mysql_error());
 return $result[id];
}


Danke für Eure Hilfe!
daHooligan
kann es sein, dass Handles aus Funktionen nicht verfügbar sind wenn sie included werden??
olegbr
hab es auch schon ohne onclude versucht, also in der selben datei definiert und verbindung zur datenbank erstellt, in der auch die function ..() ist

Das Problem ist, variabelen die nicht innerhalbt der funktione definiert sind in der funktion nicht bekannt.. noch mal ein beispiel...:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
<?php

Mustertext = "Diese Variabel ist in der function nicht verfügbar";

function TexteKoppeln(String uebergabeText){
     return uebergabeText." ".Mustertext;
}


// Mustertext ist jetzt nicht verhanden in der Funktion.. die variabel ist innerhalb der Funktion überhaupt nicht bekannt...
daHooligan
wenn du es so gemacht hast wie du es unten geschrieben hast hast du vergesssen die Funktion aufzurufen, also praktisch:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:

<?php
Mustertext "Diese Variabel ist in der function nicht verfügbar";
function TexteKoppeln(String uebergabeText)
{return uebergabeText." ".Mustertext;}
echo TexteKoppeln("String");
?>

max77
Da hast Du recht, daHool. Aber auch Dein Text wird nicht funzen: Variablen müssen mit $variable benannt werden...

Aber nun zum Problem:
Wenn Variablen im globalen Kontext definiert werden, sind die grundsätzlich nicht in Funktionen verfügbar. In Deinem Beispiel würde diese Variable also in der Funktion neu angelegt.
Es gibt die Möglichkeit, mit "global" die Variablen aus dem globalen Zusammenhang zu übernehmen:
Check this:
php:
1:
2:
3:
4:
5:
6:
7:
8:
<?php
$Mustertext "Diese Variabel ist in der function nicht verfügbar";
function TexteKoppeln(String $uebergabeText) {
    global $Mustertext;
    return uebergabeText." ".$Mustertext;
    }
echo TexteKoppeln("String");
?>
olegbr
Danke max77 - das ist schon mal sehr gut zu wissen - und die variabel ist jetzt auch in der funktion verfügbar, dennoch zeigt er immer noch eine fehlermeldung an. Ich post mal zunächst die Fehlermeldung was der browser anzeigt, und dann die einzelnen php dateien

inhalt_anzeigen.php?seiten_bezeichnung=starseite


Zitat:

Warning: mysql_query(): 3 is not a valid MySQL-Link resource in /srv/www/htdocs/web999/html/content/funktionen.php on line 28

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /srv/www/htdocs/web999/html/content/funktionen.php on line 29

link: Resource id #3
query: select id from seiten where (bezeichnung = 'starseite')
result:
row:
row[id]:
db:
Warning: mysql_query(): 3 is not a valid MySQL-Link resource in /srv/www/htdocs/web999/html/content/funktionen.php on line 17

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /srv/www/htdocs/web999/html/content/funktionen.php on line 18

Warning: mysql_query(): 3 is not a valid MySQL-Link resource in /srv/www/htdocs/web999/html/content/funktionen.php on line 44

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /srv/www/htdocs/web999/html/content/funktionen.php on line 45


Datei: Inhalt_anzeigen.php
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<?php


include_once("./einstellungen.php");

include_once("./funktionen.php");

echo gibInhalt(gibSeitenId($seiten_bezeichnung),gibSprachId($sprache));
?>



Datei: einstellungen.php
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
<?php

// statische variabeln

define('_def_webnr', '999');

define('_standard_sprache', 'de');

define('_def_document_root', '/srv/www/htdocs/'._def_webnr.'/html/content/');

///////// DATENBANK EINSTELLUNGEN /////////////////////

$host ="localhost";    //Host

$user = "us"._def_webnr;       //Der Datenbankuser

$db = "web"._def_webnr."_db1";   //Die Datenbank...

$pw ="123456789";       //Das passwort des o.g. Users
// verbindung zum mysql server aufbauen
	$link = mysql_connect($host,$user,$pw);
//datenbank auswählen und verbinden
	mysql_select_db($db,$link);


// die sprachdateien inclluden

if(!isset($sprache) || !file_exists("./sprachdateien/".$sprache.".php"))

	{

		$sprache = _standard_sprache;

	} 

include_once("./sprachdateien/".$sprache.".php");



?>




Datei: funktionen.php
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
<?php

require_once("einstellungen.php");

function gibSprachId($landeskurzel){
	global $link;
	$query = "select id from sprachen where (landeskennung = '$landeskurzel')"; 
	$result = mysql_query($query,$link);
	$row = mysql_fetch_array($result);
 	return $row[id];

}



function gibSeitenId($seiten_bezeichnung){
	global $link;
	$query = "select id from seiten where (bezeichnung = '$seiten_bezeichnung')"; 
	$result = mysql_query($query,$link);
	$row = mysql_fetch_array($result);
	echo "<br>link: ".$link;
	echo "<br>query: ".$query;
	echo "<br>result: ".$result;
	echo "<br>row: ".$row;
	echo "<br>row[id]: ".$row[id];
	echo "<br>db: ".$db;
 	return $row[id];
}



function gibInhalt($seitenId, $sprachId){
	global $link;
	$query = "select inhalt from inhalte where (seiten_id = '$seitenId') && (sprach_id = '$sprachId')"; 
	$result = mysql_query($query,$link);
	$row = mysql_fetch_array($result);
 	return $row[inhalt];
}

mysql_close($link);

?>

p-Logic
Bist du wirklich sicher, dass die DB nicht leer ist?

Mach bitte mal ne testseite (wenn du das nicht schon versucht hast), die ohne includes und reqires einfach ne Verbindung zu DB herstellt und dann die Sachen ausgibt.

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
<?php define('_def_webnr''999');
define('_standard_sprache''de');
define('_def_document_root''/srv/www/htdocs/'._def_webnr.'/html/content/');

$host ="localhost";    //Host
$user "us"._def_webnr;       //Der Datenbankuser
$db "web"._def_webnr."_db1";   //Die Datenbank...
$pw ="123456789";       //Das passwort des o.g. Users
// verbindung zum mysql server aufbauen
    $link mysql_connect($host,$user,$pw);
//datenbank auswählen und verbinden
    mysql_select_db($db,$link);
    $query "select id from sprachen where (landeskennung = 'de')"; 
    $result mysql_query($query,$link);
    $row mysql_fetch_array($result);
     echo $row[id]; ?>


Wenn das geht, liegts am includen, das du dann ändern solltest,
wenn nicht liegts an der DB bzw. deinen Angaben bei der Verbindung.
olegbr
Danke für alle euren Hinweise! Der letze und neben "global" entscheidene fehler war:

in der "einstellungen.php" steht am ende:

code:
1:
2:
3:
mysql_close($link);


es wird also die verbindung zur DB schon beendet bevor überhaupt die funktion aufgerufen wird....

habe das jetzt rasugenommen und beende die verbindnug erst mal garnicht.. evtl später in einer footer.php... - oder hat jemand dafür noch einen guten vorschlag?