Funktion wird nicht gefunden?
beda
- php
0 Dieter Raber0 beda
0 David
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
Hallo beda,
Wie waer's mit etwas aussagefaehigen Quelltext unter Einbeziehung der Funktion browse()?
Gruß,
Dieter
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ä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ültig!
';
break; # Wenn array nicht mehr im array, for-schleife abbrechen
}
echo $text[$i];
if($i == count($text)-1)
{
break; # Wenn $i größ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ück' : '<a href="'.basename($_SERVER['PHP_SELF']).'?t='.($t-$prosite).'&n='.($n-$prosite).'">Zurück</a>';
return $zurueck.' '.$weiter; # Ausgabe
}
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
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
Hallo beda,
error_reporting(2047) == error_reporting(E_ALL);
Gruß,
Dieter
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
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.
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.
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:
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
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