SessionProblem

Greyschen

Grünschnabel
Hallo,
ich arbeite teils auf einem Server teils im/mit XAMPP.

Mein Problem ist folgendes: Ich binde auf einer PHP-Seite andere Seiten mittels "include" ein. Diese "includes" sind abhängig von Sessionvariablen.
Die Formulardaten werden wie gewohnt mit $_POST übergeben und in einem $_SESSION-Array gespeichert.

meine index.php seite sieht (gekürzt) wie folgt aus:

PHP:
<?php session_start();?>
HTML:
<html><head></head><body>
PHP:
<?php
		if ($_POST['name'] != "")
		{
		 	
			$_SESSION['name'] = $_POST['name'];
}
if ($_POST['system'] != "")
		{
		 	
			$_SESSION['system'] = $_POST['system'];
} ?>
usw...
PHP:
<?php if ($_SESSION['name']!="" and $_SESSION['system']=="") 
include("system.php");?>

Die Session wird auch beim ersten Post gefüllt und man gelangt auf die system.php , aber füllt man das formular der system.php aus (mit den Systemen). So wird nun auch die $_POST('system') richtig übergeben, denn die $_SESSION['system'] ist dann gefüllt. Jedoch die $_SESSION['name'] ist dann leer...
Ich will aber das sowohl $_SESSION['name'] als auch $_SESSION['system'] existent bleiben
Hat jemand eine ´Vermutung?
weiterer Hinweis: auf dem Localhost (XAMPP) läuft das Prima nur auf dem Server passiert immer wieder das obengenannte Spektakel.
Ich hab mal was über den session.bug_compat gelesen, weiß aber nicht ob das damit zusammenhängt

Danke im Vorraus
 
Hi,

$_SESSION["name"] ist leer, aber der Index selbst existiert noch?

Steht register_globals vielleicht auf "on" und setzt du irgendwo $name = ''; ?

Wie sieht denn der Inhalt von system.php aus, speziell das Formular und wie werden die Daten dann verarbeitet?

Zu session.bug_compat kann ich leider nichts sagen!

Gruß
 
Also die $_SESSION['name'] ist beim ersten mal befüllen durch $_POST['name'] gefüllt... nachdem die $_SESSION['name'] gefüllt ist wird ein zweites formular included, wo sich ein 2. formular befindet und die variable $_SESSION['system'] durch einen Post $_POST['system'] gesetzt wird.

Steht register_globals vielleicht auf "on" und setzt du irgendwo $name = ''; ?

die register_globals ändert nix an der funktionalität
auch $name = " "; wird nicht gesetzt, bzw. ist diese Variable garnicht in meinem Script vorhanden.
lediglich $_SESSION['name']=" "; wird gesetzt, wenn der User bei eingabe des/der systeme auf "zurück" statt "weiter" geht. Aber ich klicke richtig und im XAMPP funktioniert das auch alles super nur der SERVER (MS 2003) löscht $_SESSION['name'].

und um nochmal alle unklarheiten zu beseitigen schick ich im folgenden mal das script mehr oder minder vollständig.


PHP:
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//DE" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>    
	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
	<META HTTP-EQUIV="Pragma" CONTENT="no-cache" />
	<META HTTP-EQUIV="Expires" CONTENT="-1" />
	<meta http-equiv="cache-control" content="no-cache" />
<?php
if ($_POST['name'] != "")
{
			$_SESSION['name'] = $_POST['name'];
};

if ($_POST['system'] != "")
{
                	$_SESSION['system'] = $_POST['system'];
};
?>
</head>
<body>
<?php 
if ($_SESSION['name']=="") 
include("userdata.php");
?>
<?php 
if ($_SESSION['name']!="" and $_SESSION['system']=="") 
include("system.php");
?>
<?php
print_r($_SESSION); //liefert mir das Resultat zurück , dass beim 1. mal die SESSION[name] gefüllt ist, beim zweiten mal jedoch nicht mehr (aber nur auf dem SERVER)
?>
</body>
</html>
 
Hi, es könnte sein das das Session cookie bei dir nicht gespeichert wird, vielleicht blogt es dein Browser ja?

Denn soweit wie das in dem Script ist sollte es Funktionieren.
Kontrollier aber mal dein Script, vielleicht hast du an einer stelle sowas geschrieben
PHP:
if ($_SESSION['name']="")
ist ein beliebter Fehler, der die Variable leert.
 
Hallo,
ja ich hab $_SESSION['name']=""; drin, aber nur an der Stelle, wo der User beim formular auf den Zurückbutton drückt und somit ein post ausgelöst wird:
system.php
HTML:
<form id='system' method='post'>
<input type="text"  name='system'/>
<input type="submit" value='weiter'/>
<input type="submit" name="backwards" value='zurück'/>
</form>

daraufhin wird in der index.php folgendes ausgelöst:

PHP:
<?php
 if ($_POST['system'] != "")
		{
			$_SESSION['system'] = $_POST['system'];
		};
if (isset($_POST['backwards']))
		{                      
  			$_SESSION['system']="";
  			$_SESSION['name']="";
		}

aber den beliebten fehler mit if($_POST['name']=""); oder dergleichen, hab ich nach mehrfachen suchen nicht drin

und wie bereits gesagt es funktioniert im XAMPP vollkommen richtig, nur auf dem Server nicht.
 
Zuletzt bearbeitet:
Ok wenns hilfreich ist.
Aber nich beschweren, wenns zuviel code ist. Ich durchlauf vorerst nur die beiden ersten Abläufe für das Formular. Es wird nach und nach der User um Eingaben gebeten, welche dann schlussendlich in einem Dokument gedruckt werden. Läuft auch alles bereits vollkommen richtig auf dem Localhost.

Sorry das ich nun mit den Originalbezeichnungen handle.
Also die $_SESSION['system'] heißt eigtl. $_SESSION['sysenvi']
und die $_POST['system'] heißt eigtl. $_POST['sysenvi']
und die betreffenden Dateien (vorerst) : userdata.php und systemenvironment.php

die Index.php

PHP:
<?php
session_start();

	$roles = "";
		   	$count = count($_SESSION['roles']);
			   for ($i=0; $i<$count; $i++)
			   	{
			   	 	if ($i!=$count-1)
			   	 	{
						$roles .= $_SESSION['roles'][$i].", ";
					}
					else
					{
						$roles .= $_SESSION['roles'][$i];
					}
				} 
	$clients = "";
		   	$count = count($_SESSION['clients']);
			   for ($i=0; $i<$count; $i++)
			   	{
			   	 	if ($i!=$count-1)
			   	 	{
						$clients .= $_SESSION['clients'][$i].", ";
					}
					else
					{
						$clients .= $_SESSION['clients'][$i];
					}
				} 
	$systemstring = "";
		   	$count = count($_SESSION['systemfield']);
			   for ($i=0; $i<$count; $i++)
			   	{
			   	 	if ($i!=$count-1)
			   	 	{
						$systemstring .= $_SESSION['systemfield'][$i].", ";
					}
					else
					{
						$systemstring .= $_SESSION['systemfield'][$i];
					}
				} 
		


?>
<?php
if (isset($_POST['print']) and $_SESSION['roles']!="")
{
  	$antrag = file_get_contents('Muster.rtf');
  	$antrag = str_replace('==Start==', $_SESSION['Start'], $antrag);
	$antrag = str_replace('==Ende==', $_SESSION['Ende'], $antrag);
	$antrag = str_replace('==Grund==', $_SESSION['Grund'], $antrag);
	$antrag = str_replace('==Name==', $_SESSION['name'], $antrag);
	$antrag = str_replace('==Vorname==', $_SESSION['vorname'], $antrag);
 	$antrag = str_replace('==Strasse==', $_SESSION['strasse'], $antrag);
	$antrag = str_replace('==PLZ==', $_SESSION['plz'], $antrag);
	$antrag = str_replace('==Ort==', $_SESSION['ort'], $antrag);
	$antrag = str_replace('==Telefon==', $_SESSION['telefon'], $antrag);
	$antrag = str_replace('==Email==', $_SESSION['email'], $antrag);
	$antrag = str_replace('==Systemlandschaft==', $_SESSION['sysenvi'], $antrag);
	$antrag = str_replace('==Mandanten==', $clients, $antrag);
	$antrag = str_replace('==Systeme==', $systemstring, $antrag);
	$antrag = str_replace('==Rollen==', $roles, $antrag);
	
	$antrag = str_replace('==Rollen==', $_SESSION['roles'], $antrag);
	
	header('Content-Type: application/rtf');
	header('Content-Disposition: attachment; filename="Antrag.doc"');
 	print $antrag;
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//DE" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>    
	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
	<META HTTP-EQUIV="Pragma" CONTENT="no-cache" />
	<META HTTP-EQUIV="Expires" CONTENT="-1" />
	<meta http-equiv="cache-control" content="no-cache" />
    <link rel="stylesheet" type="text/css" href="../css/format.css" />
    <link rel="stylesheet" type="text/css" href="../css/calendar.css" />
    <script src="../javascript/calendar.js" type="text/javascript" language="Javascript"></script>
    <script src="../javascript/inputs.js" type="text/javascript" language="Javascript"></script>
    <script src="../javascript/general.js" type="text/javascript" language="Javascript"></script>
    <script src="../javascript/tooltip.js" type="text/javascript" language="Javascript"></script>
    <script src="../javascript/ajax.js" type="text/javascript" language="Javascript"></script>

	<?php
		if ($_POST['name'] != "")
		{
			$_SESSION['name'] = $_POST['name'];
			$_SESSION['vorname'] = $_POST['vorname'];
			$_SESSION['strasse'] = $_POST['strasse'];
			$_SESSION['plz'] = $_POST['plz'];
			$_SESSION['ort'] = $_POST['ort'];
			$_SESSION['telefon'] = $_POST['telefon'];
			$_SESSION['email'] = $_POST['email'];
			$_SESSION['Start'] = $_POST['Start'];
			$_SESSION['Ende'] = $_POST['Ende'];
			$_SESSION['Grund'] = $_POST['Grund'];
		};
		if ($_POST['sysenvi'] != "")
		{
			$_SESSION['sysenvi'] = $_POST['sysenvi'];
		};
		if ($_POST['systemfield'] != "")
		{
			$_SESSION['systemfield'] = $_POST['systemfield'];
		};
		if ($_POST['clients'] != "")
		{
			$_SESSION['clients'] = $_POST['clients'];
		};
		if ($_POST['roles'] != "")
		{
			$_SESSION['roles'] = $_POST['roles'];
		};
	
		if (isset($_POST['backtoroles']))
		{
  			$_SESSION['roles']="";
		}
		if (isset($_POST['backtoclients']))
		{
  			$_SESSION['roles']="";
			$_SESSION['clients']="";
		}
		if (isset($_POST['backtosystems']))
		{
  			$_SESSION['roles']="";
			$_SESSION['clients']="";
			$_SESSION['systemfield']="";
		}
		if (isset($_POST['backtosysenvi']))
		{
  			$_SESSION['roles']="";
  			$_SESSION['clients']="";
  			$_SESSION['systemfield']="";
  			$_SESSION['sysenvi']="";
		}
		if (isset($_POST['backtouserdata']))
		{
  			$_SESSION['roles']="";
  			$_SESSION['clients']="";
  			$_SESSION['systemfield']="";
  			$_SESSION['sysenvi']="";
  			$_SESSION['name']="";
		}
    ?>
</head>
<body onload="datewriter();">
<center>
<div class="background"> 
<br />
<?php 
if ($_SESSION['name']=="") 
include("userdata.php");
?>

<?php 
if ($_SESSION['name']!="" and $_SESSION['sysenvi']=="") 
include("systemenvironment.php");
?>

<?php 
if ($_SESSION['name']!="" and $_SESSION['sysenvi']!="" and $_SESSION['systemfield']=="") 
include("systems.php");
?>

<?php 
if ($_SESSION['name']!="" and $_SESSION['sysenvi']!="" and $_SESSION['systemfield']!="" and $_SESSION['clients']=="") 
include("clients.php");
?>

<?php 
if ($_SESSION['name']!="" and $_SESSION['sysenvi']!="" and $_SESSION['systemfield']!="" and $_SESSION['clients']!="" and $_SESSION['roles']=="") 
include("clientroles.php");
?>

 
<div id="entries" class="choicefield">
    <div class="subtitle">&nbsp; :: Daten </div> 
    <hr />
 <div class="uservalues">
    <table>
    <tr>
        <td style="width:230px">
          Name: <?php echo $_SESSION['name']; ?><br />
          Vorname: <?php echo $_SESSION['vorname']; ?><br />  
        </td>
        <td style="width:230px">
          Stra&szlig;e: <?php echo $_SESSION['strasse']; ?><br />
          PLZ/Ort: <?php echo $_SESSION['plz']." ".$_SESSION['ort']; ?><br /> 
        </td>
        <td style="width:230px">
          Telefon: <?php echo $_SESSION['telefon']; ?><br />
          E-Mail: <?php echo $_SESSION['email']; ?><br />  
        </td>
    </tr>
    </table>
</div>  
<hr  />
<div class="uservalues">
    <table>
    <tr>     
        <td style="width:230px">
          von: <?php echo $_SESSION['Start']; ?>          
        </td>
        <td style="width:230px">
          bis: <?php echo $_SESSION['Ende']; ?>
        </td>
        <td style="width:230px">
          Grund: <?php echo $_SESSION['Grund']; ?>
        </td>
    </tr>
    </table> 
</div>    
<hr  />
<div class="uservalues">	
    <table>
    <tr>     
        <td>
           Systemlandschaft: <?php echo $_SESSION['sysenvi'];  ?>                
        </td>
    </tr>
    </table>
</div>    
<hr  />
<div class="uservalues">	
    <table>
    <tr>     
        <td>
           Systeme: 
		<?php
			$systemstring = "";
		   	$count = count($_SESSION['systemfield']);
			   for ($i=0; $i<$count; $i++)
			   	{
			   	 	if ($i!=$count-1)
			   	 	{
						$systemstring .= $_SESSION['systemfield'][$i].", ";
					}
					else
					{
						$systemstring .= $_SESSION['systemfield'][$i];
					}
				} 
		
		   	echo $systemstring;	
		?>		     
        </td>
    </tr>
    <tr>     
        <td>
           Mandanten: 
		<?php
			$clients = "";
		   	$count = count($_SESSION['clients']);
			   for ($i=0; $i<$count; $i++)
			   	{
			   	 	if ($i!=$count-1)
			   	 	{
						$clients .= $_SESSION['clients'][$i].", ";
					}
					else
					{
						$clients .= $_SESSION['clients'][$i];
					}
				} 
			echo $clients; 
		?>          
        </td>
    </tr>
    <tr>     
        <td>
           Rollen:
		<?php
			$roles = "";
		   	$count = count($_SESSION['roles']);
			   for ($i=0; $i<$count; $i++)
			   	{
			   	 	if ($i!=$count-1)
			   	 	{
						$roles .= $_SESSION['roles'][$i].", ";
					}
					else
					{
						$roles .= $_SESSION['roles'][$i];
					}
				} 
			echo $roles; 
		?>                             
        </td>
    </tr>
    </table>    
 </div>    
</div>
<?php
if ($_SESSION['roles']!="")
{
	echo"<form method='post'>";
	echo"<input type='submit' name='print' value='Antrag ausf&uuml;llen und Drucken' /><br />";
	echo"<input type='submit' name='backtoroles' value='zurück' />";
	echo"</form>";
}
?>

<br /><br />
</div>
</center>
</body>
</html>

die userdata.php
PHP:
<div id="userdatafield" class="choicefield">
    <div class="subtitle">&nbsp; :: Nutzerdaten </div> 
    <hr />
    <form method="post" name="userdata" id="firstform">
    <table>
        <tr>
            <td class="leftcol">
            
               <div class="uservalues"> Name: </div>
               <div class="uservalues"> Vorname:  </div>
           
            </td>
            <td class="rightcol">
            
                <input type="text" id="name" name="name" class="uservaluefields" value="" onblur="checkinput_userdata(this)" />  <br />
                <input type="text" id="vorname" name="vorname" class="uservaluefields" value="" onblur="checkinput_userdata(this)"/>  <br />
                  
            </td>
            <td class="leftcol">            
                
                <div class="uservalues"> Stra&szlig;e: </div>
                <div class="uservalues"> PLZ: </div>
                <div class="uservalues"> Ort: </div>
                                     
            </td>
            <td class="rightcol">
          
                
                <input type="text" id="strasse" name="strasse" class="uservaluefields" value="" onblur="checkinput_userdata(this)"/>  <br />
                <input type="text" id="plz" name="plz"  class="uservaluefields" value="" onblur="checkinput_userdata(this)"/>  <br />
				<input type="text" id="ort" name="ort"  class="uservaluefields" value="" onblur="checkinput_userdata(this)"/>  <br />                
         
            </td>
            <td class="leftcol">
            
                <div class="uservalues"> Telefon: </div>
                <div class="uservalues"> E-Mail: </div>                               
            
            </td>
            <td class="rightcol">               
            
                <input type="text" id="telefon" name="telefon" class="uservaluefields" value="" onblur="checkinput_userdata(this)"/>  <br /> 
                <input type="text" id="email"  name="email" class="uservaluefields"  value="" onblur="checkinput_userdata(this)"/>  <br />

            
            </td>
        </tr>
    </table>
    <br />
    
    &nbsp;:: Antragsgrund und Antragsg&uuml;ltigkeit
    <hr />
    
    <table>
    <tr>
    <td class="leftcol">
             <div class="uservalues" > von: </div>                                      
    </td>
    <td class="rightcol">       
            <input type="text" id="begindate" class="uservaluefields2" name="Start" value="" onblur="existdatechecker(this)"/>
            <img src="../images/icons/icon_kalender.gif" id="Von-Kalender" alt="Von-Kalender" onclick="displayDatePicker('Start', false, 'dmy', '.')"/>           
    </td>
    <td class="leftcol">       
            <div class="uservalues"> bis: </div>        
    </td>
    <td class="rightcol">       
            <input type="text" id="enddate" class="uservaluefields2" name="Ende" onblur="existdatechecker(this)" value=""/>
            <img src="../images/icons/icon_kalender.gif" id="Bis-Kalender" alt="Bis-Kalender"  onclick="displayDatePicker('Ende', false, 'dmy', '.')"/>                    
    </td>
    <td class="leftcol">       
            <div class="uservalues"> Grund: </div>      
    </td>
    <td class="rightcol">          
         
            <select name="Grund" class="uservaluefields" size="1" id="reason_choice" style="width:136px">
            <option value="">bitte ausw&auml;hlen</option>
            <option value="Neueinrichtung">Neueinrichtung</option>
            <option value="L&ouml;schung">L&ouml;schung</option>
            <option value="Sperrung">Sperrung</option>
            <option value="&Auml;nderung">&Auml;nderung</option>
            </select>                    
    </td>
    </tr>
    </table>
    <br />
    <div class="buttoncontainer" style="">    
    <input type="submit" value="weiter" id="firstbutton" onclick="return checkallinputs()" /> 
    <input type="reset" onclick="first_reset()" value="zurücksetzen"  /> 
    </div>  
    
</div>

und die systemenviroment.php

PHP:
<form name="systemenvironment" method="post" >
<div id="systemenvironmentfield" class="choicefield" style=""> 
    <div class="subtitle">&nbsp; :: Auswahl - Systemlandschaft</div> 
    <hr />
    <table class="systemenvironment" style="border:1px"> 
    
<?php
	$link = mysql_connect("localhost", "root", "");
  	if (!$link)
    	die("Kann den Server nicht erreichen.");
  	if (!mysql_select_db("nutzerantraege", $link))
    	die("Kann die Datenbank nicht anwählen.");
	$sql = "SELECT DISTINCT `Systemlandschaft` FROM `nutzerantrag` ORDER BY `Systemlandschaft` ASC ";
	$result = mysql_query($sql);
	$num_results = mysql_num_rows($result);
	//echo "<tr>\n";
	//echo "<td class='normalcol'>\n";
	for ($i=0; $i < $num_results; $i++)
	{
	$systemenvironment[$i]= mysql_result($result,$i,0);
	//echo $systemenvironment[$i];
	};
	echo "<tr>\n";
	echo "<td class='normalcol'>\n";
	for ($a=0; $a < $num_results; $a=$a+3)
	{
		echo "<input type='radio' name='sysenvi' value='".$systemenvironment[$a]."'/>".$systemenvironment[$a]."<br />\n";
		$max=$a;
	};
	echo "</td>\n";
	echo "<td class='normalcol'>\n";
	for ($b=1; $b < $num_results; $b=$b+3)
	{
		echo "<input type='radio' name='sysenvi' value='".$systemenvironment[$b]."'/>".$systemenvironment[$b]."<br />\n";
		if (($b+2 == $max) and ($num_results%3==1))
		{
			echo "<br />\n";
		}
	};
	echo "</td>\n";
	echo "<td class='normalcol'>\n";
	for ($c=2; $c < $num_results; $c=$c+3)
	{
		echo "<input type='radio' name='sysenvi' value='".$systemenvironment[$c]."'/>".$systemenvironment[$c]."<br />\n";
		if (($c+1 == $max) and ($num_results%3>=1))
		{
			echo "<br />\n";
		}
	};
	echo "</td>\n";
	echo "</tr>\n";

	mysql_close($link);
?>
    
    </table>
    <br />
    <div class="buttoncontainer" style="">    
    <input type="submit" value="weiter"/>
	<input type="submit" value="zurück" name="backtouserdata" />
    <input type="reset" value="zur&uuml;cksetzen"/> 
    </div>
</div>
</form>
 
Hi,

sorry, aber fehlt da nicht die system.php ?

PHP:
    $antrag = file_get_contents('Muster.rtf');
    $antrag = str_replace('==Start==', $_SESSION['Start'], $antrag);
    $antrag = str_replace('==Ende==', $_SESSION['Ende'], $antrag);
    $antrag = str_replace('==Grund==', $_SESSION['Grund'], $antrag);
    $antrag = str_replace('==Name==', $_SESSION['name'], $antrag);
    $antrag = str_replace('==Vorname==', $_SESSION['vorname'], $antrag);
 
    // etc. 

    $antrag = str_replace('==Rollen==', $_SESSION['roles'], $antrag);

Das ist, nebenbei bemerkt, unsauber. Du kannst str_replace() Arrays mit beliebig vielen Werten übergeben:

PHP:
$search = array('==Start==', '==Ende==',);
$replace = array($_SESSION["Start"], $_SESSION["Ende"],);
$antrag = str_replace($search, $replace, file_get_contents('Muster.rtf'));

Gruß
 
danke für den hinweis.
aber die system.php heißt wie ich zuvor geschrieben hab: systemenvironment.php ich habs in den vorherigen posts nur kürzer gefasst um keine verwirrung zu stiften. also siehe meinen vorherigen post die fettgeschriebenen Hinweise.
zu dem hab ich auch geschrieben, dass nur die ersten beiden formulare included werden, da schon bei diesen beiden der fehler auftritt.
demnach fehlen auch die clients.php und clientroles.php... tut ja aber zu nächst nicht zur sache es soll wirklich nur um die ersten beiden formulare gehen userdata.php und systemenvironment.php
 
Zuletzt bearbeitet:
Problem gefunden (mehr oder weniger)
Es lag/liegt an der Konfiguration des Servers. Auf diesem laufen in einem Anwendungspool ASP Seiten vollständig und PHP Seiten nur begrenzt. Also entschuldigt mich für diesen sinnlosen Hilfe-post. :D

Es lag auch nicht an der PHP.ini... Da ist irgendwas mit dem Server falsch konfiguriert...
also ab hier Thread closed
 
Zurück