Zum Inhalt springen

Datenbankabfrage ob Datensatz existiert

Erstellt am 15. Mai 2007 · 3 Antworten · letzte Antwort am 21. Mai 2007

Tags: Datenbank, Frage

nicokaiser ·

Hallo Typo3-Gemeinde,

sitze gerade vor folgenden Problem, ich möchte in Typoscript eine Abfrage von der Tabelle tx_pbsurvey_results machen und dort prüfen ob ein Datensatz mit der userid(userid des aktuellen eingeloggten nutzers) finished=1 und einer bestimmten Frageid existiert.

nur leider komme ich da in TypoScript nicht klar.

Grüße

Nico Kaiser

nicokaiser ·

So nach langer BAstelarbeit hab eich ein erstes Ergebnis

page.20 = CONTENT
   page.20 {
      table = tx_pbsurvey_results
      select {
         pidInList = 81
         selectFields = count(*) as count
         where = (finished=1)
      }
      renderObj = COA
      renderObj {
      10 = TEXT
      10.field = count
      10.wrap = <h2>* | * </h2>
      }
  }

hiermit bekomme ich die Gesamtanzahl der Datensätze, die fertig bearbeitet sind. Jetzt will ich aber das WHERE so erweitern, das nur die Datensätze angezeigt werden, die zum aktuellen Nutzer gehöhren. Also muss ich irgendwie glob:TSFE:fe_user:user:uid mit in mein WHERE einbeziehen. Nur finde ich hierzu keine Lösung.

Weiter möchte ich das Ergebnis was beim Select raus kommt, gerne für eine Condition verwenden. Wie kann ich das machen?

Grüße

Nico Kaiser

nicokaiser ·

So nun habe ich auch das hinbekommen, jetzt macht er eine abfrag eund zeigt nur die Datensätze des aktuellen eingeloggten nutzers an.

page.20 = CONTENT
   page.20 {
      table = tx_pbsurvey_results
      select {
         pidInList = 81
         selectFields = count(*) as count
         where = (finished=1)
         andWhere{
          data = glob:TSFE:fe_user:user:uid
          wrap = tx_pbsurvey_results.user=|
         }
      }
      renderObj = COA
      renderObj {
      10 = TEXT
      10.field = count
      10.wrap = <h2>* | * </h2>
      }
  }

jetzt habe ich nur noch ein caching Problem. Jedesmal wenn sich in der DB was ändert muss ich den FE Cache leeren. Wie kann ich das in TypoScript lösen, das änderungen in der DB gleich im FE sichtbar sind.

Weiter weiß ich noch nicht, wie ich das Ergebnis aus dem Select für meine Condition verwenden kann.

Grüße

Nico Kaiser

nicokaiser ·

Hallo Typo3-Gemeinde,

habe jetzt das Problem lösen können, jedoch auf einer anderen Art. Mittels userFunc wird ein php-Script aufgerufen. Diesem Script wird der Parameter qpid mitgeliefert. Qpid enthält die ID des Ordner wo die Fragen enthalten sind welche über die Function javascript:opener.questionpop('.$qpid.') aufgerufen wird. Das PHP Script liefert einen kompletten <body>-Tag zurück, den ich in meinen Fenster einbinde. Weiter prüft das PHP-Script, ob der aktuelle Nutzer den Fragebogen bereits ausgefüllt hat. Wenn er dies noch nicht erledigt hat, wird der Fragebogen in einem neuen Fenster aufgerufen.

config.no_cache = 1
includeLibs.popupstring = fileadmin/scripts/popupstring.php 
 temp.info = USER 
 temp.info { 
   userFunc = user_popupstring->main 
   qpid=81
 } 
   

[browser = msie]
   temp.js= COA
   temp.js{
      10 = TEXT
      10.value = <script language="javascript" src="typo3conf/ext/oc_stream/pi1/res/ie-mplayer.js"></script>
   }
   page.headerData.999 = COA
   page.headerData.999 < temp.js
   page.bodyTagCObject < temp.info
[ELSE]
 page.bodyTagCObject < temp.info
[global]
<?php
 class user_popupstring { 
 var $cObj;// The backReference to the mother cObj object set at call time 
 
 function main($content,$conf){ 
 # $browser (msie, oder anderer)
 # $userid (aktuelle userid)
 # $qpid (question page ordner)
 $qpid = $conf["qpid"];
 $browser_str = '';
 $userid = $GLOBALS['TSFE']->fe_user->user['uid'];
 
 $result = $GLOBALS['TYPO3_DB']->exec_SELECTquery('count(*)','tx_pbsurvey_results','finished=1 AND user='.$userid.' AND pid = '.$qpid.'');
 $result = $GLOBALS['TYPO3_DB']->sql_fetch_row($result);
 if (strstr($_SERVER['HTTP_USER_AGENT'],'MSIE')){
  $browser_str = 'onload="loader()" onunload="javascript:ende(2)"';
 } else  {
  $browser_str = 'onload="initPresentation()"'; 
 }
  
 if ($result[0]==0){
  $content.= '<body '.$browser_str.' onunload="javascript:opener.questionpop('.$qpid.')">';
 } else {
  $content.= '<body '.$browser_str.'>';
 };
 return $content; 
 }
} 
?>