beda: Funktion wird nicht gefunden?

hallo!

ich habe ziemlich am anfang meines php scripts eine reihe von funktionen definiert u.a. auch eine die browse() heißt. diese wird jedoch als einzige ziemlich am ende aufgerufen:

<?php

echo browse($file);

?>

an sich ist ja nichts verkehrt daran. php meldet aber:
"Fatal error: Call to undefined function browse()"

weiß jemand von euch, was da falsch sein kann?

lg
beda

  1. Hallo beda,

    Wie waer's mit etwas aussagefaehigen Quelltext unter Einbeziehung der Funktion browse()?

    Gruß,

    Dieter

    1. hallo!

      Wie waer's mit etwas aussagefaehigen Quelltext unter Einbeziehung der Funktion browse()?

      sorry. - hier die funktion browse() - eine blätterfunktion für ein gästebuch, die ich nach einem tutorial im internet gebaut habe. (da ich zwar das gb selbst schreiben konnte, aber mir für so eine fkt. noch die logik fehlt)

      function browse ($text, $prosite) #Funktion zum durchbl&auml;ttern
      {
        $t = !isset($_GET['t']) ? count($text)-(count($text)-$prosite) : $_GET['t'];
          $n = !isset($_GET['n']) ? $prosite : $_GET['n'];

      for($i = $t; $i < $t; $i++)
        {
          if(!in_array($text[$i], $text))
          {
            echo '
              Seitenzahl ung&uuml;ltig!
            ';
            break; # Wenn array nicht mehr im array, for-schleife abbrechen
          }
          echo $text[$i];

      if($i == count($text)-1)
          {
            break; # Wenn $i gr&ouml;&szlig;er als das Array ist, wird for-schleife abgebrochen
          }
        }

      $weiter = ($t > (count($text)-$prosite) && $n > count($text)) ? 'Weiter' : '<a href="'.basename($_SERVER['PHP_SELF']).'?t='.($t+$prosite).'&n='.($t+($prosite*2)).'">Weiter</a>';
          $zurueck = ($t < $prosite && $n < $prosite*2) ? 'Zur&uuml;ck' : '<a href="'.basename($_SERVER['PHP_SELF']).'?t='.($t-$prosite).'&n='.($n-$prosite).'">Zur&uuml;ck</a>';

      return $zurueck.' '.$weiter; # Ausgabe
      }

      1. Hallo beda,

        Und das alles steht in ein und derselben Datei, also sowohl die Funktion, als auch ihr Aufruf? Wenn dem so ist, rufe die Funktion mal alle paar Zeilen auf, um zu sehen, was da passiert. Ach ja, und error_reporting(2047) muss natuerlich auch sein.

        Gruß,

        Dieter

        1. hallo!

          Und das alles steht in ein und derselben Datei, also sowohl die Funktion, als auch ihr Aufruf? Wenn dem so ist, rufe die Funktion mal alle paar Zeilen auf, um zu sehen, was da passiert.

          gut. werde ich machen

          »»Ach ja, und error_reporting(2047) muss natuerlich auch sein.

          bis jetzt hatte ich error_reporting(E_ALL);

          lg
          beda

          1. Hallo beda,

            error_reporting(2047) == error_reporting(E_ALL);

            Gruß,

            Dieter

          2. hallo!

            mir hats anscheinend noch an den grundlagen ein bisschen gefehlt, da ich  nicht wusste, dass eine funktion nur in ihrem zweig ihre gültigkeit hat. habe sie nämlich in einer if {} definiert und wollte sie in der else{} aufrufen... *schäm*.

            ein kleines problem gibts aber noch. php meint nun, dass das 2te argument in der funktion fehlt obwohl $prosite kurz weiter oben davor definiert ist als $prosite = 10;

            function($string, $prosite) {}

            lg
            peda

            1. Moin!

              mir hats anscheinend noch an den grundlagen ein bisschen gefehlt, da ich  nicht wusste, dass eine funktion nur in ihrem zweig ihre gültigkeit hat. habe sie nämlich in einer if {} definiert und wollte sie in der else{} aufrufen... *schäm*.

              Sowas macht man ja auch nicht. Funktionsdefinitionen gehören immer an den Anfang des Skriptes. Da gelangen sie z.B. nicht unabsichtlich in Schleifen hinein - PHP mag es nämlich auch nicht, wenn man eine Funktion doppelt definieren will.

              ein kleines problem gibts aber noch. php meint nun, dass das 2te argument in der funktion fehlt obwohl $prosite kurz weiter oben davor definiert ist als $prosite = 10;

              function($string, $prosite) {}

              Was soll dieses Codezitat sein? Gültiges PHP scheint das jedenfalls nicht zu sein, da fehlt mindestens schon mal der Funktionsname. Und zur Beurteilung, ob die Funktion gültig aufgerufen wurde, brauchen wir natürlich auch den Aufruf der Funktion.

              Ach ja: Wenns geht, bitte immer Copy&Paste, dann gehen deine Tippfehler nicht zwischendurch verloren oder kommen neu hinzu.

              • Sven Rautenberg
            2. Hi beda,

              ein kleines problem gibts aber noch. php meint nun, dass das 2te argument in der funktion fehlt obwohl $prosite kurz weiter oben davor definiert ist als $prosite = 10;

              function($string, $prosite) {}

              Du musst es aber auch als Parameter der Funktion übergeben!

              z.B. so: echo browse($foobar, $prosite);

              Lies dir vielleicht auch mal noch http://tut.php-q.net/functions.html durch, da dir die Grundlagen zu fehlen scheinen.

              So müssen die Variablen die du der Funktion übergibst nicht so heißen, wie sie in der Funktion definiert sind. Kleines Beispiel:

                
              function sage_hallo($anrede, $name)  
              {  
                echo "Hallo " . $anrede . " " . $name . "\n";  
              }  
                
              $titel = "Doktor";  
              $ganzer_name = "Thomas Müller";  
                
              sage_hallo($titel, $ganzer_name);  
                
              //Ausgabe:  
              //Hallo Doktor Thomas Müller  
              
              

              MfG, Dennis.

              --
              Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:| [decode]
              Antworten per E-Mail gibts hier nicht!
            3. Hello,

              mir hats anscheinend noch an den grundlagen ein bisschen gefehlt, da ich  nicht wusste, dass eine funktion nur in ihrem zweig ihre gültigkeit hat. habe sie nämlich in einer if {} definiert und wollte sie in der else{} aufrufen... *schäm*.

              PHP kennt in der "normalen" Programmierweise keine Namensraumabgrenzung für Funktionen. Funktionen werden immer auf der obersten Ebene deklariert und implementiert und stehen dann dem gesamten Script zur Verfügung. Private Funktionen (Unterfunktionen) gibt es nicht.

              Es gibt aber sehr wohl die Möglichkeit der bedingten Deklaration. Die ist aber mMn nur in zwei bis drei Fällen sinnvoll:

              • um Versionsbrücken zu bauen
              • um Kompilationsdefizite auszugleichen (z.B. die Funktion mime_content_type() )
              • um unterschiedliches Verhalten für unterschiedliche Eingangsbedingungen zu steuern.

              Da Funktionen leider nicht wieder "desdeklariert" (entladen) werden können, so wie dies mit Variablen möglich ist, bietet sich für variante Verhaltensweisen eher
              http://selfhtml.bitworks.de/artikel_datenstrukturen/function_reference.php.txt an.

              Alternativ kann man die OOP-Variante von PHP benutzen, die mMn aber sehr viel mehr Power kostet, als gut geplante klassisch programmierte Scripte.

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
  2. hallo!

    Moinsen

    weiß jemand von euch, was da falsch sein kann?

    Klar, die Funktion gibt es nicht. Vielleicht falsch geschrieben? Wenn du mehr wissen willst, müssten wir mehr von deinem Code sehen...

    Viele Grüße
    David