Andreas: function erweitern

Hallo,

habe durch Eure Hilfe schon eine funktionierende function gebastelt.

function kalkvorgang($sid)
{
  $kalkulationsdaten=mysql_query("SELECT * from calc_vorgang WHERE
sid='$sid'");
  $kalk_vorgang=mysql_fetch_array($kalkulationsdaten);
 return $kalk_vorgang;
}

$berechnung = kalkvorgang($sid);

echo $berechnung["von"];

klappt alles

So jetzt eine Neue Frage:

kann ich zu der oberen function, einen weiteren Select einbauen,
der abhängig ist vom ersten:
So könnte ich mir das vorstellen.

function kalkvorgang($sid)
{
//-- 1. SELECT --
  $kalkulationsdaten=mysql_query("SELECT * from calc_vorgang WHERE
sid='$sid'");
  $kalk_vorgang=mysql_fetch_array($kalkulationsdaten);

// aus dem Select die Variable $kalk_vorgang["von"] übergeben für den
nächsten SELECT

//-- 2. SELECT --
$set_von_medium = mysql_query("select vonmedium from calc_von_medien where
vid = '$kalk_vorgang["von"]");
 $kalk_con=mysql_fetch_array($set_von_medium);

//-- war ja für den ersten Vorgang --
 return $kalk_vorgang;

}
Wie kann ich denn jetzt die Werte vom 1 SELECT und 2 SELECT übergeben

für den ersten war mal
$berechnung = kalkvorgang($sid);
echo $berechnung["von"];

Danke

Andreas

  1. wieso schreibst du keine zweite funktion, der du beim aufruf den string uebergibst nach dem gefilter werden soll ...
    waere uebersichtlicher und besser wiederzuverwenden ...

    gruss jens

  2. Hallo Andreas,

    Hallo,

    habe durch Eure Hilfe schon eine funktionierende function gebastelt.

    prima

    So jetzt eine Neue Frage:

    function kalkvorgang($sid)
    {
    //-- 1. SELECT --
      $kalkulationsdaten=mysql_query("SELECT * from calc_vorgang WHERE
    sid='$sid'");
      $kalk_vorgang=mysql_fetch_array($kalkulationsdaten);
    // aus dem Select die Variable $kalk_vorgang["von"] übergeben für den
    nächsten SELECT
    //-- 2. SELECT --
    $set_von_medium = mysql_query("select vonmedium from calc_von_medien where
    vid = '$kalk_vorgang["von"]");
    $kalk_con=mysql_fetch_array($set_von_medium);

    //-- war ja für den ersten Vorgang --
    return $kalk_vorgang;

    Wenn ich's richtig verstanden habe, bist Du also in Wirklichkeit nur an den Daten aus der Tabelle calc_from_medien interessiert mit bestimmter vid, die von der sid in Tabelle calc_vorgang abhängt, interessiert.

    Möglicherweise willst Du das:

    SELECT vonmedium
    FROM calc_von_medien
    INNER JOIN calc_vorgang
    ON calc_von_medien.vid = calc_vorgang.vid
    WHERE sid = '$sid';

    Und dann brauchst Du nur eine Abfrage und keine Werte zu übergeben

    Hth,

    Vinzenz

    1. Hallo,

      Wenn ich's richtig verstanden habe, bist Du also in Wirklichkeit nur an den Daten aus der Tabelle calc_from_medien interessiert mit bestimmter vid, die von der sid in Tabelle calc_vorgang abhängt, interessiert.

      Nee, ich brauch von beiden die Werte.
      ich wollte alles in einer Function unterbringen da ich noch mehr SELECT habe.
      Dies dient für eine Berechnung.
      Einmal brauche ich die Einzel Werte von dem ersten SELECT dann brauche ich die Werte von den weiteren SELECT

      1. Hallo Andreas,

        Nee, ich brauch von beiden die Werte.

        Deine Funktion soll also zwei Arrays zurückgeben?

        ich wollte alles in einer Function unterbringen da ich noch mehr SELECT habe.

        Warum schreibst Du nicht für jede einzelne Aufgabe eine eigene Funktion? Es ist gar nicht schlecht, viele davon zu haben, die genau eine Aufgabe haben und die richtig machen.

        Einmal brauche ich die Einzel Werte von dem ersten SELECT dann brauche ich die Werte von den weiteren SELECT

        Wenn Du aber unbedingt zwei Arrays zurückgeben willst, dann solltest Du mindestens ein Array per Referenz übergeben:

        function kalkvorgang($sid, &$kalk_con)

        Der zweite Funktionsparameter ist eine Referenz. Änderungen innerhalb der Funktion gehen also nicht verloren, wenn die Funktion beendet wird.

        Gruss,

        Vinzenz

      2. Moin!

        Hallo,

        Wenn ich's richtig verstanden habe, bist Du also in Wirklichkeit nur an den Daten aus der Tabelle calc_from_medien interessiert mit bestimmter vid, die von der sid in Tabelle calc_vorgang abhängt, interessiert.

        Nee, ich brauch von beiden die Werte.
        ich wollte alles in einer Function unterbringen da ich noch mehr SELECT habe.
        Dies dient für eine Berechnung.
        Einmal brauche ich die Einzel Werte von dem ersten SELECT dann brauche ich die Werte von den weiteren SELECT

        Du kannst nur eine Variable aus einer Funktion zurückgeben. Diese Variable kann aber bei Bedarf ein Array sein, welches die von dir festgestellten Werte enthält:

        function test ()
        {
          // Rückgabewert zusammensetzen:
          $rueckgabe['wert1']=1;
          $rueckgabe['stringwert']='Ich bin ein String';
          // Wertarray zurückgeben (hier als Hash)
          return $rueckgabe;
        }

        $werte = test();
        echo $werte['wert1'];
        echo $werte['stringwert'];

        Siehe dazu: http://www.php.net/manual/de/functions.returning-values.php

        Wahlweise kannst du der Funktion auch Variablen übergeben, in die die Funktion einen Wert ablegt und zurückgibt:

        function test2 (&$rueck1);
        {
          // Der übergebenen Variable einen Rückgabewert zuweisen
          $rueck1 = 'Rückgabewert';
          // Den Rückgabewert für return zuweisen:
          $returnwert = 'andere Rückgabe';
          // Returnrückgabewert zurückgeben
          return $returnwert;
        }

        $funktionswert = test2($variable);
        echo $funktionswert; // Durch return zurückgegeben
        echo $variable;      // der angegebenen Variable zurückgegeben

        Es ist zwingend erforderlich, dass du im Bespiel eine Variable übergibst. Ein konstanter Wert ist verboten und führt zu einem Fehler.

        Siehe dazu: http://www.php.net/manual/de/functions.arguments.php -> "Verweise als Parameter übergeben".

        Bei den zwei Beispielen sind Parameter, die der Funktion ggf. übergeben werden sollen, weggelassen.

        - Sven Rautenberg

        --
        Diese Signatur gilt nur am Freitag.