Zum Inhalt springen

mysql fetch assoc fehler bei eigener extension

Erstellt am 7. August 2004 · 10 Antworten · letzte Antwort am 7. August 2004

Tags: PHP, Datenbank, Frage

HH ·

hallo,
habe eine extension geschrieben mit denen daten aus einer anderen datenbank ausgelesen werden können und in typo3 angezeigt,

bekomme jetzt aber nach umzug auf einen neuen server (suse linux) immer einen fehler

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /srv/www/htdocs/typo3_src-3.6.2/t3lib/class.t3lib_db.php on line 689

hab das problem schon mal soweit eingeschränkt,
der fehler tritt genau in der zeile auf, in der ich die datenbanken in meiner extension wechsel

if (!mysql_select_db("stuttgart")) {
                                  $content  = "Kann  mydbname nicht auswählen: " . mysql_error();
                                  exit;
                                }

da es vorher einwandfrei funktioniert hatte, kann es was mit mysql rechten zu tun haben?
kenn mich mit mysql nicht so gut aus
danke

doku ·

such doch einfach im forum nach deiner fehlermeldung...

also z.b. nach: mysql_fetch_assoc()
das is schon zigmal aufgetreten.

HH ·

danke, das hilft mir weiter,
leider gehts dabei immer um tabellen die nicht exakt passen, das problem hab ich leider nicht, wäre ja mit einem compare erledigt,
ich kann keine db wechseln

doku ·
HH schrieb

danke, das hilft mir weiter,
leider gehts dabei immer um tabellen die nicht exakt passen, das problem hab ich leider nicht, wäre ja mit einem compare erledigt,
ich kann keine db wechseln

nö, es geht eigentlich immer um die cache tabellen (cache_pages, cache_pagesection), die geleert oder gelöscht und neu angelegt werden müssen.
probier das doch einfach mal.

HH ·

nö, es geht eigentlich immer um die cache tabellen (cache_pages, cache_pagesection), die geleert oder gelöscht und neu angelegt werden müssen.

danke für die schnelle antwort, das wars leider auch nicht, hab die tabellen zuerst geleert, dann gelöscht,
dann wieder erstellt mit dem db analyzer,
immer noch der selbe fehler
😢

doku ·

letzter versuch:
leere den ordner /typo3temp komplett (kannst du auch per klick im install-tool machen).
das hat mich auch schonbmal gerettet.

HH ·

ok, hier der code der extension

<?php
/***************************************************************
*  Copyright notice
*  
*  This script is part of the Typo3 project. The Typo3 project is 
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
* 
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
* 
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/** 
 * Plugin 'HSP Buchungsys.' for the 'hsp_stgt' extension.
 *
 * @author	Harald Hochwald <hh@fastmovingbytes.com>
 */


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

class tx_hspstgt_pi1 extends tslib_pibase {
	var $prefixId = "tx_hspstgt_pi1";		// Same as class name
	var $scriptRelPath = "pi1/class.tx_hspstgt_pi1.php";	// Path to this script relative to the extension dir.
	var $extKey = "hsp_stgt";	// The extension key.
	
	/**
	 * [Put your description here]
	 */
	function main($content,$conf)	{
//////////////////////////////////////////////////////////////////////
// Hier gehts Los!!!



global $GLOBALS;
// Ermittelt die aktuelle Page ID, nur der Eintrag der Seite in Sportarten soll ausgelesen werden
$akt_pid = $GLOBALS["TSFE"]->id;

// Tabelle tt_content Feld sports auslesen, wo pid = akt_pid


$sql = "SELECT *
            FROM   tt_content
            WHERE  pid = $akt_pid AND deleted = 0 AND CType = 'hsp_stgt_pi1'";

    $result = mysql_query($sql);

    if (!$result) {
        $content = "Anfrage ($sql) konnte nicht ausgeführt werden : " . mysql_error();
        exit;
    }
    
    if (mysql_num_rows($result) == 0) {
        $content = "Keine Zeilen gefunden, nichts auszugeben, daher Abbruch";
        exit;
    }

    // Solange eine Zeile mit Daten existiert, wird dies in dem
    // assoziativen Array $row abgelegt.

    $row = mysql_fetch_array($result); 
    $sportart = $row["tx_hspstgt_sports"];
   //$row = mysql_fetch_row($result);
   //$sportart = $row[0];   

//Array für die Wochentage definieren
		$day_ow = array("1" => "Mo",
		                        "2" => "Di",
	                        	        "3" => "Mi",
			        "4" => "Do",
			        "5" => "Fr",
                                                        "6" => "Sa");
		
		
		//Einträge mit z.b. Eintrag Fussball aus dem Buchungssystem auswählen.
		//Datenbank wählen

		if (!@mysql_select_db("stuttgart2")) {
                                  $content  = "Kann  mydbname nicht auswählen: " . mysql_error();
                                  exit;
                                }
        
                                //Auslesen des aktiven Zeitruams aus Buchungsystabelle Zeitraum
                                $sql_akt = "SELECT * FROM zeitraum WHERE aktiv ='0001'";
                                $result_akt = mysql_query($sql_akt);
                                $row_akt = mysql_fetch_row($result_akt);
                                $aktiv_id = $row_akt[0]; 

		//Sql Query um die Einträge aus der Tabelle sportstaetten zu lesen
		$sql3 = "SELECT * FROM sportstaetten";
		//Query an DB senden (spoertstaetten
		$result3 = mysql_query($sql3);
		
		while ($row3 = mysql_fetch_assoc($result3)) {
		  $location[$row3["sportstaette_id"]] = $row3["sportstaette_name"];
		}
		//SQL Query
		$sql2 = "SELECT * FROM   kurse WHERE  sportart = '$sportart' AND aktiv='1' AND periode='$aktiv_id' ORDER BY tag1, uhrzeit1";
		
		//Query an Datenbank senden
		$result2 = mysql_query($sql2);
        
		//Datenbank Fehler abfangen
                                if (!$result2) {
                                  $content = "Anfrage ($sql2) konnte nicht ausgeführt werden : " . mysql_error();
                                  exit;
                                }
                               //Keine Einträge unter der Sportart?!? 
                               if (mysql_num_rows($result2) == 0) {
                                 $content = "Keine Einträge gefunden! Keine Einträge mit dem Namen '$sportart' im HSP Buchungssystem vorhanden oder Eintrag in Typo3 falsch geschrieben?!?";
                                 $fehler = "1";
                                 //exit;
                                }	
		//Ausgabe Tabelle Sportarten
                         if($fehler != "1") {
                                $content = "<b><i>".$sportart."</i></b><br>";
		$content .= "<table width='90%'>";	
		$color = array ("1" => "#f4f3af",
		                "2" => "fefee4");
		$i=1;
                                  $content .= "<tr bgcolor=#fefee4><td>Kursnr.</td><td>Tag</td><td>Uhrzeit</td><td>Details</td><td>Ort</td><td>Leitung</td><td>Status</td></tr>";
		while ($row = mysql_fetch_assoc($result2)) {
                                  $content .= "<tr bgcolor=$color[$i]><td>".$row["kursnr"]."</td>";
                                  //mherere Termin
                                  $content .= "<td>".$day_ow[$row["tag1"]];
                                  if($row["tag2"]) $content .= "<br>".$day_ow[$row["tag2"]];
                                  if($row["tag3"]) $content .= "<br>".$day_ow[$row["tag3"]];
                                  if($row["tag4"]) $content .= "<br>".$day_ow[$row["tag4"]];
                                  if($row["tag5"]) $content .= "<br>".$day_ow[$row["tag5"]];
                                  $content .= "</td>";

                                  //mehrere Uhrzeiten
                                  $content .= "<td>".$row["uhrzeit1"];
                                  if($row["uhrzeit2"]) $content.="<br>".$row["uhrzeit2"];
                                  if($row["uhrzeit3"]) $content.="<br>".$row["uhrzeit3"];
                                  if($row["uhrzeit4"]) $content.="<br>".$row["uhrzeit4"];
                                  if($row["uhrzeit5"]) $content.="<br>".$row["uhrzeit5"];
                                  $content .= "</td>";
		  $content .= "<td>".$row["details"]."</td>";
                                  
                                  //mehrere Sportstätten
		  $content .= "<td>".$location[$row["sportstaette1"]];
                                  if($row["sportstaette2"]) $content.="<br>".$location[$row["sportstaette2"]];
                                  if($row["sportstaette3"]) $content.="<br>".$location[$row["sportstaette3"]]; 
                                  if($row["sportstaette4"]) $content.="<br>".$location[$row["sportstaette4"]]; 
                                  if($row["sportstaette5"]) $content.="<br>".$location[$row["sportstaette5"]]; 
                                  $content .= "</td>";
		  $content .= "<td>".$row["kursleiter1"]."</td>";
		  //Prüfen ob noch plätze frei sind
		  $kursid = $row["kursid"];
		  if ($row["frei"] > 0) {
		    $content .= "<td><a href='https://129.69.227.68/hsp/cgi/anmeldung.fcgi?Kursid=$kursid'>Kurs buchen</a></td>";
		  }
                                  //warteliste dann trotzdem link
                                  elseif ($row["warteliste"] ==1) {
                                  $content .= "<td><a href='https://129.69.227.68/hsp/cgi/anmeldung.fcgi?Kursid=$kursid'>zur Warteliste</a></td>";
                                  }
		  else {
		    $content .= "<td>ausgebucht</td>";
		  }
		  $content .= "</tr>";
		  if ($i == 1) $i=2;
		  else $i=1;
                                }
                                $content .= "</table>"; 
                         }
		
//$content = "Hello World!!!";
		

    
        
    






//$content .= "<br><br>Die Seiten ID ist: ".$akt_pid."<br>UID: ".$akt_uid."<br>Die Sportart ist: ".$sportart."<br><br>";
return $content;












/////////////////////////////////////////////////////////////////////		
//return "Hello World!<HR>
		//	Here is the TypoScript passed to the method:".
		//			t3lib_div::view_array($conf);
	}
}



if (defined("TYPO3_MODE") && $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/hsp_stgt/pi1/class.tx_hspstgt_pi1.php"])	{
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/hsp_stgt/pi1/class.tx_hspstgt_pi1.php"]);
}

?>
Unbekannter Benutzer ·
$sql = "SELECT *
            FROM   tt_content
            WHERE  pid = $akt_pid AND deleted = 0 AND CType = 'hsp_stgt_pi1'";

sollte schonmal

WHERE pid=".$akt_pid."AND deleted = 0...

heissen.

und warum steht bei deiner funktion das @ mit im !-statement und bei deinem post nicht?

HH ·

😃
das @ steht deswegen drin weil ich in der zwischenzeit verschiedenes versucht habe, leider ohne erfolg,

was ich vielleicht vergessen habe zu sagen, das script lief schon, und läuft auch fast...d.h. die daten werden aus der externen datenbank ausgelesen und angezeigt, ich bekomme lediglich diesen datenbank fehler und seiteninhalte unterhalb dieses extension inhaltes (normaler typo3 inhalt) wird nicht mehr angezeigt.

so sieht zum beispiel dann so ne seite aus:
http://129.69.227.68/cms/index.php?id=31

außerdem hab ich folgendes interessante posting auf typo3.org gefunden
http://typo3.org/documentation/mailing-lists/user-list-archive/thread/35897/?tx_maillisttofaq_pi1%5Bsword%5D=mysql_fetch_assoc%28%29&tx_maillisttofaq_pi1%5Banswered_only%5D=0&tx_maillisttofaq_pi1%5Bmode%5D=1

im grunde steh da drin, dass wird eine erneute verbindung zu einer anderen datenbank aufgenommen, typo3 danach die rechte dieser letzten verbindung übernimmt, die reichen dann wohl typo3 nicht mehr aus....ganz verstanden hab ichd as allerdings nicht....

HH ·

HABS!!!!! 😃 😃 😃
sowas wäre vielleicht tatsächlich was für die FAQ, egal so funktionierts, bevor ich die Datenbank wechsle, stelle ich eine neue verbindung her.
die typo3 verbindung scheint dann irgendwie erhalten zu bleiben.

  //WORKAROUND
                            $myLink = @mysql_connect("dbhost", "dbuser","dbpasswort");

		//Einträge mit z.b. Eintrag Fussball aus dem Buchungssystem auswählen.
		//Datenbank wählen

		if (!mysql_select_db("stuttgart2")) {
                                  $content  = "Kann  mydbname nicht auswählen: " . mysql_error();
                                  exit;
                                }

keine fehler mehr, alles funktioniert perfekt,

trotzdem vielen dank an euch!!!!