Antworten auf deine Fragen:
Neues Thema erstellen

PHP: Sessionvariable kommt nicht an

lustig

Helper

Hallo,

ich möchte in einer Sessionvariable das ausgewählte Jahr speichern, dazu habe ich ein kleines Script zum Test gebastelt.
Testausgaben (Punkt AAA, BBB, CCC) zeigen den aktuellen Stand der Sessionvariable rechnungsjahr). Leider kommt die aktuell gesetzte Sessionvariable (siehe CCC) im Punkt AAA nicht an.
Wenn ich auf die Radiobuttons klicke, wird immer zwischen den beiden letzten Inhalten der Sessionvariable gewechselt. Was mache ich falsch?

Unter kann das Beispiel angesehen werden.

Code:
<?php
  // ini_set('session.use_trans_sid', true);
  session_name('reha');
  session_start();
  header('content-type: text/html; charset=utf-8');

  $seitentitel = "Test Rechnungsjahr";

  $anz_jahre = 9;
  // Das Jahr wird ausgewählt
  function getJahr ($rechnjahr) {
    $jahr = "";
    switch ($rechnjahr) {
      case 1: $jahr='2016'; break;
      case 2: $jahr='2017'; break;
      case 3: $jahr='2018'; break;
      case 4: $jahr='2019'; break;
      case 5: $jahr='2020'; break;
      case 6: $jahr='2021'; break;
      case 7: $jahr='2022'; break;
      case 8: $jahr='2023'; break;
      case 9: $jahr='2024';
  }
  return $jahr;
}

echo '<h3>' . $seitentitel . '</h3>';

if (isset($_POST["auswahl"])) { $checkAuswahl = $_POST["auswahl"]; }  else { $checkAuswahl = "AR"; }

// unset ($_SESSION["rechnungsjahr"]);

if (!isset ($_SESSION["rechnungsjahr"])) {
  // wenn nicht vorhanden, auf 2016 gesetzt
  echo "------------- auf 2016 gesetzt" . "<hr>";
  $rechnungsjahr = 2016; //date("Y");
  $_SESSION["rechnungsjahr"] = $rechnungsjahr;
}

echo "<form name='f' action='{$_SERVER["PHP_SELF"]}'" . " method='post'>";
  echo "<input type='hidden' name='PHPSESSID' value='<?=session_id()?>'>";

  echo "Punkt AAA: SESSION[rechnungsjahr]: " . $_SESSION["rechnungsjahr"] . "<br><br>";

  // Jahr
  echo "Waehlen Sie das Jahr aus:&nbsp;&nbsp;";
  echo "<td><select name='rjahr' onchange='submit();'>";
  for ($i = 1; $i <= $anz_jahre; $i++) {
    $jahr = getJahr($i);
    if ($jahr == $_SESSION["rechnungsjahr"]) {  
      $attr = ' selected="selected" ';  
      // echo "<script type='text/javascript'>alert('$jahr');</script>";  
    } else {
      $attr = ' ';
    }
  echo ("<option size = \"10\" value=\"" . $jahr . "\" " . $attr . ">" . $jahr . "</option>");  
  }
  echo "</select></td>";

  echo "&nbsp;&nbsp;&nbsp;&nbsp;";
?>

  <input type="radio" name="auswahl" onClick="submit();" value="AR" <?php if ($checkAuswahl == 'AR') {echo "checked";} ?> >Alle
  <input type="radio" name="auswahl" onClick="submit();" value="AB" <?php if ($checkAuswahl == 'AB') {echo "checked";} ?> >Alle bezahlten
  <input type="radio" name="auswahl" onClick="submit();" value="AO" <?php if ($checkAuswahl == 'AO') {echo "checked";} ?> >Alle offenen

<?php

  echo "<hr>" . "_POST:" . "<br>";
  var_dump($_POST);
  echo "<hr>";

  echo "<br>Punkt BBB: SESSION[rechnungsjahr] alt: " . $_SESSION["rechnungsjahr"];

  // Eine Auswahl wurde getroffen
  if (isset ($_POST["auswahl"])) {
    $auswahl = $_POST["auswahl"];
  }
  
  if (isset ($_POST["rjahr"]))  {
    $rechnungsjahr = $_POST["rjahr"];
    $_SESSION["rechnungsjahr"] = $rechnungsjahr;
  } 
  echo "<br>Punkt CCC: SESSION[rechnungsjahr]: " . $_SESSION["rechnungsjahr"];

echo "</form>";

?>
 
Zuletzt bearbeitet:

Curanai

Aktives Mitglied

Guten Morgen Lutz,

der Quellcode ist stark bedenkenswert und leider ist "funktioniert nicht" immer noch nicht derart informativ, dass man als Außenstehender helfen könnte.

Ich habe nur ein logisches Verständnis mit den beiden Zeilen:
Code:
echo "<br>Punkt BBB: SESSION[rechnungsjahr] alt: " . $_SESSION["rechnungsjahr"];
echo "<br>Punkt CCC: SESSION[rechnungsjahr]: " . $_SESSION["rechnungsjahr"];

Da sich die Session zwischen den beiden gar nicht mehr ändert, steht dort immer der gleiche Wert. Mich verwirrt daher die Erweiterung "alt" im Text. Aber das nur als Randnotiz.

Wichtig: Bei Entwicklung immer die aggressivste Fehlerprotokollierung einschalten, damit wirklich jeder noch so unwichtige Mist als Report ausgespuckt wird. Ich empfehle grundsätzlich ...
Code:
set_error_handler(
   function($nSeverity, $strMessage, $strFilePath, $nLineNumber){
     if (error_reporting() !== 0){ // @
       throw new \ErrorException($strMessage, /*nExceptionCode*/ 0, $nSeverity, $strFilePath, $nLineNumber);
     }
   },
   /*E_ALL*/ -1
);

Dann habe ich mir erlaubt diesen wahnsinnigen Mischmasch mal zu straffen, damit es übersichtlicher wird:
Code:
<?php
set_error_handler(
   function($nSeverity, $strMessage, $strFilePath, $nLineNumber){
     if (error_reporting() !== 0){ // @
       throw new \ErrorException($strMessage, /*nExceptionCode*/ 0, $nSeverity, $strFilePath, $nLineNumber);
     }
   },
   /*E_ALL*/ -1
);

// ini_set('session.use_trans_sid', true);
session_name('reha');
session_start();
header('content-type: text/html; charset=utf-8');

// Inits ...
$seitentitel    = "Test Rechnungsjahr";
$checkAuswahl    = "AR";
$anz_jahre      = 9;

// Functions ...
function getJahr ($rechnjahr) {
   // Das Jahr wird ausgewählt
   $jahr = 2015 + $rechnjahr;
   
   return $jahr;
}

// Bedingungen ...
if (!isset ($_SESSION["rechnungsjahr"])) {
   // wenn nicht vorhanden, auf 2016 gesetzt
   echo "------------- auf 2016 gesetzt" . "<hr>";
   $_SESSION["rechnungsjahr"] = 2016;
}

if (isset($_POST["rjahr"]))  {
   $_SESSION["rechnungsjahr"] = (int) $_POST["rjahr"];
}

if (isset($_POST["auswahl"])) {
   $checkAuswahl    = trim($_POST["auswahl"]);
   $auswahl      = $checkAuswahl;
}

// Debugging ...
echo "<hr>";
echo "<strong>dumpPOST</strong><br>";
var_dump($_POST) . "<br>";
echo "<strong>dumpSESSION</strong><br>";
var_dump($_SESSION);
echo "<hr>";

?>
<h3><?= $seitentitel ?></h3>
<form name="f" action="<?= $_SERVER["PHP_SELF"] ?>" method="post">
<input type="text" name="PHPSESSID" value="<?= session_id() ?>">
<p>Punkt AAA: SESSION[rechnungsjahr]: <?= $_SESSION["rechnungsjahr"] ?></p>

Wählen Sie das Jahr aus:<br />
<p><select name="rjahr" onchange="submit()">
<?php
for ($i = 1; $i <= $anz_jahre; $i++) {
   $jahr = getJahr($i);
   $attr = "";
   
   if ($jahr === $_SESSION["rechnungsjahr"]) {
     $attr = " selected=\"selected\" ";
   }
   
   echo "<option size=\"10\" value=\"" . $jahr . "\" " . $attr . ">" . $jahr . "</option>";
}
?>

</select></p>

<p>
   <input type="radio" name="auswahl" onclick="submit()" value="AR" <?php echo ($checkAuswahl === "AR" ? "checked" : ""); ?>>Alle
   <input type="radio" name="auswahl" onclick="submit()" value="AB" <?php echo ($checkAuswahl === "AB") ? "checked" : ""); ?>>Alle bezahlten
   <input type="radio" name="auswahl" onclick="submit()" value="AO" <?php echo ($checkAuswahl === "AO") ? "checked" : ""); ?>>Alle offenen
</p>


<p>Punkt BBB: SESSION[rechnungsjahr] alt: <?= $_SESSION["rechnungsjahr"] ?></p>
<p>Punkt CCC: SESSION[rechnungsjahr]: <?= $_SESSION["rechnungsjahr"] ?></p>

</form>

Meine Fragen hierzu:
- warum soll die Session immer gleich heißen?
- ich habe Tabellenzellen darin entfernt; gibt es u. U. ein include(), was die Session zurücksetzt (ein anderes session_start(), *_regenerate_id() oder eine miese session_destroy?)

Wie immer gilt: Tapfer weitermachen und viel Erfolg.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.612
Beiträge
1.538.343
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben