Funktionen in Datei auslagern?

evoleena

Erfahrenes Mitglied
hallo ihrs!

hab mich jetzt daran gemacht, da meine Scripte langsam zu unübersichtlich werden, und ich manche abfragen mehrmals schreibe, einen Datei für die Funktionen anzulegen.

1.Problem
Muss ich in meiner funktionen.php meine Connection und mysql_functions includen?
Wenn ich das mache, und auf die Datei zugreife, wo ich meine funktionen.php benutze, bekomme ich fatal error, wo irgendwas in der Mysql functions falsch ist.
Wenn ich nichts in funktionen.php include gehts! Woran liegt das?

2.Problem
wenn ich eine Abfrage in meine Funktionen.php schreibe
z.B.
PHP:
function gast_auswaehlen($db,$gastid)
{
    $query_gast = "SELECT * FROM gast WHERE Gast_ID='".$gastid."'";
    $gast = mysql_db_query($db,$query_gast);
}

Muss ich dann die einzelnen Elemente die ich dann aus der Datenbank auslesen möchte wie z.B. den Namen des Gastes und so! da mit hinbauen?
z.B. so
PHP:
name = $gast['name'];
 
Zu 1.: Wahrscheinlich includest Du die Connection und mysql_functions sowohl in der funktionen.php, als auch in der "Haupt"-PHP Datei. Das brauchst (darfst) Du nicht, da beim ersten includen schon einmal Instanzen der Klasse abgelegt werden. Da Du die funktionen.php in der "Haupt"-PHP Datei includest und dort die Connection und mysql_functions bereits includet sind, werden diese auch für die funktionen.php übernommen. (Kann es sein, dass ich mich ein wenig kompliziert ausdrücke?)

Zu 2.: Was Du brauchst, sind Rückgabewerte, damit Du in der "Haupt"-PHP Datei die Daten verwenden/auswerten kannst.

Das was Du machst, ist Klassenprogrammierung. Wenn Du da Hilfe brauchst, kann ich Dir gerne ein Beispiel (samt Erläuterung, was was bedeutet) geben.

redlama
 
in die funktion.php brauch keine Verbindung o.ä. rein, einfach nur deine Funktionen.
Ich habe das z.B. so, das ich eine Config.php habe, die diese function.php includet, neben der Varibalen.php etc. Auf jeder Seite ist die 3te Zeile das includen der Connect.php (nach öffnen und error_reporting) und danach die header.php, die unter anderen die config aufruft

die Variablen brauchst du normalerweise nicht in die Funktion schreiben, die soll ja in dein Script und wenn du

gast_auswaehlen();

im Script verwendest, wird an dieser Stelle der Query zur DB geschickt, somit sollten die Variablen auch bekannt sein :)
 
@ relama ne hast du gut erklärt habs verstanden

zu 2. wie müssen die Rückgabewerte aussehen?
hab jetzt in die Funktion return $gast eingebaut
wenn ich jetzt den namen im formular haben will steht nichts da! aber es kommt auch keine Fehlermeldung.
Würde bedeuten das er die variable $gast kennt auch die Abfrage durchgeht, aber nix ausgibt!
Ich habs so gemacht
PHP:
Buchungen für ".$gast['ansp_name'].", ".$gast['ansp_vorname']."

aber da zeigt er nichts an!
 
Was steckt denn in $gast drin bei der Rückgabe?
Ist $gast denn auch ein Array? Schließlich willst Du doch mehrere Werte übergeben, oder?
Zeig mal bitte ein bisschen mehr Quelltext.

redlama
 
Ja mach ich
Das steck hinter gast in funktionen.php
PHP:
function gast_auswaehlen($db,$gastid)
{
    $query_gast = "SELECT * FROM gast WHERE Gast_ID='".$gastid."'";
    $gast = mysql_db_query($db,$query_gast);
    return $gast;
}
Das steht in meiner andere Datei
PHP:
$gast = gast_auswaehlen($db,$gastid);
     echo"<table border='1' align='center'>
      <tr>
       <td colspan='6' align='center'>
        Buchungen für ".$gast['ansp_name'].", ".$gast['ansp_vorname']."
 
Also ankommen müsste eigentlich was in der anderen PHP Datei.
Aber ich bin mir jetzt nicht wirklich sicher, ob Du so ($gast = mysql_db_query($db,$query_gast);) wirklich die Resultate des select Statement erhältst.
Ich mache das ganze immer ein wenig anders, indem ich für alles eigene Klassen programmiere.

redlama
 
Moin!

Also ich habe 2 Dateien. Eine .inc und eine .php Datei. Beide sind für die Verbindung zur Datenbank zuständig (auch auch nur diese Dateien).
Dann habe ich Klassen programmiert, in denen die Statements abgesetzt (also an MySQL geschickt) werden. Und in meinen PHP Dateien (die für die Anzeige und Auswertung der Daten) setze ich Instanzen der Klassen und rufe die Rückgabewerte aus.
Wenn Du magst, gebe ich Dir gerne ein Beispiel und helfe Dir mit den Klassen für Dein spezielles Problem.

redlama
 
[phpf]mysql_query[/phpf] liefert Dir eine RessourceID (oder false), also einen internen Zeiger der DB auf auf Deine Liste von Ergebnissen. [phpf]mysql_fetch_array[/phpf] liefert Dir davon Deine Ergebnisse.
Also:
PHP:
$ref=mysql_query(...);
if ($ref) {
    $gast=mysql_fetch_array($ref);
    return $gast;
} else {
    return false;
}
[phpf]mysql_db_query[/phpf] ist übrigends als deprecated eingestuft und sollte nicht mehr verwendet werden.

Beim "includen" verhält sich der Code der eingebundenen Datei im Prinzip, als würde er dahin geschrieben, wo das include steht. Also gilt auch der Arbeitspfad, z.B. zum Öffnen von Dateien oder zum Einbinden von weiteren Funktionsskripten, wie in der einbindenden Datei.
Nur als Tipp für die Zukunft.

Gruß hpvw
 
Zuletzt bearbeitet:
Zurück