Funktion wird im zweiten Aufruf nicht ausgeführt

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Funktion wird im zweiten Aufruf nicht ausgeführt

    Hallo.

    Ich soll an einem bestehenden System einige Änderungen vornehmen. Im ersten Schritt möchte ich das System lokal lauffähig machen, um dann im zweiten Schritt die Änderungen vorzunehmen.

    Beim ersten Schritt hänge ich fest.

    Es handelt es sich um ein System, das per iframe eingebunden wird, also bspw. so:

    Code:
    <iframe src="localhost/api?token=d74f40186d6dc2c0492c9bc098"></iframe>
    Eingebunden wird ein Formular, in das man einige Daten eingeben kann, die dann bei einem Klick auf "Senden" gespeichert werden.

    Rufe ich die HTML-Seite mit dem iframe auf, wird das Formular korrekt angezeigt. Klicke ich aber auf "Senden", bekomme ich eine weisse Seite.

    Die api.php wird nach "Senden" aufgerufen und kommt bis zum Methoden-Aufruf einer eingebundenen Datenbank-Klasse.
    Beispiel:
    Code:
    . . .
    echo "hier1<br>";
    $data = $db->get_data($_SESSION['token']);
    echo "hier2<br>";
    ...
    Die Ausgabe von "hier1" kommt, aber "hier2" nicht mehr. Folglich hängt das Skript in get_data.

    get_data befindet sich in einer inkludierten Klasse. Lasse ich direkt am Anfang etwas ausgeben, wird dies nicht angezeigt. Die Methode wird also aufgerufen und hängt...oder wird eben nicht aufgerufen...wie man's nimmt.

    Code:
    function get_data($tokenid)
    {
       echo "bin in get_data";
       if (. . . .)
       . . . .
    }
    Was ich bisher ausprobiert/herausgefunden habe:

    get_data wird beim ersten Aufruf durch api.php korrekt ausgeführt. Es liegt also kein Syntax-Fehler o. ä. vor, der das Inkludieren verhindert.

    error_reporting ist E_ALL

    register_globals testweise eingeschaltet, brachte aber nichts

    Es sind keine Einträge in den Error-Logs.

    Rufe ich die api.php nicht über iframe auf, sondern tippe den Aufruf direkt in die Adresszeile ein, hängt das Skript nach dem Klick auf "Senden" genauso fest.

    Dass beim Absenden des Skripts eine andere api.php oder eine andere DB-Klasse genutzt wird, kann ich definitiv ausschließen. Auch dass die api.php oder die DB-Klasse nicht gefunden wird, kann ich ausschließen.

    Anstatt get_data lasse ich in der api.php vorher eine Test-Methode aufrufen, die lediglich ein echo besitzt. Auch diese Methode wird nach "Senden" nicht ausgeführt. Es liegt demnach nicht an get_data an sich.

    Tja, und nun weiß ich nicht weiter, denn ich habe keine Ahnung, wo ich noch suchen soll.

    Ich weiß, dass das relativ wenige Informationen sind, aber vielleicht hat ja jemand sowas schon mal erlebt und hat eine Idee...?

    Quellcode kann ich leider nicht liefern, da das System irrsinnig groß ist (allein in der api.php werden 10 Skripte inkludiert) und selbst wenn ich Quellcode entfernen würde, von dem ich meine, dass er nichts mit dem Fehler zu tun hat, wäre es immer noch viel zu groß und unübersichtlich, um es hier zu posten.

    cya
    Last edited by sallow2001; 12-04-2012, 14:57.

  • #2
    Wo und wie wird denn $db gesetzt?

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Comment


    • #3
      $db ist die DB-Instanz, die einige Zeilen vorher aufgerufen wird.

      Das funktioniert auch, sonst würde bereits beim ersten Aufruf des Skripts ein Fehler auftreten, denn einige Daten, die in dem Formular angezeigt werden, kommen aus der DB.

      cya

      Comment


      • #4
        Originally posted by sallow2001 View Post
        $db ist die DB-Instanz, die einige Zeilen vorher aufgerufen wird.
        Das habe ich angenommen, wollte zur Sicherheit noch mal nachfragen. Hier im Forum gab es schon die tollsten Sachen.

        Peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Comment


        • #5
          Aber interessant an Deiner Frage ist, dass der Aufruf $db = Mysql::getInstance(); in derselben Datei ist wie get_data()

          getInstance wird bei "Senden" ausgeführt, get_data nicht.

          cya

          Comment


          • #6
            So, ich denke, ich bin dem Fehler auf der Spur. Es liegt vermutlich an einer Abfrage in einer der diversen eingebundenen Dateien, die mir $db überschreibt, zerstört oder was auch immer.

            Warum ich mich aber noch einmal melde: Besonders gewundert hat es mich ja, dass trotz des von mir eingefügten error_reporting(E_ALL) (direkt vor dem besagten Methodenaufruf) keine einzige Fehlermeldung angezeigt wurde.

            Der Grund dafür ist dieser Code in einer der eingebundenen Dateien:
            Code:
            if ($GLOBALS['display_errors'])
            {
               ini_set("error_reporting", E_ALL);
            }
            else
            {
               ini_set("error_reporting", E_ALL ^ E_NOTICE);
            }
            Mein error_reporting(E_ALL) kommt nach diesem Aufruf und hat offensichtlich keine Auswirkungen mehr.
            ini_set wird also höher bewertet, als der Aufruf von error_reporting().

            Dies wusste ich nicht, weshalb ich auch nicht nach ini_set gesucht hatte und ich denke, dass dies dem einen oder anderen auch nicht bekannt war und als Info beim Debuggen helfen könnte.

            Jedenfalls bedanke ich mich für Eure Aufmerksamkeit und ich denke, dass ich mit eingeschaltetem error_reporting nun den Fehler finden werde.

            cya

            Comment

            Working...
            X