kostenloser Webspace werbefrei: lima-city


'Datenbankarray' einlesen o. string in ausführbaren Code

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    robbmaster

    Kostenloser Webspace von robbmaster

    robbmaster hat kostenlosen Webspace.

    Hallo. :)
    Ich hatte eine Idee im Kopf, die mich ziemlich interessiert. Soweit ich weiß, funktioniert sie so nicht, trotzdem frag ich mal, dass sie einiges vereinfachen würde. Ich habe rund 14 Werte. Diese möchte ich jedoch nicht einzeln in je 1 Spalte in der MySQL-Db speichern, sondern hatte mir überlegt, sie als Teil eines array zu speichern. Also das hier in eine Spalte des Types varchar oder text:

    array(0,1,3...);

    Wenn ich jetzt eine Variable damit fülle, würde dieses als string eingelesen werden. Gibt es eine Möglichkeit, einen String in ausführbaren PHP Code zu wandeln?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ja:
    $array = eval('return ' . $arrayCode . ';');

    Aber pass auf! eval führt jeden x-beliebigen PHP-Code aus. Wenn dein Array unsichere Usereingaben enthält und da Plötzlich nicht mehr $arrayCode = 'array(1)' steht, sondern $arrayCode = 'exec("rm -rf /")', dann ist schnell die Platte weg. Daher, sei dir wirklich sicher, dass man nicht irgendwie bösartigen Code einschleusen kann, bevor du eval benutzt. Wenn du das nicht sicherstellen kannst, dann frag nochmal, dann gebe ich dir eine Variante, die das Array vorher validiert ;)

    Beitrag zuletzt geändert: 21.7.2010 19:31:53 von nikic
  4. vampiresilence

    Kostenloser Webspace von vampiresilence

    vampiresilence hat kostenlosen Webspace.

    Ich denke das geht einfacher, wenn du das Array in der Form (1,2,3,4,..) speicherst und dann per explode(',', $string) wieder in das Array zurückschreibst. Du musst nur darauf achten sonstig vorhandene "," vorher entsprechend zu escapen.

    Geht auch nen bisschen schneller als eval(). ;)

    Liebe Grüße
    - VampireSilence

    Beitrag zuletzt geändert: 21.7.2010 19:35:30 von vampiresilence
  5. Als Ergänzung: Um die Werte, wenn sie in einem Array vorliegen, in einem String zu speichern, ist zuvor der gegenteilige Befehl von explode(), nämlich implode() nötig. Um das Escapen von Kommata zu vermeiden, kannst Du zur Begrenzung der einzelnen Werte dabei ein Zeichen angeben, was sicher nicht in den Werten vorkommt. Es geht, wenn ich mich korrekt erinnere, auch eine Zeichenfolge als Delimiter.

    Beispiel:

    $zusammenfassung = implode("©", $dein_array);

    Um die Zeichenkette $zusammenfassung dann wieder in ein Array zu überführen, hieße der analoge Befehl:

    $dein_array = explode("©", $zusammenfassung);
  6. Autor dieses Themas

    robbmaster

    Kostenloser Webspace von robbmaster

    robbmaster hat kostenlosen Webspace.

    Wenn du das nicht sicherstellen kannst, dann frag nochmal, dann gebe ich dir eine Variante, die das Array vorher validiert ;)

    Ah okay. Dann muss ich den String ja wirklich vollständig auf böswillige Benutzereingaben parsen. :) Scheint mir trotzdem gefährlich. Was war denn dein anderer Vorschlag?



    althaus schrieb:
    Als Ergänzung: Um die Werte, wenn sie in einem Array vorliegen, in einem String zu speichern, ist zuvor der gegenteilige Befehl von explode(), nämlich implode() nötig. Um das Escapen von Kommata zu vermeiden, kannst Du zur Begrenzung der einzelnen Werte dabei ein Zeichen angeben, was sicher nicht in den Werten vorkommt. Es geht, wenn ich mich korrekt erinnere, auch eine Zeichenfolge als Delimiter.

    Beispiel:

    $zusammenfassung = implode("©", $dein_array);

    Um die Zeichenkette $zusammenfassung dann wieder in ein Array zu überführen, hieße der analoge Befehl:

    $dein_array = explode("©", $zusammenfassung);


    Du meinst, sie einfach als String mit dem Trennzeichen zu speichern, und dann später wieder in ein Array zu splitten?
  7. robbmaster schrieb:
    Du meinst, sie einfach als String mit dem Trennzeichen zu speichern, und dann später wieder in ein Array zu splitten?

    Ja, das ist hier die deutlich einfachere Variante. Mit eval würde ich nur arbeiten, wenn du wirklich mehrdimensionale Arrays hast.

    Wenn du sicher bist ,dass du ein Array nutzen willst: http://stackoverflow.com/questions/3267951/simulate-php-array-language-construct-or-parse-with-regexp. Meine Antwort ist für den allgemeinen Fall, wenn das Array auch assoziativ sein kann, Gordons Antwort ist nur für nicht-assoziative Arrays. Musst sehen, was du hast.
  8. Autor dieses Themas

    robbmaster

    Kostenloser Webspace von robbmaster

    robbmaster hat kostenlosen Webspace.

    nikic schrieb:
    robbmaster schrieb:
    Du meinst, sie einfach als String mit dem Trennzeichen zu speichern, und dann später wieder in ein Array zu splitten?

    Ja, das ist hier die deutlich einfachere Variante. Mit eval würde ich nur arbeiten, wenn du wirklich mehrdimensionale Arrays hast.

    Wenn du sicher bist ,dass du ein Array nutzen willst: http://stackoverflow.com/questions/3267951/simulate-php-array-language-construct-or-parse-with-regexp. Meine Antwort ist für den allgemeinen Fall, wenn das Array auch assoziativ sein kann, Gordons Antwort ist nur für nicht-assoziative Arrays. Musst sehen, was du hast.


    Ah danke. Da ich aus Entwicklungsgründen nur mit assoziativen Arrays arbeite, ist deins das was ich brauchte. :) Danke.
  9. Also..
    wenn du ein Array hast, dann kannst du dieses mit serialize() in einen string umwandeln..
    Diesen String kannst du bequem in deiner Datenbank speichern..

    Mit unserialize kannst du den Spaß dann wieder umformen.
    Alle anderen Vorschläge hier sind (tschuldigung ;) ) Müll ^^
    Vorallem nikic sollte für seinen eval Vorschlag gesteinigt werden :D
  10. Vorallem nikic sollte für seinen eval Vorschlag gesteinigt werden :D

    *duck*

    Aber du hast Recht, das bringts wirklich nicht, wenn man selbst Kontrolle über das Format der Speicherung hat.
  11. Es ist doch herrlich, immer mal wieder Funktionen in PHP kennenzulernen, die man bislang nie oder spartanisch genutzt hat.
  12. Das ist doch das schöne an PHP, da gibt es immer etwas neues. Ich hab zum Beispiel vor kurzem herausgefunden, dass break ein Argument akzeptiert:
    while(true) {
        while(true) {
            break 2; // breakt beide while Schleifen.
        }
    }
  13. Autor dieses Themas

    robbmaster

    Kostenloser Webspace von robbmaster

    robbmaster hat kostenlosen Webspace.

    Passt prima zum Thema. :'D
    Continue soweit ich weiß doch auch. :)

    @ravenc: Das war es. Ich kannte die Funktion, im Alltag vergisst man das dann doch mal gerne. :)
  14. Naja, ich finde es nicht schlimm, daß hier auch über das Urthema hinausgehend mal eine Bemerkung zu einem anderen Befehl abgegeben wird. Wer weiß, wobei es uns, inkl. dem Themenurheber, in Zukunft mal helfen wird.

    So, jetzt schweige ich dann auch...

    Beitrag zuletzt geändert: 24.7.2010 14:26:44 von althaus
  15. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!