php function ausgabe an Variable übergeben.

  • Hallo Forum,

    vor einer weile habt ihr mir super bei dem Code geholfen, suchtext und dann entsprechend einfärben.

    Nun dachte ich, man könnte die ausgabe an eine variable übergeben und später egal wo, kann ich dann die variable einfügen.

    aber irgendwie passiert das nicht wie ich es gerne hätte, sicher denke ich da auch wieder völlig falsch.

    in der ausgabe php habe ich folgenden code.

    aktuell ist das so...

    Code
                echo "&nbsp;".$zeile_time."&nbsp;</td>";
                msg_color($pdo, $alert_tbl, $zeile_ric, $zeile_msg);
                echo "&nbsp;";
                ric_kennung($pdo, $ric_tbl, $zeile_ric);
                ric_zaehlen($pdo, $pocsag_tbl, $zeile_ric);          
                echo "&nbsp;</td>";
                msg_color($pdo, $alert_tbl, $zeile_ric, $zeile_msg);
                echo "&nbsp;".$zeile_msg."&nbsp;</td>";

    was natürlich eine höhere Auslastung darstellt.

    wo mache ich den fehler?

    danke

  • Wenn deine Funktion etwas zurückgeben soll, musst du das mit return machen, nicht echo.

    Echo schreibt nur etwas in die Standard-Ausgabe, welche, wenn du PHP auf einem Webserver benutzt, die Website ist.

    function msg_color
    PHP
    function msg_color($pdo, $alert_tbl, $zeile_msg) {
      $sql = 'SELECT * FROM ' . $alert_tbl . ' WHERE `id` > 0 ORDER BY prio';
      foreach ($pdo->query($sql) as $alert) {
        if (str_contains($zeile_msg, $alert['suchwort'])) {
          return "<td style='background-color: ".$alert['hinterfarbe']."; color: ".$alert['suchfarbe']."'>";
        }
      }
      return "<td>";
    }

    Edited once, last by bennetr (August 27, 2023 at 11:51 AM).

  • Ich finde das ja schon mal sehr undurchsichtig wo da <td>-Elemente angefangen und wo die dann wieder geschlossen werden. So etwas sollte man nicht auf mehrere Funktionen verteilen, das wird schnell unübersichtlich. Das gilt im Grunde schon für Webseiten die über ``echo`` zusammengesetzt werden, also wo Code und Darstellung so unübersichtlich vermischt sind. Dafür verwendet man eigentlich Template-Enginges, selbst in PHP.

    “For every complex problem, there is a solution that is simple, neat, and wrong.” — H. L. Mencken

  • Werde das gleich mal testen...ok dann muß ich alle function umbauen.

    blackjack

    aber in mein code ist das doch ein zusehen. ich möchte gerne anhand von "suchwort" die Tabellenzeile farblich gestallten. Nach dem das "Suchen und Finden" mehr oder weniger erfolgreich war, kommt in der ausgabe.php ja auch das Zeilenende Quellcode3

    Frage hierzu, wie würdest du es den umsetzten?

    danke Lars

  • ich habe es nun so gemacht. hyle  bennetr

    Code
                $zeile_time = $zeile['time'];
                $zeile_ric = $zeile['ric'];
                $zeile_msg = $zeile['msg'];
    
                $color = msg_color($pdo, $alert_tbl, $zeile_msg);
    
                echo $color."&nbsp;".$zeile_time."&nbsp;</td>";
                echo $color."&nbsp;"; ric_kennung($pdo, $ric_tbl, $zeile_ric); ric_zaehlen($pdo, $pocsag_tbl, $zeile_ric); echo "&nbsp;</td>";
                echo $color."&nbsp;".$zeile_msg."&nbsp;</td>";

    vielleicht hat das return geholfen.

    PS: hyle kannst du mir mal eine PN schicken, danke

  • Korrekt müsste deine Function so aussehen:

    function msg_color($pdo, $alert_tbl, $zeile_msg) {

    ...

    $suchcolor='xxxx'; // deine Farbe

    ...

    return ($suchcolor);

    }

    und in deinem Hauptprogramm steht dann der Aufruf

    ...

    $color=msg_color($pdo, $alert_tbl, $zeile_msg);

    und hier folgen dann deine <td> .. irgendwas</td>

    Teile von Tabellen in Functions auszulagern ist keine gute Idee, weil dies sehr unübersichtlich ist. In einem halben Jahr weisst du nicht mehr, was wo in der Software gemacht wird.

  • so funktioniert es

    Code
    list($ct, $cbg) = msg_color($pdo, $alert_tbl, $zeile_msg);

    gefunden bei https://stackoverflow.com/questions/3451…from-a-function

    danke

  • Für den Fall "!$found" würde ich sinnvolle Rückgabewerte einsetzen (z.b. -1,-1) . Dann kannst du die in deinem aufrufenden Programm abfragen und geeignet reagieren. Nur mit return ohne Werte passiert je nach PHP-Version etwas undefiniertes.

  • Weil seit PHP 7.4 regelmässig erhebliche Änderungen an PHP stattfanden und dann manche Dinge, wie z.B. null , nicht mehr akzeptiert werden, sondern in einer PHP-Fehlermeldung enden.

  • @malabarista2 Wo und warum wird das nicht mehr akzeptiert? Was soll man denn sonst nehmen? -1 ist sicher kein *sinnvoller* Rückgabewert für eine *Farbe*. Hat PHP kein brauchbares None, Nil, NULL, … wie die meisten anderen Programmiersprachen? Ich hätte gedacht genau das wäre NULL‽

    “For every complex problem, there is a solution that is simple, neat, and wrong.” — H. L. Mencken

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!