Uhfe: Array an neues Script weiterreichen...

Hallo,

ich möchte von einer Seite ein Array an eine neue Seite weiterreichen.
Bei einfachen Variablen kein Thema mit <input type='hidden'...
Leider scheint das mit Arrays nicht zu funktionieren.

Wie kann ich ein -großes- Array weitergeben. Bin dankbar für Tips.

Uhfe

  1. Hi Uhfe,

    Bei einfachen Variablen kein Thema mit <input type='hidden'...

    Dir ist aber schon bewusst, dass man das ganz einfach manipulieren kann?

    Leider scheint das mit Arrays nicht zu funktionieren.

    Serializiere das Array und schreibe den String in das Feld. Beim Einlesen musst du das dann wieder unserializieren.

    MfG, Dennis.

    1. Hai Dennis,

      erstmal danke für den Tip!
      Die Zeichenkette, die per URL weitergegeben wird ist aber von der Länge her begrenzt, hab ich das recht im Sinn.

      Mein Array umfasst 50 Zeilen a 14 Werte. Insofern wird der String schon sehr lange.

      naja ich probiers einfach mal.

      Gruß

      Uhfe

      1. Hallo,

        Du könntest das Array auch in einer Session speichern, wenn ich mich nicht total irre ($_SESSION['deinFeldinderSession'] = $deinFeld;

        und dann im anderen Script wieder rauslösen:
        $meinFeld = $_SESSION['deinFeldinderSession'];

        Mein Array umfasst 50 Zeilen a 14 Werte. Insofern wird der String schon sehr lange.

        Mit freundlichem Gruß
        Micha

        1. Hello,

          Du könntest das Array auch in einer Session speichern, wenn ich mich nicht total irre ($_SESSION['deinFeldinderSession'] = $deinFeld;

          Der Vorteil der Methode mit dem tatsächlich weitergereichten Array ist, dass das auch zwischen verschiedenen Domains geht. das kann man mit Sessions i.d.R. nicht erreichen.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Hallo Tom,

            Ich wusste nicht, dass er es an eine andere Domain weitergeben wollte. Aber danke für die Info...

            Mit freundlichem Gruß
            Micha

            1. Hello,

              Ich wusste nicht, dass er es an eine andere Domain weitergeben wollte. Aber danke für die Info...

              Das hat Uhfe auch nicht gesagt, aber das ist der Vorteil eines codierten serialisierten Arrays gegenüber einer Session-ID, mit der die andere Domain dann nichts anfangen könnte.

              Ich gebe Buchungsdaten für Hotelzimmer so weiter. Die werden natürlich noch mit einem reversiblen Algorithmus verschlüsselt, bevor sie codiert werden. Dadurch kann jedes System (mit PHP) für sich so arbeiten, wie es will, die ausgepackten Arrays sind aber überall lesbar. Wer den Schlüssel für encrypt/decrypt nicht hat, darf nicht mitspielen.

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. Hi Tom,

                Wer den Schlüssel für encrypt/decrypt nicht hat, darf nicht mitspielen.

                Und wie übergibst du den? Oder ist der etwa immer der Gleiche?

                MfG, Dennis.

                --
                Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
                Schon gewusst, dass Bugs und Feature Vorschläge für das CForum ins Entwicklerforum oder in den BugTracker gehören und nicht hier her?
                1. Hello,

                  Wer den Schlüssel für encrypt/decrypt nicht hat, darf nicht mitspielen.

                  Und wie übergibst du den? Oder ist der etwa immer der Gleiche?

                  Warum sollte das denn nicht immer derselbe sein?
                  Wenn er lang genug ist, ist das doch nicht weiter wild.
                  Außerdem ist es ein proprietäres System, in dem man zusätzlich noch weitere Regeln hat.

                  Harzliche Grüße aus http://www.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                  1. Hi Tom,

                    Warum sollte das denn nicht immer derselbe sein?
                    Wenn er lang genug ist, ist das doch nicht weiter wild.

                    Ok - trotzdem sollte man ihn vielleicht von Zeit zu Zeit ändern ;-)

                    Alternativ könnte man vielleicht auch noch eine MySQL Tabelle eintragen, in der man den Schlüssel (zufällig erzeugt) speichert mit einem Timestamp oder einer ID und diese(n) dann ebenfalls übermittelt.

                    MfG, Dennis.

                    1. Hello,

                      Ok - trotzdem sollte man ihn vielleicht von Zeit zu Zeit ändern ;-)

                      Man kann da eine ganze Menge machen. Je proprietärer, desto sicherer, insbesondere solange man nicht drüber spricht.

                      Es gibt das Konzept der TANs, das Konzept der zeitgesteuerten Decodierung, das Konzept mit innerem und äußerem Schlüssel (einer beeinflusst dann den anderen nochnmals) usw.

                      Man kann das soweit treiben, bis man nach einer Systemstörung selber nicht mehr an die Daten kommt ;-))

                      Harzliche Grüße aus http://www.annerschbarrich.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau
                      1. Hi Tom,

                        Man kann das soweit treiben, bis man nach einer Systemstörung selber nicht mehr an die Daten kommt ;-))

                        Ich habe einen Bekannten, der setzt alle paar Monate seinen PC neu auf - allerdings aus anderen Gründen, da beschwert sich Windoofs plötzlich über irgendwelche fehlenden Systemdateien :-)

                        MfG, Dennis.

                        --
                        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
                        Das Leben ist kein Warenhaus - es nimmt nichts zurück. (Anette Louisan)
              2. Hallo Tom,

                Hätte ich vll auch mal vorher Fragen sollen. Hatte zumindest auch das Problem ein Feld via URl zu übergeben, als ich ein Bild mit PHP erzeugen wollte/will. Habe es dann - weil bei/durch google so gefunden - mit einer Session gelöst bekommen. http://www.derletztekick.com/LEPHP/index.php

                Ob das nun letztlich die eleganteste Lösung ist, kann ich nicht beurteilen, da dazu mein Wissen einfach zu wenig hergibt - eine mögliche und auch praktikable Lösung scheint es aber zu sein...

                Mit freundlichem Gruß
                Micha

      2. Hi Uhfe,

        Die Zeichenkette, die per URL weitergegeben wird ist aber von der Länge her begrenzt, hab ich das recht im Sinn.

        Einfach Post verwenden?

        MfG, Dennis.

        1. Ähhh sorry ich nochmal ;-),

          also ich habe die Daten serialized() und mit POST auch an das folgende Script weitergegeben.

          Aber wie unserialize() ich das jetzt vernünftig?

          $excel = unserialize($ser);???

          Wobei $ser das serialisierte Array $excel[][]der Vorgängerseite war und auch einen Rattenschwanz an String ist.

          Thx

          uhfe

          1. Hello,

            $_excel = unserialize($_POST['ser']);

            und nicht das codieren/decodieren vergessen, sonst gibts garantiert ulkige Ergebnisse oder Verhaltensweisen vom Browser.

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. UUps,

              du warst schneller. Kannst du mir das kurz erläutern??

              $_excel = unserialize($_POST['ser']);

              Thx

              Uhfe

    2. Hello,

      Serializiere das Array und schreibe den String in das Feld. Beim Einlesen musst du das dann wieder unserializieren.

      Das genügt nicht. Es könnten nach dem serialize() immer noch HTML-eigene Zeichen bzw. für HTML verbotene Zeichen vorhanden sein. Das serialisierte Array muss also noch codiert werden. Da bietet sich base64encode() an. Und wenn wir schon von Manipulation reden, könnte man den Stream dann auch noch proprietär crypten, nachdem man einen Checkwert eingebaut hat. Da manipuliert niemand mehr was, mit Ausnahme des NSA und den anderen Geheimdienstfuzzies.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Hallo,

        will ja nicht undankbar erscheinen. Aber so wirklich weitergebracht hat mich dein Posting nicht.

        Die Daten sind alle serialized() im neuen Script. Auch vollständig. Aber wenn ich jetzt unserialize() mache erhalte ich eine leere Variable.

        $excel = unserialize($ser);

        -> $excel = ""!!!!

        Woran kann das liegen?

        Thx

        Uhfe

        1. Hi Uhfe,

          Woran kann das liegen?

          Wie prüfst du, ob $excel leer ist? Hast du dir das schon mal per print_r() ausgeben lassen? Da die der String $ser von außen kommst solltest du $_POST['ser'] bzw. $_GET['ser'] verwenden!

            
          echo "<pre>";  
          echo $_POST['ser'];  
          $var = unserialize($_POST['ser']);  
          echo "\n";  
          print_r($var);  
          echo "</pre>";  
          
          

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
          That's life - Es gibt im Leben[tm] keine Zurück-Taste. (Fabian Transchel)
          1. Hallo Dennis,

            also:

            echo $_POST['ser'];
            $excel = unserialize($_POST['ser']);
            print_r($excel);

            Druckt einen ewig langen String an, der auch alle Daten enthält, die drinne stehen sollen.

            $excel ist de Facto eine leere Variable. Habe sie sowohl mit echo als auch mit print_r() versucht auszugeben.

            Vor allem ist Sie kein Array wie vor dem serialisieren.

            Gruß

            Uhfe

            echo "<pre>";
            echo $_POST['ser'];
            $var = unserialize($_POST['ser']);
            echo "\n";
            print_r($var);
            echo "</pre>";

            
            >   
            >   
            > MfG, Dennis.
            
          2. Nochmal Hallo,

            ich habe mal in dem Ursprungsscript ein kleines Testarray erzeug:

            $var = array("1"=>"Test");
            $ser1 = serialize($var);
            //$ser = serialize($excel);
            echo "<input type='hidden' name='ser' value='".$ser1."'>";

            ->hiermit wird ein zweites PHP-Script geöffnet ("method=POST")

            echo $_POST['ser'];
            $excel = unserialize($_POST['ser']);
            print_r($excel);

            Ich erhalte folgende Ausgabe im Browser:

            a:1:{i:1;s:4:"Test";}

            Aber $excel ist und bleibt leer.

            Schnief

            Uhfe

            1. Hi Uhfe,

              Aber $excel ist und bleibt leer.

              Irgendwelche Fehlermeldungen? Error Reporting auf E_ALL gestellt?

              MfG, Dennis.

              --
              Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
              Das Leben ist kein Warenhaus - es nimmt nichts zurück. (Anette Louisan)
            2. echo $begrueszung;

              Ich erhalte folgende Ausgabe im Browser:

              a:1:{i:1;s:4:"Test";}

              ^     ^

              Da hat das magic_quotes_gpc zugeschlagen. (siehe auch: Kapitel zu Magic quotes)

              Du kannst das in der php.ini oder .htaccess auf Off setzen (das wäre das beste).
              Wenn das nicht geht, musst du das $_POST['ser'] noch mit stripslashes() behandeln bevor du es unserialisierst.

              echo "$verabschiedung $name";

              1. Hello,

                Da hat das magic_quotes_gpc zugeschlagen. (siehe auch: Kapitel zu Magic quotes)

                Du kannst das in der php.ini oder .htaccess auf Off setzen (das wäre das beste).
                Wenn das nicht geht, musst du das $_POST['ser'] noch mit stripslashes() behandeln bevor du es unserialisierst.

                Es wäre wirklich intelligenter, stattdessen meinen Rat zu beherzigen, und eine zum Kontext (HTML) passende Codierung für dei Daten zu wählen. Dann würde soetwas nämlich gar nicht erst passieren und man müsste nicht anfangen zu basteln.

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                1. echo $begrueszung;

                  Es wäre wirklich intelligenter, stattdessen meinen Rat zu beherzigen, und eine zum Kontext (HTML) passende Codierung für dei Daten zu wählen. Dann würde soetwas nämlich gar nicht erst passieren und man müsste nicht anfangen zu basteln.

                  Dem stimme ich teilweise zu. Jedoch würde ich statt dem "stattdessen" eine Kombination aus ausgeschaltetem Magic Quotes und der notwendigen Kodierung vornehmen.
                  Die Kodierung alleine umgeht das Magic Quotes-Problem an dieser Stelle, aber ohne es generell zu lösen. Bei "normalen" Usereingaben schlägt es ja schließlich auch zu.

                  echo "$verabschiedung $name";

                  P.S. Wäre es intelligent, das erste "Hello World" gleich in dieser Form zu schreiben? ;-)

                  1. Hallo,

                    wollt es nicht verpassen mich zu bedanken. Habe es dank Eurer Hilfe hingekriegt.

                    Gruß

                    Uhfe

        2. Hello,

          Die Daten sind alle serialized() im neuen Script. Auch vollständig. Aber wenn ich jetzt unserialize() mache erhalte ich eine leere Variable.

          $excel = unserialize($ser);

          -> $excel = ""!!!!

          Woran kann das liegen?

          Am vergessenen Codieren!
          Das hatte ich Dir aber gesagt.
          Es ist auf den zeiten Blick nichts so, wie es auf den ersten erscheint.
          Deine Daten werden durch das unterlassene kontext-bezogene Codieren verstümmelt, spätestns auf dem Rückweg vom Browser zum Script.

          <?php
          $_data = array('2','hallo'.chr(10),'sieben',array(1,2,3,4));

          echo "<pre>\n";
          print_r($_data);
          echo "</pre>\n";

          $stream = serialize($_data);
          $hidden = base64encode($stream);
          ?>

          <form action="<?php echo $_SERVER['PHP_SELF']; ?> method="post">
              <input type="hidden" name="hidden" value="<?php echo $hidden; ?>">
            </form>

          und dann im auswertenden Script:

          $stream = base64decode($_POST['hidden']);
          $_data  = unserialize($stream);

          echo "<pre>\n";
          print_r($_data);
          echo "</pre>\n";

          Zusammenbauen musst Du es nun bitte selber.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
  2. Ⓗⓐⓛⓛⓞ Uhfe!

    ich möchte von einer Seite ein Array an eine neue Seite
    weiterreichen.

    Das solltest du überdenken. Ansonsten käme nur eine Aufspaltung in
    Variablen infrage oder eine temporäre Speicherung als Datei, oder in
    einer Datenbank.

    Bei einfachen Variablen kein Thema mit <input type='hidden'...

    So besser nicht.

    ℆, ℒacℎgas

    --
    Keine Verbesserung ist zu klein oder geringfügig, als dass man
    sie nicht durchführen sollte. (Adorno)