Frage zum Verständnis von Funktionen

atlantyz

Erfahrenes Mitglied
Hallo,

ich lerne grad PHP und probiere verschiedenes aus.

Nun habe ich eine Frage zum Verständnis von Funktionen. Also... wenn ich eine Funktion in eine externe Datei auslagern möchte (also ich hab da die Datei functions, wo nachher alle Funktionen drin stehen sollen), wie rufe ich die dann im Hauptprogramm wieder auf?

Ich hab zu Beginn die Verbindung zur Datenbank ausgelagert.
PHP:
<html>
<body>
<?php
mysql_connect("","root","root");
mysql_select_db("user");
$res = mysql_query("select * from uebersicht");
$num = mysql_num_rows($res);
?>
</body
</html>

Und rufe das über include dann im Hauptprogramm auf. Habe ich nun aber mehrere Funktionen in dieser Datei (nicht nur die Datenbankverbindung), muss ich dann nicht sagen, was er wann ausfüren muss? Also z.B. so:

PHP:
<html>
<body>
<?php
function db_connect()
{
mysql_connect("","root","root");
mysql_select_db("user");
$res = mysql_query("select * from uebersicht");
$num = mysql_num_rows($res);
}
function naechste_funktion ()
{
blabliblubb
}
?>
</body
</html>

Sobald ich jedoch function davorsetze, kann er sich im Hauptprogramm nicht mehr mit der Datenbank verbinden, bzw. er kann die Variable $res und $num nicht mehr benutzen usw. Mache ich was falsch oder geht das mit dem Auslagern ganz anders?

Grüße
Joey
 
Funktionen werden nur ausgeführt, wenn du sie aufrufst.

Also du machst ein include, dann stehen dir die Funktionen so zur VErfügung, als wären sie in der selben Datei.
Dann kannst du sie zb per naechste_funktion(); aufrufen.

PHP:
include (datei2.php)

blabla

naechste_funktion();

PHP:
// Datei 2
function naechste_funktion () {
echo "hallo";
}
 
Okay, das habe ich so probiert, erhalte aber leider nur eine Fehlermeldung (wie gesagt, mache ich es ohne function davor geht es).

Meine Funktion:

PHP:
<html>
<body>
<?php
function db_connect()
{
mysql_connect("","root","root");
mysql_select_db("user");
$res = mysql_query("select * from uebersicht");
$num = mysql_num_rows($res);
}
?>
</body
</html>

Und die Funktion eingebunden:

PHP:
<html>
<body>
<?php
include "functions.php";

echo "<table border>";

echo "<tr> <td>Name</td> <td>Level</td>";

db_connect ();

while ($dsatz = mysql_fetch_assoc($res))
{
echo "<tr>";
echo "<td>" . $dsatz["Name"] . "</td>";
echo "<td>" . $dsatz["Level"] . "</td>";
echo "</tr>";
}
echo "</table>";
?>
</body
</html>

Und die Fehlermeldung:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/web440/html/darkshadow/user/uebersicht.php on line 14

Heißt für mich... er kennt $res nicht... oder?
 
Die Fehlermeldung ist bei mir weg wenn ich SELECT und FROM gross schreibe.

das wundert mich, da groß/kleinschreibung eigentlich egal ist und nur gemaht wird für die übersicht
der fehler den du hattest lag aber nicht an php, sondern sql
in solchen fällen am besten den sql-befehl kopieren und direkt auf der datenbank, zb mit phpmyadmin, ausführen
 
Also erstmal gehört in deine "functions.php" kein HTML-Code!

Es kann nicht funktionieren, weil du innerhalb deiner Funktion die Variable $res deklarierst, sie aber eigentlich ausserhalb deiner Funktion brauchst.

Probier mal folgendes:
funcions.php:
PHP:
<?php 
function db_connect() 
{ 
mysql_connect("","root","root"); 
mysql_select_db("user"); 
} 
?>

andere Datei:
PHP:
<html> 
<body> 
<?php 
include "functions.php"; 

echo "<table border>"; 

echo "<tr> <td>Name</td> <td>Level</td>"; 

db_connect (); 

$res = mysql_query("select * from uebersicht"); 
$num = mysql_num_rows($res); 
while ($dsatz = mysql_fetch_assoc($res)) 
{ 
echo "<tr>"; 
echo "<td>" . $dsatz["Name"] . "</td>"; 
echo "<td>" . $dsatz["Level"] . "</td>"; 
echo "</tr>"; 
} 
echo "</table>"; 
?> 
</body 
</html>
 
Ja, das geht jetzt :-)

Okay... und wenn ich nun noch weitere Funktionen aufrufen möchte, reicht es dann, wenn ich einmal am Anfang die Seite mit include einbinde?
 
durch einen include wird die angegebene datei in die wo der include steht eingebunden. es ist also so, als hättest du es direkt in der datei stehen.

wenn du funktionen aus der functions.php nutzen willst, so reicht es wenn du die functions.php einmalig includest am anfang der datei
 
Wenn du 2-Mal die Datei einbinden willst über den include-Befehl kommt wird eine Warnung kommen. Um zu verhindern, dass eine Datei mehrmals eingebunden wird kannst du [PHPF]include_once[/PHPF] nehmen.
 
Zurück