Zum Inhalt springen

Session bei USER_INT_obj

Erstellt am 15. April 2008 · 4 Antworten · letzte Antwort am 28. April 2008

Tags: Frage

McGregor ·

Hi!

Eigentlich dachte ich, ich wüsste, wie man Sessions schreibt und ließt. Aber irgendwie will das nicht. Ich bekomme keine Daten in die Session geschrieben...
Kann das am Caching liegen?

Eine Suchseite (natürlich nicht gecached) zeigt Artikel, die ich in den Warenkorb legen möchte. Das Formular verweißt auf die selbe Seite und soll die Daten in eine Session schreiben.

$this->pi_USER_INT_obj=1;

[...]

$artikel = array();
$artikel = unserialize($GLOBALS["TSFE"]->fe_user->getKey('ses','wd'));

[...]

if (isset($this->piVars['warenkorb'])) {
  $content .= 'Artikel wurde hinzugefügt';
  $artikel[$this->piVars['article']] = $this->piVars['amount'];
  $GLOBALS["TSFE"]->fe_user->setKey('ses','wd',serialize($artikel));
}

Mache ich da einen grundsätzlichen Fehler?
Apropos. Der Seitenaufruf erfolgt mit Übergabe des Parameters "no_cache=1"

Grüße und Danke
McGregor

P.S. Das Ganze wird natürlich noch optimiert. Hier geht es erstmal, um die Funktionalität.

jenses ·
$this->pi_USER_INT_obj=1;

[...]

$artikel = array();
$GLOBALS["TSFE"]->fe_user->fetchSessionData();
$artikel = unserialize($GLOBALS["TSFE"]->fe_user->getKey('ses','wd'));

[...]

if (isset($this->piVars['warenkorb'])) {
  $content .= 'Artikel wurde hinzugefügt';
  $artikel[$this->piVars['article']] = $this->piVars['amount'];
  $GLOBALS["TSFE"]->fe_user->setKey('ses','wd',serialize($artikel));
  $GLOBALS["TSFE"]->fe_user->storeSessionData();
}
McGregor ·

Hi!

Danke für den Hinweis. Aber auch jetzt bekomme ich keine Daten in die Session.
Ich habe sogar zu Testzwecken versucht einen einfachen String reinzuschreiben. Ist aber auch fehlgeschlagen.
Kann da irgendeine andere Einstellung von TYPO3 das blocken?
Muss ich im TS noch ein Flag setzen?

Bin echt ratlos, da es auf einer anderen Seite von mir funktioniert und hier nicht (die Angaben scheinen identisch). Benutze übrigens 4.0.6.

Grüße
McGregor

McGregor ·

Hi nochmal

Ich habe den Fehler eingegrenzt. Es liegt an der neuen Datenbank, die ich benutze.
TYPO3 kann dann nicht mehr in die eigenen Datenbank schreiben, weil ich per

$datenbank = mysql_pconnect("localhost", "*****", "******");
$tabellen = mysql_select_db("cce_base", $datenbank);

die zu benutzende Datenbank wechsle.
Jetzt habe ich schon einiges versucht, aber das technische Know-How fehlt mir.
Wie kann ich parallel auf 2 Datenbanken zugreifen und die Vorteile von TYPO3 nutzen.

In diesem Beispiel heißt die Datenbank cce_base und ist _nicht_ die Standarddatenbank, die in der localconf angegeben ist. Ich muss daher erst eine Verbindung aufbauen und diese dann (idealerweise) halten. Dabei darf die urspüngliche TYPO3-DB nicht verloren gehen.

$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','articles', 'id='.$para['id']);
$row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);

//und jetzt die eigentliche DB (bloß wie????)

$res2 = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','fe_user', 'uid='.$para['uid']);
$row2 = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res2);

Wie geht das?

Danke
McGregor

McGregor ·

Meine Lösung:

Da ich keinen Ansatz gefunden habe mit TYPO3-Bordmitteln eine weitere Verbindung zu einer anderen Datenbank herzustellen, habe ich mich eines "Tricks" bedient.

Ich lass das pconnect und die Auswahl der Datenbank weg (Verbindung besteht ja schon) und setze die Anfrage per

 $q = 'SELECT * FROM cce_base.CVSArticle WHERE uid='.$id;
 $r = mysql_query($q);
 $row = mysql_fetch_assoc($r);

direkt an die gewünschte Datenbank.Tabelle!

Grüße
McGregor