+ Antworten
Ergebnis 1 bis 12 von 12

Thema: function wird nicht aufgerufen

  1. #1
    TP-Moderator maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User Avatar von maxi89
    Registriert seit
    Nov 2004
    Ort
    Mulpe an der Tunke
    Beiträge
    2.538

    function wird nicht aufgerufen

    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

    PHP-Code:
    function test()
    {
    echo 
    "Test";

    anlege und mit test(); aufrufe wird auch wie erwartet "Test" ausgegeben.
    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):

    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 
    "&nbsp;";
    echo 
    $daten[$i]['stadt'];
    echo 
    "</td></tr>\n";

    echo 
    "<tr><td height=\"40\"></td></tr>\n";
    }

    echo 
    "</table>";
    // FUNCTION SHOW -> Ende 
    Warum funktioniert die eine Testfunktion, die Funktion schulenzeigen mit gleichem Aufruf aber nicht?
    Sind wie gesagt meine ersten Gehversuche mit functions in PHP.


    Viele Grüße aus dem Tal
    Max

  2. #2
    TP-Specialist rewboss ist ein richtiges Arbeitstier - DANKE rewboss ist ein richtiges Arbeitstier - DANKE rewboss ist ein richtiges Arbeitstier - DANKE rewboss ist ein richtiges Arbeitstier - DANKE rewboss ist ein richtiges Arbeitstier - DANKE rewboss ist ein richtiges Arbeitstier - DANKE Avatar von rewboss
    Registriert seit
    Mar 2005
    Ort
    Unterfranken
    Beiträge
    2.639
    Füge zur Kontrolle diese Zeilen gleich nach function schulenzeigen(){ ein:

    PHP-Code:
    echo "Funktion wird aufgerufen.<br><br>\n<pre>";
    var_dump($daten);
    echo 
    "</pre>\n\n"
    (var_dump() zeigt den Inhalt des Arrays an.)

  3. #3
    TP-Moderator maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User Avatar von maxi89
    Registriert seit
    Nov 2004
    Ort
    Mulpe an der Tunke
    Beiträge
    2.538
    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)

  4. #4
    TP-Specialist rewboss ist ein richtiges Arbeitstier - DANKE rewboss ist ein richtiges Arbeitstier - DANKE rewboss ist ein richtiges Arbeitstier - DANKE rewboss ist ein richtiges Arbeitstier - DANKE rewboss ist ein richtiges Arbeitstier - DANKE rewboss ist ein richtiges Arbeitstier - DANKE Avatar von rewboss
    Registriert seit
    Mar 2005
    Ort
    Unterfranken
    Beiträge
    2.639
    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?

  5. #5
    TP-Moderator maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User Avatar von maxi89
    Registriert seit
    Nov 2004
    Ort
    Mulpe an der Tunke
    Beiträge
    2.538
    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.

  6. #6
    DSB
    DSB ist offline
    TP-Veteran DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE Avatar von DSB
    Registriert seit
    Mar 2005
    Ort
    Weyhe
    Beiträge
    1.137
    Zitat Zitat von maxi89 Beitrag anzeigen
    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:
    PHP-Code:
    schulenzeigen($daten);

    function 
    schulenzeigen($meine_daten)
    {
    ... 
    echo 
    $meine_daten[$i]['schule_name'];
    ... 
    Das führt aber wiederum dazu, dass eine zweite Kopie des Arrays $daten angelegt wird und führt zu Speicherplatzverbrauch.
    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); 
    Gruß, DSB
    Einfaches Backup/ Restore Deiner MySQl-Datenbank
    Zend Certified Engineer PHP5

  7. #7
    TP-Moderator maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User maxi89 lebt für das TP und seine User Avatar von maxi89
    Registriert seit
    Nov 2004
    Ort
    Mulpe an der Tunke
    Beiträge
    2.538
    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

  8. #8
    DSB
    DSB ist offline
    TP-Veteran DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE Avatar von DSB
    Registriert seit
    Mar 2005
    Ort
    Weyhe
    Beiträge
    1.137
    Hallo maxi89,

    das freut mich wenn meine Erklärungen Dir weitergeholfen haben.
    Gruß, DSB
    Einfaches Backup/ Restore Deiner MySQl-Datenbank
    Zend Certified Engineer PHP5

  9. #9
    Jil
    Jil ist offline
    TP-Junior Jil ist auf einem guten Weg
    Registriert seit
    Oct 2007
    Beiträge
    11
    Hallo,
    Zitat Zitat von DSB Beitrag anzeigen
    Noch eleganter ist es, wenn man der Funktion einen Zeiger auf den Speicherbereich des Arrays übergibt.
    Ganz kurz ohne zu meckern: PHP hat keine Zeiger, sondern nur Referenzen (Aliase). U.U. könnte es verwirrend sein, wenn Max eines Tages mehr über diese "Zeiger" erfahren möchte.

    Gruß

  10. #10
    TP-Senior Moritz macht sich hier sehr viel Mühe
    Registriert seit
    Nov 2002
    Beiträge
    289
    <Offtopic>
    Was ist denn der Unterschied zwischen einer Referenz und einem Zeiger?
    </Offtopic>
    ...zur Zeit außer Betrieb...

  11. #11
    Jil
    Jil ist offline
    TP-Junior Jil ist auf einem guten Weg
    Registriert seit
    Oct 2007
    Beiträge
    11

  12. #12
    DSB
    DSB ist offline
    TP-Veteran DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE Avatar von DSB
    Registriert seit
    Mar 2005
    Ort
    Weyhe
    Beiträge
    1.137
    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.
    Gruß, DSB
    Einfaches Backup/ Restore Deiner MySQl-Datenbank
    Zend Certified Engineer PHP5

+ Antworten

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

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 46 47 48 49 50 51