conni: PHP Parameter mal leer, mal nicht

Hallo zusammen,
ich kaue schon seit Tagen an einem Problem rum. Habe auch im Forum und langem Rumstöbern nichts Passendes dazu gefunden.

Bei mir kann man per Drop-Down ein Seminar auswählen. Dann werden der entsprechende Termin (von, bis) und eine Anmeldefrist in Input-Feldern angezeigt. Alles kommt aus einer MySQL-Datenbank. Das klappt auch wunderbar.

Wenn nun aber der Nutzer einen neuen Terminbeginn einträgt und sich die Frist neu berechnen lässt, ist der  übergebene Parameter $frist_edit im Formular leer. Dieser wird eigentlich aus einer externen Funktion ordentlich übergeben (ebenso wie der geänderte Parameter $von), nur ist er im Gegensatz zu $von nur im aufgerufenen Status bekannt (im "Status" gebe ich evtl Infos für den Nutzer aus). Ich begreife das nicht. Vor dem Formular, im Formular und an jeder anderen Stelle außerhalb von "Status" ist $frist_edit leer. Der genauso übergebene Parameter $von ist dagegen überall abrufbar.

Die Werte aus der Formulardatei werden mit POST an die Datei mit der Funktion übergeben.

In der Datei it dem Formular heißt es am Ende:
<?php
  echo "frist_edit: ".$frist_edit."<br> \n"; // wird nicht gezeigt/ist leer
  echo"<span class="status">".$status1."</span><br> \n"; // nur hier wird $frist_edit angezeigt.
  echo "frist_edit: ".$frist_edit; // hier wird $frist_edit schon wieder nicht angezeigt/ist leer.
?>
Dabei kommt Folgendes raus:
frist_edit:
von 01.07.2005 Frist_edit 20.05.2005
frist_edit:

In der Datei mit der Funktion werden die Werte so definiert und übergeben:
$status1 = "von: ".$von."Frist_edit: ".$frist_edit;
header ("Location: seminar_termin1.php?status1=".$status1."&frist_hidden=".$frist_edit."&frist=".$frist_edit."&auswahl_termin=".$id_termin."&von=".$von."&bis=".$bis);

Ich hoffe, ich habe mich halbwegs verständlich ausgedrückt.

Über Hilfe würde ich mich sehr freuen.

Viele Grüße
Conni

  1. echo $begrüßung;

    Ich hoffe, ich habe mich halbwegs verständlich ausgedrückt.

    Nun, nicht wirklich, aber egal.

    Wenn du an eine URL, die ein PHP-Script aufruft, etwas in der Art anhängst:
      ?name1=value1&name2=value2
    dann werden dafür erst einmal entsprechende Einträge im superglobalen Array $_GET angelegt. Abhängig vom Konfigurationsparameter register_globals werden gleich auch noch weitere Variablen erstellt. Dies, nimmst du an, passiert. Doch dem wird nicht so sein. Wie dir ein Blick in die Ausgabe von phpinfo() zeigen wird, steht register_globals wahrscheinlich auf off.
    Literaturtipp: http://de2.php.net/manual/en/language.variables.external.php (Dort der erste Teil. Ab "PHP also understands arrays..." wird für dein Problem uninteressant.)

    Außerdem empfiehlt es sich immer beim Programmieren in PHP das error_reporting aus E_ALL zu setzen

    echo "$verabschiedung $name";

    1. Hallo,

      Ich hoffe, ich habe mich halbwegs verständlich ausgedrückt.

      Nun, nicht wirklich, aber egal.

      Schade.

      register_globals ist on.

      Der ebenfalls aus dem php-script übergebene Parameter $von, wie auch alle anderen, werden anstandslos übergeben und sind überall abrufbar. Das ist ja das Seltsame.

      Den Tipp mit error_reporting werde ich gleich mal ausprobieren.

      Viele Grüße
      Conni

      1. echo $begrüßung;

        register_globals ist on.

        Nun gut, dann hab ich eben falsch vermutet.

        Den Tipp mit error_reporting werde ich gleich mal ausprobieren.

        Dann wirst du hoffentlich damit und den nun nicht mehr unterdrückten Notices und auch mit Debugausgaben von Variablen - var_dump() - den Fehler einkreisen können.

        echo "$verabschiedung $name";

  2. hi,

    ich kaue schon seit Tagen an einem Problem rum.

    hmm ... schon mal mit einer mentalen statt einer oralen lösungsstrategie versucht ...?

    In der Datei mit der Funktion werden die Werte so definiert und übergeben:
    $status1 = "von: ".$von."Frist_edit: ".$frist_edit;
    header ("Location: seminar_termin1.php?status1=".$status1."&frist_hidden=".$frist_edit.
    "&frist=".$frist_edit."&auswahl_termin=".$id_termin."&von=".$von."&bis=".$bis);

    bin mir wie dedlfix nicht ganz sicher, ob ich deine problembeschreibung verstanden habe - aber wenn ich das richtig deute, übergibst du hier werte per GET an ein folgescript, und willst da die daten dann ausgeben lassen?

    wenn dem so ist, solltest du mindestens $status1 mit urlencode() bzw. rawurlencode() behandeln - denn dieser wert enthält, so wie er von dir zusammengesetzt wird, definitiv sonderzeichen, die nicht unkodiert in einem URL stehen dürfen.

    und $frist_edit wirst du in diesem folgescript natürlich nicht mehr zur verfügung haben, da du keinen parameter mit diesem namen übergibst.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      hmm ... schon mal mit einer mentalen statt einer oralen lösungsstrategie versucht ...?

      ja.

      bin mir wie dedlfix nicht ganz sicher, ob ich deine problembeschreibung verstanden habe - aber wenn ich das richtig deute, übergibst du hier werte per GET an ein folgescript, und willst da die daten dann ausgeben lassen?

      per POST, wie eingangs geschrieben.

      wenn dem so ist, solltest du mindestens $status1 mit urlencode() bzw. rawurlencode() behandeln - denn dieser wert enthält, so wie er von dir zusammengesetzt wird, definitiv sonderzeichen, die nicht unkodiert in einem URL stehen dürfen.

      Ich werde die Angaben jetzt mal kodieren, danke für den Hinweis.

      Habe jetzt error_reporting(E_ALL); gesetzt und erstmal Fehlermeldungen zu beheben.

      Gruß
      Conni

  3. Liebe Conni,

    header ("Location: ... ."&frist_hidden=".$frist_edit."&frist=".$frist_edit."...

    Im entsprechenden $_GET-Array gibt es keinen Index 'frist_edit', sondern einen Index 'frist_hidden' und einen Index 'frist'. Daher wird $_GET['frist_edit'] keinen Wert liefern!

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Hallo Felix,

      header ("Location: ... ."&frist_hidden=".$frist_edit."&frist=".$frist_edit."...
      Im entsprechenden $_GET-Array gibt es keinen Index 'frist_edit', sondern einen Index 'frist_hidden' und einen Index 'frist'. Daher wird $_GET['frist_edit'] keinen Wert liefern!

      Danke, danke.. das wars. Habe aus lauter Verzweiflung an allen möglichen Stellen versucht, den Wert auszuwerfen und dann wohl die Bezeichnungen etwas vernachlässigt ;-)

      Viele Grüße
      Conni