Füge zur Kontrolle diese Zeilen gleich nach function schulenzeigen(){ ein:
(var_dump() zeigt den Inhalt des Arrays an.)PHP-Code:echo "Funktion wird aufgerufen.<br><br>\n<pre>";
var_dump($daten);
echo "</pre>\n\n";
Hallo zusammen,
nachdem ich mich nun seit einiger Zeit eingängiger mit PHP beschäftigt habe, wollte ich auch endlich mal mit functions arbeiten.
Wenn ich eine Testfunktion mit
anlege und mit test(); aufrufe wird auch wie erwartet "Test" ausgegeben.PHP-Code:function test()
{
echo "Test";
}
Nun habe ich auf gleiche einfache Weise eine Funktion angelegt und einen etwas komplexeren Code eingefügt, aber die Funktion wird scheinbar nicht aufgerufen bzw. es wird keine Ausgabe erzeugt - es wird lediglich der Teil der Seite ausgegeben, der nicht in der Funktion ist, aber keine Fehlermeldung.
Diese Funktion enthält eine for-Schleife, mit der Daten aus einer Datenbank in einer HTML-Tabelle ausgegeben werden sollen, alles mit echo.
Das ist auch der Grund, dass diese Funktion kein return enthält, aber das hats ja scheinbar bei der Testfunktion auch nicht gebraucht.
Hier mal der Code (leicht gekürzt):
Warum funktioniert die eine Testfunktion, die Funktion schulenzeigen mit gleichem Aufruf aber nicht?PHP-Code:schulenzeigen();
function schulenzeigen()
{
echo '<table border="0" width="470">';
for($i=0; $i < count($daten); $i++)
{
// Allgemeine Daten
echo "<tr><td>\n<b>";
echo $daten[$i]['schule_name'];
echo "</b>\n</td></tr>\n<tr><td>";
echo $daten[$i]['strasse'];
echo "\n</td></tr>\n<tr><td>";
echo $daten[$i]['plz'];
echo " ";
echo $daten[$i]['stadt'];
echo "</td></tr>\n";
echo "<tr><td height=\"40\"></td></tr>\n";
}
echo "</table>";
} // FUNCTION SHOW -> Ende
Sind wie gesagt meine ersten Gehversuche mit functions in PHP.
Viele Grüße aus dem Tal
Max
Füge zur Kontrolle diese Zeilen gleich nach function schulenzeigen(){ ein:
(var_dump() zeigt den Inhalt des Arrays an.)PHP-Code:echo "Funktion wird aufgerufen.<br><br>\n<pre>";
var_dump($daten);
echo "</pre>\n\n";
Danke für die schnelle Hilfe zu so später Stunde
Wenn ich das einfüge, erhalte ich als Ausgabe nur
Funktion wird aufgerufen
NULL
EDIT
Hab es jetzt so gelöst, dass ich die SQL-Abfrage ebenfalls in eine eigene Funktion gesteckt und bei der aber noch
return $daten; eingesetzt habe.
Dann brauche ich in den einzelnen functions nur noch die SQL-Funktion aufrufen
Geändert von maxi89 (10.10.2007 um 22:28 Uhr)
Also hast du dem Array $daten wohl keine Werte zugewiesen, kann das sein?
EDIT
Ups, grad dein Edit gesehen. Wie hattest du ursprünglich die Daten ins Array eingelesen?
Auch mit einer "normalen" SQL-Abfrage, die war allerdings ja außerhalb der Function und da schien PHP nicht mehr drauf zurückgreifen zu können.
Das sind Grundlagen zum Gültigkeitsbereich von Variablen!
Eine Funktion hat einen eigenen Namensraum. Innerhalb der Funktion kannst Du also ein zweites Array mit dem gleichen Namen aufbauen, welches mit dem Array im globalen Bereich nicht kollidiert.
Wenn Du auf das globale Array $daten innerhalb einer Funktion zugreifen willst, dann musst Du der Funktion das Array irgendwie bekannt machen.
Dies funktioniert über das Schlüsselwort global.
Das ist aber unsauber, da es das Konzept von Funktionen kaputt macht und ad absurdum führt. Besser ist immer eine klar definierte Übergabe-Parameterliste.
z.B. so:
Das führt aber wiederum dazu, dass eine zweite Kopie des Arrays $daten angelegt wird und führt zu Speicherplatzverbrauch.PHP-Code:schulenzeigen($daten);
function schulenzeigen($meine_daten)
{
...
echo $meine_daten[$i]['schule_name'];
...
Noch eleganter ist es, wenn man der Funktion einen Zeiger auf den Speicherbereich des Arrays übergibt. Dann wird keine zweite Kopie des Arrays im Speicher abgelegt sondern direkt mit dem richtigen Bereich gearbeitet.
Der Aufruf sieht dann so aus:
PHP-Code:schulenzeigen(&$daten);
Danke für deinen Tipp, DSB!
Ich habe das Script jetzt etwas umgeschrieben mit dem Erfolg, dass ich wahrscheinlich in Zukunft (wenn die Datenbank voller ist) viel Rechenleistung dafür spare und alles sowieso viel übersichtlicher ist![]()
Hallo maxi89,
das freut mich wenn meine Erklärungen Dir weitergeholfen haben.![]()
<Offtopic>
Was ist denn der Unterschied zwischen einer Referenz und einem Zeiger?
</Offtopic>
...zur Zeit außer Betrieb...
Also ich verstehe das so, wie es in diesem Kommentar beschrieben ist: http://www.php.net/manual/de/languag...rent.php#58222
Deshalb macht für mich die Bezeichnung "Zeiger" im Sinne von "auf den gleichen Speicherort (und damit auf denselben Wert) im Arbeitsspeicher zeigend" Sinn. Wie man das Kind aber nun letztlich nennt ist mir wurscht - Hauptsache, ich kann es richtig anwenden.![]()
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)