Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Bitte um Hilfe bei serialize & unserialize

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Bitte um Hilfe bei serialize & unserialize

    Hallo,

    ich übergebe ein Array in der URL wie folgt:

    PHP-Code:
    xyz.php?array="; $var= htmlentities(serialize($array)); echo $var
    nun möchte ich es auf der nächsten Seite wieder in ein Array wandeln, dies mache ich wie folgt:

    PHP-Code:
    $varunserialize($_GET['array']); 
    Nur ist mein Problem das es dann leer ist, warum? in $_GET['array'] ist auf jeden fall was drin, das habe ich getestet, es kommt also etwas an, aber warum mit meiner Variante nicht? Ist die so falsch? unserialize müsste doch den ganzen Datenwust wieder zurückverwandeln, oder?

    Hoffe auf Eure Hilfe
    ePole


  • #2
    Wie sieht denn deine URL aus?

    xyz.php?array=???
    ACHTUNG!!! SIGNATUR!!!
    PHP-Code:
    var_dump($gehirn); exit; 
    0 ??? WTF ? nervtag.de | freutag.net | friendmetr.com

    Kommentar


    • #3
      1. Ich glaube da gibt es eine Längenbegrenzung
      2. Wieso benutzt du nicht die Session?
      3. Was gibt den dein echo $var aus?
      "My software never has bugs, it just develops random features."
      "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

      Kommentar


      • #4
        sessions sind sicherlich einfacher und bestimmt die schönere variante, aber ich brauche die daten in der url. echo $var ist leer *kopfkratz*

        Kommentar


        • #5
          irgendwo habe ich etwas mal von rawurlencode() gelesen, was hat es denn damit aufsich?

          Kommentar


          • #6
            Hallo,

            suchst du eventuell PHP: http_build_query - Manual ?
            http://hallophp.de

            Kommentar


            • #7
              Zitat von MaiKaY Beitrag anzeigen
              Wie sieht denn deine URL aus?

              xyz.php?array=???
              so:

              PHP-Code:
              http://www.xyz.com/xyz.php?array=a%3A6%3A%7Bi%3A61%3Bs%3A35%3A%26quot%3BDatei_XYZ%26quot%3B%3Bi%3A60%3Bs%3A40%3A%26quot%3BDatei_XYZ%26quot%3B%3Bi%3A58%3Bs%3A50%3A%26quot%3BDatei_XYZ%26quot%3B%3Bi%3A57%3Bs%3A48%3A%26quot%3Datei_XYZ%26quot%3B%3Bi%3A56%3Bs%3A36%3A%26quot%3BDatei_XYZ%26quot%3B%3Bi%3A55%3Bs%3A34%3A%26quot%3BDatei_XYZ%26quot%3B%3B%7D&id=60 

              Kommentar


              • #8
                Zitat von ePole Beitrag anzeigen
                PHP-Code:
                xyz.php?array="; $var= htmlentities(serialize($array)); echo $var
                PHP-Code:
                $varunserialize($_GET['array']); 
                Hinweg: (1) serialisieren, (2) Umwandlung mit htmlentites()

                Rückweg: (1) deserialisieren


                Was fehlt?
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar


                • #9
                  Zitat von Asipak Beitrag anzeigen
                  Hallo,

                  suchst du eventuell PHP: http_build_query - Manual ?
                  Hmmm...versuche mich mal reinzulesen, wiess nicht genau.

                  Kommentar


                  • #10
                    Ich würde anstelle von htmlentitites() die Funktionen urlencode() und urldecode() benutzen. Der serialisierte String wird Leer- und andere Sonderzeichen enthalten die sonst in der URL relativ murks aussehen werden.

                    Wo ist $var denn leer? Wenn du es an die URL übergibst oder wenn du es ausliest? Edit: ok, beim auslesen.

                    Gewöhne dir an zum debuggen var_dump($var) zu benutzen. Denn $var wird, egal in welchem Fall, FALSE beinhalten was via echo nicht auszugeben ist, via var_dump() aber schon.

                    Überlegungen:

                    Wenn es beim zurückwandeln leer ist wird unserialize() mit einer sehr hohen Warscheinlichkeit false liefern weil die HTML Entities nicht zurück gewandelt wurden. Wenn du beim URL Aufbau urlencode() nimmst kannst du mit urldecode() die Sachen leicht wieder zurückwandeln.

                    Davon abgesehen das die   die HTML Entities erzeugt wegen dem & als Parametertrenner in der URL sicher auch nicht gut kommen....
                    "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                    Kommentar


                    • #11
                      Zitat von ePole Beitrag anzeigen
                      ich übergebe ein Array in der URL wie folgt:

                      PHP-Code:
                      xyz.php?array="; $var= htmlentities(serialize($array)); echo $var
                      Das ist Unfug.

                      Zunächst mal willst du die Daten in den Kontext URL bringen, also ist urlencode darauf anzuwenden.

                      Im nächsten Schritt willst du diese Adresse in den Kontext HTML bringen (bei der Ausgabe als Link), also wäre da theoretisch dann anschließend htmlspecialchars angesagt; da urlencode aber keine Zeichen „übrig lässt“, die in HTML eine Sonderbedeutung haben, kann dieser Schritt entfallen.

                      Kommentar


                      • #12
                        Habe es angewandt und bekomme eine Fehlermeldung:

                        urlencode() expects parameter 1 to be string, array given

                        Kommentar


                        • #13
                          Du weißt, dass ein unserialize() auf unvalidierte Benutzereingaben mitunter sehr gefährlich sein kann, oder? Das, was du da oben machst, ist aber ein PHP-Ausdruck, den man nur per eval() parsen kann und das ist noch gefährlicher.
                          Und noch einmal: warum benutzt du dafür keine Sessions?

                          Beitrag editiert:
                          […] Die Fehlermeldung sollte ja wohl eindeutig sein.
                          Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                          Kommentar


                          • #14
                            Zitat von ePole Beitrag anzeigen
                            Habe es angewandt und bekomme eine Fehlermeldung:

                            urlencode() expects parameter 1 to be string, array given
                            D'oh!

                            Auf das bereits serialisierte Array ist die Funktion natürlich anzuwenden.

                            Könnte man vielleicht auch selber drauf kommen, wenn man ein bisschen mitdenkt.

                            Kommentar


                            • #15
                              Zitat von Manko10 Beitrag anzeigen
                              Du weißt, dass ein unserialize() auf unvalidierte Benutzereingaben mitunter sehr gefährlich sein kann, oder? Das, was du da oben machst, ist aber ein PHP-Ausdruck, den man nur per eval() parsen kann und das ist noch gefährlicher.
                              Und noch einmal: warum benutzt du dafür keine Sessions?

                              Beitrag editiert:
                              […] Die Fehlermeldung sollte ja wohl eindeutig sein.
                              guter einwand, aber ich benutze deshalb keine session, weil sich der link den ich dort generiere aus einer schleife kommt. es kann also sein das mehrere sessions geschrieben werden müssen, und da weiss ich erst recht nicht ob das überhaupt geht.

                              Kommentar

                              Lädt...
                              X