Zum Inhalt springen

Probleme mit dem Auslesen der DB

Erstellt am 4. Dezember 2006 · 14 Antworten · letzte Antwort am 7. Dezember 2006

Tags: PHP, Datenbank, Frage

dhoerpel ·

Hmm, vielen Dank für die angebotene Hilfestellung. Dass die Zeile

$res = mysql(TYPO3_db,$query);

fehlerhaft ist hat mich etwas verwundert, da ich das Beispiel hier aus dem Forum gezogen habe, ist aber letz endlich egal. Gemäß der typo3- Doku habe ich versucht meinen Code anzupassen:

<?php

require_once(PATH_tslib.'class.tslib_pibase.php');

class yellowpages_pi1 extends tslib_pibase {
        var $prefixId = 'yellowpages_pi1'; // Same as class name
        var $scriptRelPath = 'pi1/class.yellowpages_pi1.php'; // Path to this script relative to the extension dir.
        var $extKey = 'yellowpages'; // The extension key.
        //var $pi_checkCHash = TRUE;
        var $conf;

        function main($content,$conf) {
                $this->conf=$conf;
                $GLOBALS['TYPO3_DB']->debugOutput = true;
                               
                $content = '<h3>Ergebnis:</h3>';
                $content2 = '<table>';
               
                //Die ausgelesenen Daten       
                $rows=$this->getItems();
                foreach ($rows as $value) {                    
                        $content2 .='<tr><td>'.$rows['content'].'</td></tr><tr><td>'. $rows['customer'].'</td></tr><tr><td></tr>';
                }
               
                $content2 .= '</table>';
                $content = $content . $content2;
                return $this->pi_wrapInBaseClass($content);     
        }

        function getItems() {

		$res = $GLOBALS['TYPO3_DB']->sql(TYPO3_db, 'SELECT * FROM tx_yellowpages_project name=test');

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

    		echo $row['name'].'<br />';

									  }
                return $out;
        }

}

if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/yellowpages/pi1/class.yellowpages_pi1.php']) {
        include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/yellowpages/pi1/class.yellowpages_pi1.php']);
}

?>

Was mich wundert, ist folgendes:

Zumindest die Headline müsste (da in $content) ja ausgegeben werden, selbst wenn die DB- Inhalte nicht ausgelesen werden würden. Aber selbst das wird nicht ausgegeben. Deswegen bin ich gerade etwas ratlos und über jede Hilfe dankbar. 😉

Gruss David

jenses ·

Die Funktion gibt ja auch Content aus,
sowie sql-Fehlermeldungen, aber das ist ja kein Wunder, bei der db-Abfrage :-)
Das bei dir nichts zurückgegeben wird,
hat eine andere Ursache, welche, sagt meine Glaskugel nicht ... ;-)

steffenk ·
'SELECT * FROM tx_yellowpages_project name=test'

??

Wenn ich MySQL wär würd ich da auch nix liefern.

Das ist auch nicht die geeignete Form der Abfrage, für Selects gibts eigene Funktionen

$res=$GLOBALS['TYPO3_DB']->exec_SELECTquery(
  '*', #felder
  'tx_yellowpages_project',  #from
  "name='test'", #where
  '', #group
  '', #order
  ''  #limit
);

PS Dies ist ein Userforum, wo viele User posten, nicht alles ist korrekt. Ein Blick in bestehende Extensions gehört mit zur Pflichtlektüre 😉

dhoerpel ·

Vielen Dank für eure Hilfestellung.
Wie jenses bereits erwähnt hat, liegt das Ausgabeproblem wohl offensichtlich woanders bei mir. Gibt es evtl. Fehlermeldungen in log- Dateien oder so, wo man das Problem nachvollziehen kann oder gibt es sonst noch eine Möglichkeit, ein solches Problem zu finden?

Gruss David

steffenk ·

falsch, es liegt an Dir!

Was fällt Dir auf ?

//Die ausgelesenen Daten
$rows=$this->getItems();

und dort:
return $out;

In dieser Funktion ist so ziemlich alles verkehrt. Richtig muss es sein:

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

Vorrausgesetzt Deine SQL-Abfrae ist auch korrekt ...

jenses ·

Ja ja, das ist klar, nur das Problem, das überhaupt nichts ausgegeben wird, behebst du damit nicht 😉

dhoerpel schrieb

Was mich wundert, ist folgendes:

Zumindest die Headline müsste (da in $content) ja ausgegeben werden, selbst wenn die DB- Inhalte nicht ausgelesen werden würden. Aber selbst das wird nicht ausgegeben. Deswegen bin ich gerade etwas ratlos und über jede Hilfe dankbar.

dhoerpel ·
jenses schrieb

Ja ja, das ist klar, nur das Problem, das überhaupt nichts ausgegeben wird, behebst du damit nicht 😉

Hm, das verstehe ich leider nicht ganz. Wie behebe ich dann das Problem, dass überhaupt etwas ausgegeben wird?

Ich habe die while- Schleife von steffenk so eingebunden, leider ohne Erfolg. Ich habe noch mal den Code angehängt, hoffentlich fällt euch noch etwas auf, was ich falsch gemacht haben könnte...

<?php

require_once(PATH_tslib.'class.tslib_pibase.php');

class yellowpages_pi1 extends tslib_pibase {
        var $prefixId = 'yellowpages_pi1'; // Same as class name
        var $scriptRelPath = 'pi1/class.yellowpages_pi1.php'; // Path to this script relative to the extension dir.
        var $extKey = 'yellowpages'; // The extension key.
        //var $pi_checkCHash = TRUE;
        var $conf;

        function main($content,$conf) {
                $this->conf=$conf;
                $GLOBALS['TYPO3_DB']->debugOutput = true;
                               
                $content = '<h3>Ergebnis:</h3>';
                $content2 = '<table>';
               
                //Die ausgelesenen Daten       
                $rows=$this->getItems();
                foreach ($rows as $value) {                    
                        $content2 .='<tr><td>'.$rows['content'].'</td></tr><tr><td>'. $rows['customer'].'</td></tr><tr><td></tr>';
                }
               
                $content2 .= '</table>';
                $content = $content . $content2;
                return $this->pi_wrapInBaseClass($content);     
        }

        function getItems() {

      $res=$GLOBALS['TYPO3_DB']->exec_SELECTquery(

        '*', #felder
        'tx_yellowpages_project',  #from
        "name='test'", #where
        '', #group
        '', #order
        ''  #limit
      ); 

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

}

if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/yellowpages/pi1/class.yellowpages_pi1.php']) {
        include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/yellowpages/pi1/class.yellowpages_pi1.php']);
}

?>

Vielen Dank!

Gruss David

steffenk ·
foreach ($rows as $value) {                    
                        $content2 .='<tr><td>'.$value['content'].'</td></tr><tr><td>'. $value['customer'].'</td></tr><tr><td></tr>';
                }

auserdem kannst Du Dir mal ein Debug ausgeben lassen

t3lib_div::debug($value);
jenses ·
dhoerpel schrieb
jenses schrieb

Ja ja, das ist klar, nur das Problem, das überhaupt nichts ausgegeben wird, behebst du damit nicht 😉

Hm, das verstehe ich leider nicht ganz. Wie behebe ich dann das Problem, dass überhaupt etwas ausgegeben wird?

Keine Ahnung :-)
Ich habe einfach mal deine ursprüngliche main- und getItems-Funktionen in eine funktionierende und richtig eingebundene Extension eingefügt,
da wird dann sehr wohl der Content angezeigt. ;-)

dhoerpel ·

So, ich habe nun die foreach- Schleife von steffenk eingebunden, leider wird immer noch nichts ausgegeben...
Ich habe mal ein ganz simples Typo3- Testsystem online aufgesetzt, in dem ich meine Extension importiert habe und wo man die Extension bearbeiten/ verändern könnte. Würde euch das helfen, evtl. den Fehler zu finden?

Gruss David

steffenk ·

denk dran edit zu erlauben (im installtool) und dann kannst Du mir Zugansdaten per PN zukommen lassen.

Ok, Problem gelöst.

Du hattest in der pi1 einfach tx_yellowpages in yellowpages geändert. Dadurch stimmten alle Referenzen nicht mehr und die klasse wurde nicht geladen.

dhoerpel ·

Vielen Dank Steffen! Du warst mir eine große Hilfe! Ich habe die Änderungen nun bei mir lokal eingebaut und es funktioniert tadellos!

Gruss David