Markus: Funktion liefert nichts zurück

Hi,

ich hab folgenden Code:

<?php
$eng = $_GET["engine"];
$engines = array(
   "google" => "http://www.google.de/search?hl=de&q=$q&lr=lang_de",
   "msn" => "http://search.msn.de/results.aspx?q=$q&mkt=de-DE&lf=1",
   "yahoo" => "http://de.search.yahoo.com/search?p=$q&meta=vl%3D",
   "webde" => "http://suche.web.de/search/web/?su=$q&su1=$q&webRb=de");

function angeklickt($engine_name)
{
return $engines[$engine_name];
}
?>

Wenn ich dann die Funktion so aufrufe:
<?php die (angeklickt($eng));  ?>
wird nichts ausgegeben. Wenn ich anstatt $eng zb. "msn" schreibe funktioniert es auch nicht.

Wenn ich allerdings einfach
 <?php die ($engines[$eng]);  ?>
schreibe gibt er mit die URL aus.

Wo liegt da das Problem ?

  1. hi,

    function angeklickt($engine_name)
    {
    return $engines[$engine_name];
    }

    In dieser Funktion ist überhaupt keine Variable $engines definiert.

    Stelle dein error_reporting auf E_ALL, damit PHP dir solche Fehler gleich selbst mitteilt, und beschäftige dich mit dem Geltungsbereich von Variablen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hallo

    <?php
    $eng = $_GET["engine"];
    $engines = array(
       "google" => "http://www.google.de/search?hl=de&q=$q&lr=lang_de",
       "msn" => "http://search.msn.de/results.aspx?q=$q&mkt=de-DE&lf=1",
       "yahoo" => "http://de.search.yahoo.com/search?p=$q&meta=vl%3D",
       "webde" => "http://suche.web.de/search/web/?su=$q&su1=$q&webRb=de");

    function angeklickt($engine_name)
    {
    return $engines[$engine_name];
    }
    ?>

    Wenn ich dann die Funktion so aufrufe:
    <?php die (angeklickt($eng));  ?>
    wird nichts ausgegeben. Wenn ich anstatt $eng zb. "msn" schreibe funktioniert es auch nicht.

    Wenn ich allerdings einfach
    <?php die ($engines[$eng]);  ?>
    schreibe gibt er mit die URL aus.

    Wenn du die (angeklickt($eng)); ausführst, fehlt der Funktion die Kenntnis vom Array $engines. Eine funktion hat einen eigenen Namensraum. Das heißt, dass es eine Variable, z.B. $name sowohl außerhalb als auch innerhalb der Funktion geben könnte, ohne dass diese in Konflikt mit einander geraten. Willst du eine Variable von außerhalb in der Funktion verwenden, musst du diese der Funktion bekannt geben.

    Entweder du bindest sie per global $engines; in die Funktion ein, oder du übergibst sie der Funktion als Parameter (angeklickt($engines,$eng)). In diesem Fall würde ich es per global machen.

    Tschö, Auge

    --
    Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
    (Victor Hugo)
    Veranstaltungsdatenbank Vdb 0.1
    1. Wenn du die (angeklickt($eng)); ausführst, fehlt der Funktion die Kenntnis vom Array $engines. Eine funktion hat einen eigenen Namensraum. Das heißt, dass es eine Variable, z.B. $name sowohl außerhalb als auch innerhalb der Funktion geben könnte, ohne dass diese in Konflikt mit einander geraten. Willst du eine Variable von außerhalb in der Funktion verwenden, musst du diese der Funktion bekannt geben.

      Entweder du bindest sie per global $engines; in die Funktion ein, oder du übergibst sie der Funktion als Parameter (angeklickt($engines,$eng)). In diesem Fall würde ich es per global machen.

      Tschö, Auge

      Danke!
      ich hab in PHP noch nie wirklich mit Funktionen gearbeitet und wusste es deswegen nicht.