Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Variablen(namen) in MySQL speichern und später interpretieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Variablen(namen) in MySQL speichern und später interpretieren

    Hallo!

    Ich möchte Fehlermeldungen, deren Text in der Datenbank gespeichert ist,
    ausgeben. Allerdings sollen diese Fehlermeldungen auch Variablen enthalten.

    Beispiel des Datenbankinhalts:
    Die Seite $query konnte nicht gefunden werden.

    Problem ist, die Variable wird nicht interpretiert.
    Wie kann ich das erreichen?

    Danke im Voraus!

    MfG,
    Chris


  • #2
    Wieso schreibst du den Inhalt der Variablen nicht gleich mit in die Datenbank?

    Ein Ansatz wäre, einen Platzhalter für die Variable zu definieren und diese dann bei der Ausgabe durch den Inhalt der Variablen mit PHP: str_replace - Manual oder PHP: preg_replace - Manual zu ersetzen.

    Code:
    $string = 'Die Seite {query} konnte nicht gefunden werden.';
    
    echo str_replace('{query}', $query, $string);
    http://hallophp.de

    Kommentar


    • #3
      Das Problem ist, es handelt sich nicht um eine einzige Meldung, die ausgegeben werden soll.
      Vielmehr werden die "Pfade" zu den benötigten Meldungen in einem Array gesammelt,
      durch folgende Funktion mit den echten Inhalten versehen und schließlich ausgegeben.

      PHP-Code:
      function notice_data($notice_source_array$l) {
          
      $notice_array = array();
          for (
      $i 0$i count($notice_source_array); $i++):
              
      $notice_source $notice_source_array[$i];
              
      $notice_source_elements explode('_'$notice_source);
              
      $notice_array[$i] = $l[$notice_source_elements[0]][$notice_source_elements[1]];
          endfor;
          return 
      $notice_array;

      Beispiel:
      Ein Element des Array $notice_source_array beinhaltet den Pfad 'path_0001'.
      Die Funktion zerlegt dies in 'path' und '0001', und weist die entsprechenden
      Datenbankinhalte (gespeichert in $l) zu. Bsp:
      $notice_array[4] = $l['path']['0001']

      $l['path']['0001'] ist nun "Die Seite $query konnte nicht gefunden werden."
      Wenn nun dieser String ausgegeben wird, möchte ich die Variable durch
      den Wert ersetzt haben, der ihr zuvor bereits zugewiesen wurde (was hier
      nicht erkenntlich ist, aber auf jeden Fall funktioniert).

      PS:
      Falls sich jemand fragt, warum ich das ganze überhaupt so umständlich mache
      und die Datenbankinhalte nicht direkt zuweise, wenn der Fehler auftaucht, folgende Erklärung:
      Die Ausgabesprache steht zum Zeitpunkt der Fehlermeldung "Seite nicht gefunden"
      noch nicht fest. Erst später wird sie ermittelt und das Array $l mit den Datenbankinhalten
      der jeweiligen Sprache gefüllt.

      Kommentar


      • #4
        Öh... was ist denn das für ein merkwürdiges Design?

        Also in
        Code:
        $l['path']['0001']
        befindet sich der String
        Code:
        Die Seite $query konnte nicht gefunden werden.
        , habe ich das richtig verstanden? Und was hindert dich jetzt noch gleich daran, die Variable direkt parsen zu lassen? Also:
        PHP-Code:
        $query 'foo';

        $error 'Die Seite ' $query ' konnte nicht gefunden werden.';
        // und ab ins Array damit 
        Und wo ist das Problem, wenn du auf den Template-Ansatz zurückgreifst? Mit preg_replace bist du ja nicht auf eine bestimmte Zeichenfolge, sondern lediglich auf ein definiertes Muster angewiesen, nach dem du den String parsen kannst.
        http://hallophp.de

        Kommentar


        • #5
          Dass es merkwürdig ist, gebe ich gern zu.

          Direkt parsen geht nicht, da der String in $l ja direkt aus der Datenbank kommt.
          Mit regular expressions habe ich mich zwar noch nicht wirklich beschäftigt,
          aber ich glaube nicht, dass sie mir helfen können, da es ja ganz unterschiedliche
          Fehlermeldungen sind, auch mal mit mehreren Variablen, die interpretiert werden
          sollen. Woher wüsste der Befehl, mit welchen Variablen er die gefundenen Treffer ersetzen soll?

          Ich suche eher nach einer Möglichkeit - evtl. auch in der Datenbank selbst -,
          die Variablen so zu schreiben, dass sie einfach als solche erkannt werden.
          Wenn das nicht möglich ist, wäre die Ausgabesprache der Fehlermeldungen
          immer die Standardsprache, was mich als Perfektionist ziemlich stören würde.

          ---
          Danke, der folgende Beitrag hat mir bei der Lösung des Problems geholfen.

          Kommentar


          • #6
            Schau' dir mal dieses Beispiel an:
            PHP-Code:
            $string 'Hallo {foo} Welt. {bar} Welt.';

            function 
            callback($matches) {
              
            $errors = array('foo' => 'Hallo''bar' => 'Guten Morgen',);

              if (
            array_key_exists($matches[1], $errors)) {
                return 
            $errors[$matches[1]];
              }
              else {
                return 
            '';
              }
            }

            echo 
            preg_replace_callback('/\{([^\}]+)\}/''callback'$string); 
            http://hallophp.de

            Kommentar

            Lädt...
            X