Hoi allemaal,

Ik ben de laatste tijd bezig geweest met een session handler om sessies naar de database te schrijven. Nu gaat er alleen iets mis met het schrijven naar de database. De sessie wordt geschreven, alleen is het sessie_id regelmatig 0 en wordt de waarde nooit ingevuldt. De schrijf functie van de handler is:


<?
function write($ses_id,$ses_data)
{
	//$ses_id is het id van de sessie, net zoals bij de read functie
	//$ses_data is de data die geschreven moet worden
	
	//we gaan de controle aanmaken, zodat de sessie ook alleen bij 1 ip geldig is:
	$controle = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']);
	
	//uiteraard willen we alles weer in de DB schrijven. Hiervoor weer een query opstellen:
	$query  = "INSERT INTO Sessies";			//we gaan de gegevens in de tabel Sessies opslaan
	$query .= " (sessie_id,tijd_aangemaakt,waarde, controle)"; //de velden waar de gegevens moeten komen
	$query .= " VALUES";							//uiteraard moeten er gegevens in komen
	$query .= " ('".mysql_real_escape_string($ses_id)."', NOW(), 
	'".mysql_real_escape_string($ses_data)."', '".$controle."')";					//en dit zijn de gegevens die we in de DB zetten
	
	//nu gaan we die query weer uitvoeren
	$result = mysql_query($query);
	
	//en kijken of dat gelukt is
	if(!$result)
	{
		//niet gelukt
		return false; //terugsturen dat het verkeerd ging
	}
	else
	{
		//het is gelukt waarschijnlijk gelukt. Nog 1 laatste check:
		if(mysql_affected_rows() != 1)
		{
			//het aantal aangepaste rijen is niet 1. Dus blijkbaar ging er toch iets fout.
			return false; //terugsturen dat er iets fout ging
		}
		else
		{
			//alles ging goed en de sessie is opgeslagen
			return true; //terugsturen dat alles gelukt is
		}
	}
}?>


Schrijven gebeurt gewoon door $_SESSION['bla'] = "tekst";

Heeft iemand een idee waarom het fout gaat?
wat is de foutmelding?
gebruik anders error_reporting(E_ALL | E_NOTICE);
Staat er wel session_start(); boven ieder bestand? Anders zal de sessie niet eens worden doorgegeven...

Wat geeft mysql_error() terug? Wat krijg je te zien als je de query echo'd? Klopt dan alles?
Er ontstaan geen foutmeldingen. Dat is juist het hele probleem. Hij wil alleen gewoon de data niet juist in de DB zetten. Snap niet waarom dat niet gebeurt?

session_start(); staat overal boven. mysql_error() geeft ook niets.

Wat zou je moeten krijgen als je de query echo'd
Wat versta jij onder 'niet juist'?

In je huidige script geef je nergens een foutmelding als je query mislukt. Het enige dat je doet is de functie false terug laten geven, maar een SQL foutmelding wordt nergens getoond...
onder niet juist versta ik dat de gegevens niet goed in de database komen te staan. Je hebt gelijk over de SQL foutmeldinngen. Deze zal ik er in zetten.

Edit: Er worden bij het uitvoeren van het script ook geen foutmeldingen geproduceerd. Ik denk dat de variabelen ses_data en ses_id dan leeg zijn? Maar dat zouden variabelen moeten zijn die door de sessie meegegeven moeten worden...toch?
Ja maar wat bedoel je dan weer met 'niet goed'?!

Komt er niets in de database, komen er incorrecte gegevens in de database, etc? Probeer nu eens precies te omschrijven wat er fout gaat. 'Niet juist' en 'niet goed' zijn zo nietszeggend. Dat is het zelfde als dat ik zou zeggen: 'Mijn script werkt niet goed, kun je me helpen?'...
Ik heb in de database een tabel met de velden: sessie_id, tijd_aangemaakt, waarde en controle. De velden controle en tijd_aangemaakt worden ingevuld zoals het hoort. Het veld sessie_id krijgt steeds als waarde 0. Leeg dus. Het veld waarde blijft ook leeg.
Nou dan weet je dus direct dat de variabelen $ses_id en $ses_data niet correct en dus blijkbaar ook leeg zijn. Dat zul je dus moeten gaan controleren...
Wat voor datatypes zijn al je velden in je database? En dan vooral de sessieid.
Toen ik de $ses_id en $ses_data ging afvangen in de handler, werd de waarde opeens geschreven, terwijl ik toch echt niets verandert heb in de overige code. Vraag me dus niet wat de fout zelf was, ik weet het niet. Het script is nu echter wel weer uitgebreid met extra foutafhandeling. Bedankt voor het helpen en meekijken in ieder geval.

Edit: sessie_id is type Int(eger) en waarde is Varchar

Reageren