Session-Problem führt zu fatal error

Mohag

Mitglied
Ich entwickle über EasyPHP auf dem Hiemrechner (phpversion 5.2.8), dort funktioniert das Warenkorb script ohne Probleme.

Nun hab ich es auf den Webserver geladen (phpversion 5.2.9) und der sagt:

Fatal error: Cannot use object of type benutzer as array

besteller ($_SESSION["benutzer"]) wird als '= array()' initialisiert allerdings behandelt er es nicht als solches.

Nun habe ich in einen Versuch gestartet und das Script
von $_SESSION["benutzer"]["name"]
auf $_SESSION["benutzer"]->name umgestellt.
So funktioniert es auch aber ich bekomme an anderen Stellen Probleme. :(

Kennt jemand eine Lösung für dieses Problem?

MfG Mohag.
 
Zuletzt bearbeitet:
Initialisiere benutzer als array,

PHP:
 $_SESSION["benutzer"] = array();

und im Script werden einträge ins array geschrieben.

PHP:
$_SESSION["benutzer"]["name"] = $_POST["name"];

usw..

versuche ich nun auf die Einträge zuzureifen,

PHP:
if(isset($_SESSION["benutzer"]["name"])) echo($_SESSION["benutzer"]["name"]);

Sagt der Parser:
Fatal error: Cannot use object of type benutzer as array

Das script läuft ja (auf dem localhohst system) nur der Webserver will nicht..

Kann das an dem Versionsunterschied liegen?
könnte es helfen in alles in php 4 parsen zu lassen?

MfG Mohag.
 
Hast du eine Variable oder Klasse namens "session"?

In PHP 5.x gibt (oder gab) es einen Bug, der somit die richtig Session überschreiben kann.
Allerdings weiss ich nicht durch welches Verhalten dieser ausgelöst wurde, ich weiss nur noch "da war mal was". ;)

Dass die Session vor dem ersten Zugriff auch gestartet werden muss ist hoffentlich selbstverständlich.
 
Versionsprobleme sind unwarscheinlich.....

Hast du $_SESSION["benutzer"] schon vorher initialisiert?
Als Klassenobjekt?
Aber selbst dann müsste er es überschreiben....
Wenn nein lass $_SESSION["benutzer"] = array(); mal raus denn in PHP brauchst du es bei deiner Syntax nicht als Array initialisieren das merkt er selbst...
Poste mal das Gesamtscript.
 
Das gesamtscript posten ist ein wenig schwierig..
Ist zweisprachig und ein in 6 Schritte aufgeteilter Bestellvorgang..

Ja, die Sessionvariable wird in einer klasse initialisiert.
Und ja, das mit dem session_start() ist mir auch bewusst.
versuchs al grob zu erläutern und ein paar Beispielschnipsel zu geben:

Aufruf des Vorgangsscriptes
-> abfrage bestimmter Grundvoraussetzungen (SID, Sprache und Schritt)
-> ab Schritt 3 überprüf das Script ob $_SESSION["benutzer"] existiert isset()
-> dann wird das $_POST[] array ausgewertet.
Funktioniert bis hierher auch ganz gut, nur wenn ich dann (wenn $_SESSION["benutzer"] existiert) darauf zu greife kommt der error.

Das ist so gesehen der Kopf der Cobra:
PHP:
<?php

/*
*	Session starten 
*/

session_start();

require_once("warenkorb.php");
require_once("besteller.php");

$warenkorb = new warenkorb();
$besteller = new besteller();

if(!isset($_GET["sid"]))
{
	$sid = session_id();
}
else
{
	session_id($_GET["sid"]);
	$sid = $_GET["sid"];
}

if(!isset($_GET["step"])
|| $_GET["step"] == "")
{
	header("Location:?step=1?sid=".$sid);
}
?>

<html>
	<head>
		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
		<meta name="author" content="lilSoft" />
		<meta name="author" content="Marcel Burkhardt" />
		<title>Coinbook bestellen</title>
	</head>
	<body>
<?php
include("head.html");

if($_GET["step"] == 1)
{
	if(!isset($_SESSION["ausgabe"]))
		$_SESSION["ausgabe"] = 1;
	else
		$_SESSION["ausgabe"] += 1;
		
	require_once("order_step1.php");
	$s1 = new step1_de();
	$s1->start_step1();
}

if($_GET["step"] == 2)
{
	if(!isset($_SESSION["ausgabe"]))
		$_SESSION["ausgabe"] = 1;
	else
		$_SESSION["ausgabe"] += 1;
		
	require_once("order_step2.php");
	$s2 = new step2_de();
	$s2->start_step2();
}

if($_GET["step"] == 3)
{
	if(!isset($_SESSION["ausgabe"]))
		$_SESSION["ausgabe"] = 1;
	else
		$_SESSION["ausgabe"] += 1;
		
	if(!isset($_SESSION["besteller"]))
	{
		$besteller->createbesteller();
	}
	if(!isset($_SESSION["warenkorb"]))
	{
		$warenkorb->createwarenkorb();
		$warenkorb->fillwarenkorb();
	}
	
	$bOk = true;
	if(isset($_POST["name"])
	&& strlen($_POST["name"]) > 0)
		$_SESSION["besteller"]["name"] = $_POST["name"];
	else
		$bOk = false;
	
	if(isset($_POST["email"])
	&& strlen($_POST["email"]) > 0)
		$_SESSION["besteller"]["email"] = $_POST["email"];
	else
		$bOk = false;
	
	if(isset($_POST["strasse"])
	&& strlen($_POST["strasse"]) > 0)
		$_SESSION["besteller"]["strasse"] = $_POST["strasse"];
	else
		$bOk = false;
		
	if(isset($_POST["nummer"])
	&& strlen($_POST["nummer"]) > 0)
		$_SESSION["besteller"]["nummer"] = $_POST["nummer"];
	else
		$bOk = false;
		
	if(isset($_POST["plz"])
	&& strlen($_POST["plz"]) > 0)
		$_SESSION["besteller"]["plz"] = $_POST["plz"];
	else
		$bOk = false;
		
	if(isset($_POST["ort"])
	&& strlen($_POST["ort"]) > 0)
		$_SESSION["besteller"]["ort"] = $_POST["ort"];
	else
		$bOk = false;
		
	if(isset($_POST["telefon"]))
		$_SESSION["besteller"]["telefon"] = $_POST["telefon"];
		
	if(isset($_POST["old"]))
	{
		$_SESSION["besteller"]["old"] = true;
		if(isset($_POST["ser1"])
		&& strlen($_POST["ser1"]) > 0)
			$_SESSION["besteller"]["ser1"] = $_POST["ser1"];
		
		if(isset($_POST["ser2"])
		&& strlen($_POST["ser2"]) > 0)
			$_SESSION["besteller"]["ser2"] = $_POST["ser2"];
		else
			$_SESSION["besteller"]["ser1"] = 0;
			
		if(isset($_POST["ser3"])
		&& strlen($_POST["ser3"]) > 0)
			$_SESSION["besteller"]["ser3"] = $_POST["ser3"];	
		else
		{
			$_SESSION["besteller"]["ser1"] = null;
			$_SESSION["besteller"]["ser2"] = null;
		}
	}
	else
	{
		if(isset($_POST["ser1"])
		&& strlen($_POST["ser1"]) < 1
		&& isset($_POST["ser2"])
		&& strlen($_POST["ser2"]) < 1
		&& isset($_POST["ser3"])
		&& strlen($_POST["ser3"]) < 1
		&& isset($_SESSION["besteller"]["old"]))
		{
			$_SESSION["besteller"]["old"] = null;
			$_SESSION["besteller"]["ser1"] = null;
			$_SESSION["besteller"]["ser2"] = null;
			$_SESSION["besteller"]["ser3"] = null;
		}
	}
	
	if(!isset($_GET["artid"]))
	{
		if(!$bOk
		&& (!isset($_SESSION["besteller"]["name"])
		|| !isset($_SESSION["besteller"]["email"])
		|| !isset($_SESSION["besteller"]["strasse"])
		|| !isset($_SESSION["besteller"]["nummer"])
		|| !isset($_SESSION["besteller"]["plz"])
		|| !isset($_SESSION["besteller"]["ort"])))
		{
			require_once("order_step2.php");
			$s2 = new step2_de();
			$s2->start_step2();
		}
	}
		
	if(isset($_SESSION["besteller"])
	&& isset($_SESSION["warenkorb"]))
	{
		require_once("order_step3.php");
		$s3 = new step3_de();
		$s3->start_step3($warenkorb, $_GET["sid"]);
	}
	else
	{
		include_once("order_error.php");
	}
}

if($_GET["step"] == 4)
{
	if(!isset($_SESSION["ausgabe"]))
		$_SESSION["ausgabe"] = 1;
	else
		$_SESSION["ausgabe"] += 1;
		
	if(isset($_POST["waer"]))
	{
		$waer = $_POST["waer"];
	}
	else
	{
		$waer = "EUR";
	}
    
    if(isset($_POST["bUpdate"]))
    {
        $bud = $_POST["bUpdate"];
    }
    else
    {
        $bud = 0;
    }
	
	if(isset($_SESSION["besteller"])
	&& isset($_SESSION["warenkorb"]))
	{
		require_once("order_step4.php");
		$s4 = new step4_de();
		$s4->start_step4($warenkorb, $waer, $bud);
	}
	else
	{
		include_once("order_error.php");
	}
}

if($_GET["step"] == 5)
{
	if(!isset($_SESSION["ausgabe"]))
		$_SESSION["ausgabe"] = 1;
	else
		$_SESSION["ausgabe"] += 1;
		
	
	if(isset($_SESSION["besteller"])
	&& isset($_SESSION["warenkorb"]))
	{
		require_once("order_step5.php");
		$s5 = new order_step5_de();
		$s5->StartBest();
		$warenkorb->createwarenkorb();
		$besteller->createbesteller();
		session_destroy();
	}
	else
	{
		include_once("order_error.php");
		$warenkorb->createwarenkorb();
		$besteller->createbesteller();
		session_destroy();
	}
}

if($_GET["step"] == 6)
{
	require_once("order_step6.php");
	$s6 = new step6_de();
    
	if(isset($_POST["name"])
    && isset($_POST["email"])
    && isset($_POST["strasse"])
    && isset($_POST["nummer"])
    && isset($_POST["plz"])
    && isset($_POST["ort"])
    && isset($_POST["telefon"]))
    {
        $s6->send($_POST["name"], $_POST["email"], $_POST["strasse"], $_POST["nummer"], $_POST["plz"], $_POST["ort"], $_POST["telefon"]);
        ?>
        <script type="text/javascript">window.close(); </script>
        <?php
    }
    else
    {
        $s6->startOutput();
    }
}
	
?>
	</body>
</html>

Nun die besteller.php

Diese soll mir halt im Array $_SESSION[] unter benutzer ein array für dessen Daten schaffen..


PHP:
<?php

/**
 * @author Marcel Burkhardt
 * @copyright 2009
 * 
 * erstellen der Besteller SESSION
 */

class besteller
{
	function besteller()
	{ }
	
	function createbesteller()
	{
		$_SESSION["besteller"] = array();
	}
}

?>

Und nun noch die order_step2.php in der der Fehler das erste mal aufgetaucht ist.
Zudem meckert er es im steuerscript und auch beim warenkorb an..

PHP:
class step2_de
{
	function step2_de()
	{ }
	
	function start_step2()
	{
		?>
<h2>Coinbook (2008) bestellen Schritt 2</h2><br /><br />
<form action="?step=3&sid=<?php echo(session_id()); ?>" method="post">
<table>
	<tr>
		<td>Name:</td><td colspan="2"><input type="text" value="<?php if(isset($_SESSION["besteller"]["name"])) echo($_SESSION["besteller"]["name"]); ?>" name="name" /></td>
	</tr>
	<tr>
		<td>E Mail:</td><td colspan="2"><input type="text" value="<?php if(isset($_SESSION["besteller"]["email"])) echo($_SESSION["besteller"]["email"]); ?>" name="email" /></td>
	</tr>
	<tr>
		<td>Straße:</td><td colspan="2"><input type="text" value="<?php if(isset($_SESSION["besteller"]["strasse"])) echo($_SESSION["besteller"]["strasse"]); ?>" name="strasse" /></td>
	</tr>
	<tr>
		<td>Nummer:</td><td colspan="2"><input type="text" value="<?php if(isset($_SESSION["besteller"]["nummer"])) echo($_SESSION["besteller"]["nummer"]); ?>" name="nummer" /></td>
		</tr>
	<tr>
		<td>Plz:</td><td colspan="2"><input type="text" value="<?php if(isset($_SESSION["besteller"]["plz"])) echo($_SESSION["besteller"]["plz"]); ?>" name="plz" /></td>
	</tr>
	<tr>
		<td>Ort:</td><td colspan="2"><input type="text" value="<?php if(isset($_SESSION["besteller"]["ort"])) echo($_SESSION["besteller"]["ort"]); ?>" name="ort" /></td>
	</tr>
	<tr>
		<td>Telefon:</td><td colspan="2"><input type="text" value="<?php if(isset($_SESSION["besteller"]["telefon"])) echo($_SESSION["besteller"]["telefon"]); ?>" name="telefon" /></td>
	</tr>
	<tr>
		<td colspan="3">(Für eventuelle Rückfragen)</td>
	</tr>
	<tr>
		<td><input type="checkbox" <?php if(isset($_SESSION["besteller"]["old"])) echo('checked="checked"'); ?> name="old" /></td><td colspan="2">Ja, Ich besitze bereits Coinbook in der Version 2006</td>
	</tr>
	<tr>
		<td><input type="text" value="<?php if(isset($_SESSION["besteller"]["ser1"])) echo($_SESSION["besteller"]["ser1"]); ?>" name="ser1" /></td><td><input type="text" value="<?php if(isset($_SESSION["besteller"]["ser2"])) echo($_SESSION["besteller"]["ser2"]); ?>" name="ser2" /></td><td><input type="text" value="<?php if(isset($_SESSION["besteller"]["ser3"])) echo($_SESSION["besteller"]["ser3"]); ?>" name="ser3" /></td>
	</tr>
	<tr>
		<td colspan="3">Für das entfernen der eingegebenen Lizenz müssen alle Felder zurücksetzt werden.</td>
	</tr>
	<tr>
		<td><a href="?step=1&sid=<?php echo(session_id()); ?>" style="text-decoration: none;"><input type="button" value="Einen Schritt zurück" /></a></td><td colspan="2"><input type="submit" value="Weiter zum nächsten Schritt" /></td>
	</tr>
</table>
</form>
		<?php
	}
}

Hier noch der Warenkorb:

PHP:
<?php

/**
 * @author Marcel Burkhardt
 * @copyright 2009
 * 
 * erstellen der Warenkorb SESSION
 * 
 * Füllen der SESSION mit Artikeldaten
 * (Index)
 */
 
 require_once("../../CDbConnection.php");

class warenkorb
{
	function warenkorb()
	{ 
		
	}
	
	function createwarenkorb()
	{
		$_SESSION["warenkorb"] = array();
	}
	
	function fillwarenkorb()
	{
		$Connection = new CDbConnection();
		$verbindung = $Connection->OpenConnection("localhost","cb_adusr","cb_ad_user_pw","CoinbookDb");
		
		$Rows = $Connection->GetRows("*", "tblartikel", "");
		if($Rows)
		{
			while($Row = mysql_fetch_assoc($Rows))
			{
				$_SESSION["warenkorb"][$Row["colIndex"]] = 0;
			}
		}
		
		$Connection->CloseConnection($verbindung);
	}
	
	function Insert($Id)
	{
		$_SESSION["warenkorb"][$Id] = 1;
	}
	
	function Remove($Id)
	{
		$_SESSION["warenkorb"][$Id] = 0;
	}
	
	function _isIn($Id)
	{
		foreach($_SESSION["warenkorb"] as $Index => $menge)
		{
			if($Index == $Id
			&& $menge == 1)
				return true;
		}
		
		return false;
	}
}

?>
 
Hast du mal ein var_dump( $_SESSION ) gemacht und geschaut, ob darin Wirklich nur die gewünschten Datentypen enthalten sind?
Falls du dir nicht sicher bist, poste einfach mal die Ausgabe hier. In deinem Auszug kann ich jedenfalls nichts finden.
 
PHP:
array(3) 
{
           ["ausgabe"]=>  ?(3)
           ["besteller"]=>  array(8)
           {
                     ["name"]=>  string(16) "Marcel Burkhardt"
                     ["email"]=>  string(27) "marcel.burkhardt@lilsoft.de"
                     ["strasse"]=>  string(9) "Bauernweg"
                     ["nummer"]=>  string(1) "9"
                     ["plz"]=>  string(5) "37318" 
                     ["ort"]=>  string(9) "Bornhagen"
                     ["telefon"]=>  string(0) "" 
                     ["serok"]=>  int(0) 
            }
          ["warenkorb"]=>  array(0) 
          {
          }
 }
Das ist die Ausgabe des var_dump() sieht (finde ich) alles bestens aus.

Mach ich jetzt wieder einen Schritt zurück kommt der ERROR.

MfG Mohag
 
wie jetzt? Ist das die Ausgabe nach dem fehler oder wie? oO
Setze mehrere var_dump vor und nach veränderung der variable.
 
PHP:
array(3)
 {
         ["ausgabe"]=>  ?(5)
         ["besteller"]=>  &object(besteller)#2 (0) 
         { 
         }
         ["warenkorb"]=>  &object(warenkorb)#3 (0)
         {
         }
 }

Seh ich das richtig das er mir beim Sprung weiter (oder zurück)
die SESSION var löscht bzw ein object (klasse o. ä.) daraus macht..
Na gut, ist ja auch der Fehler den er beschreibt..

Nur, wo kommt das her

MfG Mohag.
 
Zurück