Zum Inhalt springen

Daten aus Datenbank lesen

Erstellt am 13. Mai 2008 · 8 Antworten · letzte Antwort am 29. Januar 2009

Tags: PHP, Datenbank, Frage

Major_Tom13 ·

Hallo,

ich weiß nicht mehr weiter. Ich schreibe gerade an einer Extension (Es ist meine erste) und habe dafür bereits mit dem Kickstarter eine Tabelle in der Datenbank angelegt wie ich sie brauche. Das hat alles wunderbar funktioniert.

Jetzt wollte ich die Daten aus der Datenbank auslesen und habe dafür diverse Tutorials gelesen und ich denke ich habe die Grundsätze auch verstanden.

Dennoch bekomme ich die Inhalte nicht in die Marker geschrieben und ich weiß nicht wo mein Fehler ist. Selbst stundenlanges recherchieren im Internet und auch in diversen Foren brachte mich nicht weiter.

Hier ist mein Code:

function main($content,$conf)	{
	$this->conf=$conf;
	$this->pi_setPiVarDefaults();
	$this->pi_loadLL();
		
	// Lade das Template-File.		
        $this->id=$GLOBALS['TSFE']->id;
	$this->template=$this->cObj->fileResource('EXT:ms_job/fe_anzeige.html');
		
	// Rufe die Funktion displayAll() auf und schreibe das Ergebnis nach $content
	$content .= $this->showItem();

	// Gebe den erstellten Content zurück
	return $this->pi_wrapInBaseClass($content);
}
	
function showItem(){
	#Subpart  $subpart=$this->cObj->getSubpart($this->template,'###TEMPLATE_DISPLAY_ALL###'); 
        #Datensatz holen
	$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','tx_msjob_requierements','uid = 43');
        
	$record = $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);		
	while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) 	{
		$record[] .= $row;
	} 
		
        #Marker füllen
	$markerArray['###JOB_STATUS###']=$record['ms_job_status'];
        return $this->cObj->substituteMarkerArrayCached($subpart,$markerArray,array(),array());     
	}
jochen ·

Ground Control to Major Tom...

kann es sein, dass nur der Name Deiner DB-Tabelle ("tx_msjob_requierements") nicht stimmt? Heisst die evtl. "tx_msjob_requirements"?

Was sagt das Debugging (sqlDebug, cc_debug)? Bekommst Du überhaupt etwas aus der Datenbank zurück?

Grüße
Jochen

Unbekannter Benutzer ·

In Zeile 18 deines Codes:

#Subpart $subpart=$this->cObj->getSubpart($this->template,'###TEMPLATE_DISPLAY_ALL###');

wird der Subpart geladen. Diese Zeile steht aber in einer Zeile mit dem Kommentar und wird deshalb ja auch als Kommentar interpretiert, also der Subpart nie geladen.
Oder ist das beim kopieren ins Formular passiert?

Major_Tom13 ·

Vielen Dank an alle! Wer lesen kann ist klar im Vorteil. Habe heute nochmal an die Datenbank Hand angelegt und den Fehler gefunden.

Ich will ja die Daten auslesen, wo die UID = 43 ist (Wird später noch verändert). Doof nur, dass ich keinen Datensatz mit der UID = 43 habe. Ich weiß gar nicht wie ich auf den Trichter gekommen bin.

Also der Code funktioniert soweit (Nur das ich für die 43 was anderes einsetzen muss).

Jetzt schließt sich gleich eine andere Frage mit an:

Ich habe in meinen Tabellen ja Integerwerte aus denen im Backend die "Reinschriften" generiert werden.

Also zum Beispiel im Feld ms_job_status:

1 bedeutet zum Beispiel gekündigt
2 bedeutet zum Beispiel gelangweilt
3 bedeutet zum Beispiel will keinen Job
usw.

Wenn ich also mit dem Code die Datenbank auslese, bekomme ich im Frontend die Integer angezeigt. Wie kann ich auf einfachste Weise diesen Werten im Frontend den "Reintext" zuweisen.

Also statt:
Status: 1

Lieber so:
Status: gekündigt

kuan yin ·

Hallo major_Tom13,

#
#Datensatz holen
#
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','tx_msjob_requierements','uid = 43');

gibt es eine Möglichkeit die Daten für alle uid zu lesen?
uid = 1, bis 50 zum Beispiel

jochen ·

Hallo kuan yin,

das ist eine reine SQL-Sache. Schau Dir am besten die Syntax für die WHERE-Klausel (dritter Parameter in der exec_SELECTquery-Methode) an, damit kannst Du jede Menge Bereichseingrenzungen vornehmen. Einer der ersten Google-Treffer war z.B. http://www.w3schools.com/php/php_mysql_where.asp

Wenn die WHERE-Klausel weggelassen wird (bzw. dritter Parameter von exec_SELECTquery leer), dann werden alle Datensätze zurück geliefert.

Grüße
Jochen

jochen ·

Hallo Deluxe133,

poste doch bitte einmal deinen kompletten Befehl und schreib dazu, welche Datensätze du geliefert bekommen möchtest.

Grüße
Jochen

marc-willmann ·

moin Deluxe133,

das ist logisch, weil Du nur den letzten Record ausliest.

    $record = $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);      
    while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))       {
            $record[] .= $row;
    }

Hier gehst Du einmal durch die komplette Liste, ohne was zu machen. Am Ende dieser Schleife steht der letzte Datensatz in Deinem $record.

        #Marker füllen
        $markerArray['###JOB_STATUS###']=$record['ms_job_status'];
        return $this->cObj->substituteMarkerArrayCached($subpart,$markerArray,array(),array());

den Du dann hier zurückgibst :-) Die Datenbank macht schon das Richtige, aber Du wirfst (fast) alle relevanten Daten weg...