makaio: sessions - kriege die variablen nicht in den griff

hi!

ich habe einen umfangreicheren satz von formularen, der in mehreren schritten abgearbeitet werden soll. dazu will ich sessions verwenden, die die inhalte der felder sammeln und dann abschließend in einem rutshc in die datenbank schreiben.

ich fange wie folgt an:

***
session_start(); (an allererster stelle im dokument)
***

später im skrip führe ich folgende befehle aus:

***
$_SESSION = mysql_fetch_assoc( $res );

echo session_id();
echo $_SESSION[name];
***

die session-id und der wert der variable werden brav ausgegeben.

dann wechsele ich per link (ganz einfache html) in ein anderes dokument, wo ich zuerst folgenden code ausführe:

***
if ( session_start() ) echo "Session erfolgreich initialisiert:".session_id();
***

auch hier wird die session-id korrekt ausgegeben.
ich vermute also, daß das ganze zumindest prinzipiell läuft.

wenn ich allerdings anschließend noch folgenden befehl ausführe passiert leider nix:

***
echo $_SESSION[name];
***

mache ich was total falsch?

hier gibt's die server settings meines hosts http://www.netclusive.de/info.php

  1. Hi,

    echo $_SESSION[name];

    es muss heissen $_SESSION["name"]
    sonst sucht er nach einer Konstanten

    ciao
    romy

    1. echo $_SESSION[name];
      es muss heissen $_SESSION["name"]
      sonst sucht er nach einer Konstanten

      das hilft nicht. folgendes läuft auch ohne weiteres

      <table>
             <tr>
                 <td>Ansprechpartner</td>
                 <td><input name="apartner" type="text" id="apartner2" value="<? echo $_SESSION[apartner]; ?>" size="30"></td>
             </tr>
             <tr>
                 <td>Name</td>
                 <td><input name="name" type="text" id="name2" value="<? echo $_SESSION[name]; ?>" size="30"></td>
             </tr>
             <tr>
                 <td>Straße/Hausnummer</td>
                 <td>
                     <input name="str" type="text" id="str" value="<? echo $_SESSION[str]; ?>" size="30">/
                     <input name="hnr" type="text" id="hnr" value="<? echo $_SESSION[hnr]; ?>" size="4">
                 </td>
             </tr>

      usw.

      dieser code stammt allerdings noch aus dem skript, wo $_SESSION eingelesen wird.

      ich bekomme also einfach den eindruck, daß die werte von $_SESSION mit dem wechsel in das andere skript verloren gehen.

  2. Hallo makaio,

    $_SESSION = mysql_fetch_assoc( $res );

    wie sieht die db-Abfrage vorher aus? Funktioniert die?

    echo $_SESSION[name];

    wie romy schon sagte - das ist falsch (->http://de.php.net/manual/de/language.types.array.php#language.types.array.foo-bar) - wird aber in der Regel funktionieren (sofern es nirgends eine Konstante namens "name" gibt)

    die session-id und der wert der variable werden brav ausgegeben.

    print_r($_SESSION) gibt auch das erwartete aus, oder?

    if ( session_start() ) echo "Session erfolgreich initialisiert:".session_id();

    das wird immer ausgeben, dass das initalisieren erfolgreich war, da session_start() laut http://de.php.net/session_start immer true zurückgibt.

    wenn ich allerdings anschließend noch folgenden befehl ausführe passiert leider nix:

    was verstehst du unter "nix"? schreibt php den Wert nicht in die Datei die beim Browser landet?

    echo $_SESSION[name];

    gibt print_r($_SESSION) oder $_SESSION['name'] was aus?

    mache ich was total falsch?

    ich sehe jetzt eigentlich keinen Fehler - vielleicht bastelst du mal zwei Testseiten die auf das wesentliche reduziert sind, und postest dann dessen url hier (oder etwas mehr Quelltext)

    hier gibt's die server settings meines hosts http://www.netclusive.de/info.php

    das würde ich nicht unbedingt öffentlich zugänglich rumliegen lassen - es könnten für potentielle Angreifer interessante Informationen drinstehen.

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. $_SESSION = mysql_fetch_assoc( $res );
      wie sieht die db-Abfrage vorher aus? Funktioniert die?

      $query = "SELECT * FROM kunden INNER JOIN kontakt USING (kd_id)";
      die funktioniert auch, denn im weiteren verlauf des dokuments kann ich ohne probleme aus $_SESSION auslesen.

      echo $_SESSION[name];
      wie romy schon sagte - das ist falsch (->http://de.php.net/manual/de/language.types.array.php#language.types.array.foo-bar) - wird aber in der Regel funktionieren (sofern es nirgends eine Konstante namens "name" gibt)

      yep, funktioniert sehr gut ;-) habe es aber auch gleich geändert.

      die session-id und der wert der variable werden brav ausgegeben.
      print_r($_SESSION) gibt auch das erwartete aus, oder?

      gibt den kompletten array so wie er auch in der db steht aus.

      wenn ich allerdings anschließend noch folgenden befehl ausführe passiert leider nix:
      was verstehst du unter "nix"? schreibt php den Wert nicht in die Datei die beim Browser landet?

      exakt. die variable ist offensichtlich leer.

      echo $_SESSION[name];
      gibt print_r($_SESSION) oder $_SESSION['name'] was aus?

      keines von beidem klappt.

      ich sehe jetzt eigentlich keinen Fehler - vielleicht bastelst du mal zwei Testseiten die auf das wesentliche reduziert sind, und postest dann dessen url hier (oder etwas mehr Quelltext)

      folgend die relevanten teile aller drei dateien, mit denen ich gerade teste.

      ***********************************
      *starte mit dokument int_index.php:
      ***********************************
      *<?
      *session_start();
      *//session_set_cookie_params (1200, '/', '@ccs.iolana.de');
      *
      *include "../includes/db_connect.php";
      *
      *include "basic_data.inc";
      *
      *echo "<a href="test.php">Link</a>";
      *?>
      *
      ***********************************

      ****************
      * basic_data.inc
      ****************
      *<?
      *
      *$query = "SELECT * FROM kunden INNER JOIN kontakt USING (kd_id)";
      *echo $query; //klappt!
      *$res = dbquery( $db_callcenter, $query );
      *
      *$_SESSION = mysql_fetch_assoc( $res );
      *
      *echo session_id();
      *print_r ( $_SESSION ); //klappt!
      *
      *?>
      *
      ****************

      ****************
      * test.php
      ****************
      *<?
      *
      *echo session_id();
      *$_SESSION['name'];
      *
      *?>
      *
      ****************

      hier gibt's die server settings meines hosts http://www.netclusive.de/info.php
      das würde ich nicht unbedingt öffentlich zugänglich rumliegen lassen - es könnten für potentielle Angreifer interessante Informationen drinstehen.

      da hast du nicht ganz unrecht. aber im forum des betreibers liegt der link ohnehin offen. das zu meiner verteidigung ;-)

      Grüße aus Nürnberg

      Tobias

      grüße ganz aus der nähe, nämlich aus bayreuth

      matthias

      --
      What is my problem with man you ask ?
      No, I ask you what was man's problem with me !?
      #ss:| zu:) ls:[ fo:| de:[ va:| ch:? sh:( n4:& rl:? br:< js:{ ie:% fl:) mo:|
      (http://www.peter.in-berlin.de/projekte/selfcode/?code=ss%3A|+zu%3A)+ls%3A[+fo%3A|+de%3A[+va%3A|+ch%3A%3F+sh%3A(+n4%3A%26+rl%3A%3F+br%3A<+js%3A{+ie%3A%25+fl%3A)+mo%3A|+)
      1. Hallo makaio,

        wie sieht die db-Abfrage vorher aus? Funktioniert die?
        $query = "SELECT * FROM kunden INNER JOIN kontakt USING (kd_id)";

        ->http://www.dclp-faq.de/q/q-sql-select.html

        echo $_SESSION[name];
        wie romy schon sagte - das ist falsch
        yep, funktioniert sehr gut ;-)

        <entruestet mode=":-)">natürlich funktioniert es</entruestet>

        habe es aber auch gleich geändert.

        brav :-)

        print_r($_SESSION) gibt auch das erwartete aus, oder?
        gibt den kompletten array so wie er auch in der db steht aus.

        dass soll es ja auch.

        wenn ich allerdings anschließend noch folgenden befehl ausführe passiert leider nix:
        was verstehst du unter "nix"? schreibt php den Wert nicht in die Datei die beim Browser landet?
        exakt.

        das muss ich jetzt nicht verstehen, oder?

        die variable ist offensichtlich leer.

        was sagt empty($_SESSION) bzw. empty($_SESSION['name'])?

        *<?
        *session_start();

        *grmpf* lass doch bitte die Sternchen vor den Zeilen weg - das erleichtert das Kopieren zum Testen.

        *echo "<a href="test.php">Link</a>";

        einfacher geht es, wenn du das html-Zeug in einfache Anführungszeichen schreibst (du kannst dir das Maskieren sparen)

        *<?

        du weißt, dass du dich damit von short_open_tags=on abhänging machtst?

        *$res = dbquery( $db_callcenter, $query );

        was macht die Funktion? das gleiche wie mysql_query()?

        *$_SESSION['name'];

        echo $_SESSION..., oder?

        irgendwie kommt mir das ganze etwas spanisch vor - bei mir funktioniert das nämlich. Ein Link zum Anschauen bzw. der ganze Quelltext (nicht posten, als .txt hochladen) wäre schon recht hilfreich (vielleicht hat aber noch jemand anderes eine Idee :-))

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. echo $_SESSION[name];
          wie romy schon sagte - das ist falsch
          yep, funktioniert sehr gut ;-)
          <entruestet mode=":-)">natürlich funktioniert es</entruestet>

          ich bezog mich auf die version ohne anführungszeichen, habe weder romy noch dich in frage gestellt.

          print_r($_SESSION) gibt auch das erwartete aus, oder?
          gibt den kompletten array so wie er auch in der db steht aus.
          dass soll es ja auch.

          sollte auch nur eine bestätigung sein

          wenn ich allerdings anschließend noch folgenden befehl ausführe passiert leider nix:
          was verstehst du unter "nix"? schreibt php den Wert nicht in die Datei die beim Browser landet?
          exakt.
          das muss ich jetzt nicht verstehen, oder?

          auch hier gedachte ich einfach deine vermutung zu bestätigen

          *grmpf* lass doch bitte die Sternchen vor den Zeilen weg - das erleichtert das Kopieren zum Testen.

          sorry!

          *echo "<a href="test.php">Link</a>";
          einfacher geht es, wenn du das html-Zeug in einfache Anführungszeichen schreibst (du kannst dir das Maskieren sparen)

          danke für den tip

          *<?
          du weißt, dass du dich damit von short_open_tags=on abhänging machtst?

          jetzt ja ;-)

          *$res = dbquery( $db_callcenter, $query );
          was macht die Funktion? das gleiche wie mysql_query()?

          exakt.

          irgendwie kommt mir das ganze etwas spanisch vor - bei mir funktioniert das nämlich. Ein Link zum Anschauen bzw. der ganze Quelltext (nicht posten, als .txt hochladen) wäre schon recht hilfreich (vielleicht hat aber noch jemand anderes eine Idee :-))

          habe die dateien jetzt mal für dich auf meinen remote server geschoben und siehe da, es klappt. es muß also irgendwas an meiner lokalen server-umgebung nicht stimmen. wobei auch dort alle session-parameter mit denen auf meinem remote-server übereinstimmen.

          trotzdem vielen dank für die umfangreichen bemühungen, ich glaube ich lasse es jetzt in unserer beider interessen auf sich beruhen und strenge mein ftp-programm etwas häufiger an.

          matthias

          --
          What is my problem with man you ask ?
          No, I ask you what was man's problem with me !?
          #ss:| zu:) ls:[ fo:| de:[ va:| ch:? sh:( n4:& rl:? br:< js:{ ie:% fl:) mo:|
          (http://www.peter.in-berlin.de/projekte/selfcode/?code=ss%3A|+zu%3A)+ls%3A[+fo%3A|+de%3A[+va%3A|+ch%3A%3F+sh%3A(+n4%3A%26+rl%3A%3F+br%3A<+js%3A{+ie%3A%25+fl%3A)+mo%3A|+)