Olaf Beyer: array wird nicht richtig in $_POST kopiert

Hallo,

ich habe folgendes Problem (code steht unten - soweit wie moeglich gekuerzt):

  • erst ruft datei (a) die datei (b) mit $_POST auf => array wird uebergeben und man kann in (b) einwandfrei mit dem array arbeiten.
  • nun ruft datei (b) sich selber auf und benoetigt dazu dieselben parameter, die es selber vorher bekommen hat.
    also versuche ich, die variable (ein array) in die $_POST variablen erneut zu bekommen.
    wenn nun datei (b) das zweite Mal aufgerufen wird, so kann ich keine array-fuctionen verwenden (der browser sagt mir ungueltiger datentyp).
    Ich vermute, mir fehlt irgendwo eine eckige Klammer, aber vielleicht liegts auch an was anderem.

Hier der code:
datei (a)
    echo '<form name="tableselected" action="tableselected.php" target=_blank method="post">';
    echo '<td>';
    echo '<select multiple name="colsselected[]">';
      $name = mysql_field_name ( $tabfieldnames, 0);
      echo '<option class="klein" value='.$name.' selected>'.$name.'</option>';
    echo '</select>';
    echo '</td>';

=============================================
datei (b) "tableselected.php"
$colsselected = $_POST["colsselected"];
=> ein array bestehend aus strings (spaltennamen)
=> beim aufruf aus datei (a) richtig, beim aufruf aus datei (b) falsch

-----------------------------------------
hier der erneute aufruf (b) ruft (b) auf
c) parameter an sich selber uebergeben
    echo '<form name="changedata" action="tableselected.php", method="post"';
    echo '<input type="hidden" name="colsselected[]" value="'.$colsselected.'">';
    echo '<td><input type="submit" id="button" value="Hinzufuegen"></td>';
    echo '</form>';

Ich hoffe, hier weiss jemand wo ich mich zu dusselig anstelle.
Herzliche Gruesse,
Olaf.

  1. so funktioniert es:
    In der 2ten Datei muss das $_POST-Feld etwas aufwendiger gefuellt werden:
        for ($i=0;$i<count($colsselected);$i++)
        {
          echo '<input type="hidden" name="colsselected[]" value='.$colsselected[$i].'>';
        }
    Ich frage mich nur, ob es nicht einen leichteren Weg gibt.

    1. Hello Olaf,

      so funktioniert es:
      In der 2ten Datei muss das $_POST-Feld etwas aufwendiger gefuellt werden:
          for ($i=0;$i<count($colsselected);$i++)
          {
            echo '<input type="hidden" name="colsselected[]" value='.$colsselected[$i].'>';
          }

      Ungeschickt ist sicherlich Deine Problembeschreibung.
      Obwohl sicher die meisten hier wissen, was ein selbstreferenzierndes Formular ist, hast Du noch keine Antwort. Ich grübele auch schon die ganze Zeit, wie ich Die vielleicht helfen könnte.

      Versuch doch nochmal, eine Aufgabenbeschreibung anzufertigen, die vollkommen gelöst von Programmiersprachen und HTML versucht, zu beschreiben, was Du eigentlich erreichen willst.

      Und dann ein Datendiagramm ...

      Datenwert1a         Datenwert1b                usw.
          Datenwert2a   --->  Datenwert4b        ---->
          Datenwert3a         Datenwert22b

      Vergiss nicht, mitzuteilen, was die Datenwerte bedeuten und schreib Musterdaten dazu...

      Übrigens kann man ganze Arrays, die man man nur druchschleifen will, auch in einem einzigen Hidden-Field übertragen.

      Arrray serialisieren
      Serialisierte daten mit base64encode codierern
      Daten übertragen...

      Feld decodieren
      Daten wieder seserialisieren
      Damit weiterarbeiten

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

      1. Hellihello Tom,

        Versuch doch nochmal, eine Aufgabenbeschreibung anzufertigen, die vollkommen gelöst von Programmiersprachen und HTML versucht, zu beschreiben, was Du eigentlich erreichen willst.

        Und dann ein Datendiagramm ...

        Datenwert1a         Datenwert1b                usw.
            Datenwert2a   --->  Datenwert4b        ---->
            Datenwert3a         Datenwert22b

        Vergiss nicht, mitzuteilen, was die Datenwerte bedeuten und schreib Musterdaten dazu...

        Übrigens kann man ganze Arrays, die man man nur druchschleifen will, auch in einem einzigen Hidden-Field übertragen.

        Arrray serialisieren
        Serialisierte daten mit base64encode codierern
        Daten übertragen...

        Feld decodieren
        Daten wieder seserialisieren
        Damit weiterarbeiten

        Eine Sessionvariable wäre u.U. auch was feines, oder?

        Dank und Gruß,

        frankx

        1. Hello Frank,

          Eine Sessionvariable wäre u.U. auch was feines, oder?

          Wenn Olaf denn mit Sessions arbeiten will, bestimmt.

          Diese Daisy Chain Methode finde ich für den Anfang allerdings immer ganz gut. Man lernt eine Menge über das Ping-Pong-Spiel zwischen Client und Server dadurch.

          • Magic Quotes
          • htmlspechialchars()
          • Codierung
          • Quotes in Werten
          • Quotes um die Werte
          • Manipulationsfähigkeit von Daten
          • Namensvergabe für Dialogelemente ("<form>-Variablen")
          • ...

          Da fehlt bestimmt noch was.

          Harzliche Grüße vom Berg
          http://bergpost.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

          1. Hallo Frank, Hallo Tom

            Eine Sessionvariable wäre u.U. auch was feines, oder?

            Wenn Olaf denn mit Sessions arbeiten will, bestimmt.

            vielen Dank fuer Eure beiden Antworten!

            Session:

            • mache ich gerne; ist mein Favorit, aber leider funkt. das mit den Sessions bei mir nicht mit Apache local. der gleiche code "hochgeladen" funkt. Da ich aber alles erst local teste, versuche ich ohne sessions auszukommen.

            Tom,
            vielen Dank fuer Dein Angebot, dass ich dsa Problem erst mal trocken beschreiben soll.
            Da ich aber eine Loesung gefunden habe (siehe meinen zweiten Kommentar) schlage ich Dein Angebot erstmal aus - um vor allem auch Dir Zeit zu ersparen.
            Wenn Du Interesse hat, dann lies Dir einfach mal meinen 2ten kommentar durch - vielleicht sagst Du ja "logisch" und kannst mir einfach das "logisch" erklaeren. Wenn nicht - nicht tragisch.

            vielen Dank an Euch beide.

            1. n'abend,

              • mache ich gerne; ist mein Favorit, aber leider funkt. das mit den Sessions bei mir nicht mit Apache local. der gleiche code "hochgeladen" funkt. Da ich aber alles erst local teste, versuche ich ohne sessions auszukommen.

              dann möchtest du deinen Apache (resp. dein lokales PHP) einfach nur richtig konfigurieren.

              php.ini Direktiven
              phpinfo()

              vermutlich wirft dein session_start() auch irgendwelche Warnungen (möglicherweise wegen falschem session.save_path oder ähnlichem). Ggf. willst du dir lokal alle Fehlermeldungen protokollieren lassen? Siehe die Direktiven log_errors, error_log, display_errors, error_reporting, etc.
              Ansonsten vergleiche die Konfiguration deines Live-Servers mit der lokalen Konfiguration.

              weiterhin schönen abend...

              --
              #selfhtml hat ein Forum?
              sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
              1. Hello,

                dann möchtest du deinen Apache (resp. dein lokales PHP) einfach nur richtig konfigurieren.

                php.ini Direktiven
                phpinfo()

                vermutlich wirft dein session_start() auch irgendwelche Warnungen (möglicherweise wegen falschem session.save_path oder ähnlichem). Ggf. willst du dir lokal alle Fehlermeldungen protokollieren lassen? Siehe die Direktiven log_errors, error_log, display_errors, error_reporting, etc.

                Oder der Lieblingsbrowser sendet die Cookies nicht mit.
                Darauf hat Sven neulich hingewiesen. Wenn die url nicht mindestens zwei Domain-Parts (alse "Domain" und Top-Level-Domain) hat, dann soll der Browser eigentlich nichts mitsenden.

                Gibts nur eins. Den testserver auf "testserver.lan" umtaufen und dies in der Hosts-Tabelle, sofern diese dafür verwendet wird, so eintragen.

                Harzliche Grüße vom Berg
                http://bergpost.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)