Fehler in Abfrage

Regenmacher

schweizer
3 Mai 2006
576
33
Hallo, wer kann mir weiterhelfen?

-----------------------------------------------------------------------------------------
Aktuell geht es auf Seite 2 weiter, hier der Link:
https://www.klamm.de/forum/f28/fehler-in-abfrage-375759-2.html#post6717026

-----------------------------------------------------------------------------------------
ich erstelle eine Seite, bei der der ganze Text in mehreren Sprachen in einer DB ist.

dazu habe ich folgende Abfrage:

Code:
 <? $abfrage = "SELECT $language FROM texte WHERE id = '3'";
$abfrage2 = mysql_query($abfrage);
while ($row = mysql_fetch_object($abfrage2)) {
	$texte3  = $row->$language;
	}
	<? echo " $texte3" ?>
Ich erhalte jeweils den Fehler
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/web5/html/design/header.php on line 3

Das is die Tabelle
-- Tabellenstruktur für Tabelle `texte`
--

CREATE TABLE IF NOT EXISTS `texte` (
`id` decimal(5,0) NOT NULL default '0',
`d` longtext NOT NULL,
`f` longtext NOT NULL,
`i` longtext NOT NULL,
`r` longtext NOT NULL,
`e` longtext NOT NULL,
`standort` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Daten für Tabelle `texte`
--

INSERT INTO `texte` (`id`, `d`, `f`, `i`, `r`, `e`, `standort`) VALUES
(1, 'Montag', '', '', '', 'unbekannt', '');
INSERT INTO `texte` (`id`, `d`, `f`, `i`, `r`, `e`, `standort`) VALUES
(2, 'Dienstag', '', '', '', 'unbekannt', '');
INSERT INTO `texte` (`id`, `d`, `f`, `i`, `r`, `e`, `standort`) VALUES
(3, 'Mittwoch', '', '', '', '', '');

Ich habe den Code 1:1 von einer alten Seite übernommen ;)

wer kann mir weiterhelfen?
 
Zuletzt bearbeitet:
Text ist sicherlich ein geschütztes Schlüsselwort und muss deshalb, wenn nicht ein anderer genommen wird, in `` gesetzt werden.
 
mich würde ebenso interessieren was die Variable $language beinhaltet

einfach mal var_dumpen und evtl sauber syntaktieren
 
PHP:
<? 
$abfrage = "SELECT {$language} FROM text WHERE id = '3'";
$abfrage2 = mysql_query($abfrage);

while ($row = mysql_fetch_object($abfrage2)) 
 {
 $text3  = $row->$language;
 }

echo $text3; 
?>

Probier mal.
 
PHP:
<? 
$abfrage = "SELECT {$language} FROM text WHERE id = '3'";
$abfrage2 = mysql_query($abfrage);

while ($row = mysql_fetch_object($abfrage2)) 
 {
 $text3  = $row->$language;
 }

echo $text3; 
?>

Probier mal.

das mag er auch nicht...
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/web5/html/design/header.php on line 5
 
Um es zu testen mache es mal so.

PHP:
<? 
$abfrage = "SELECT d FROM text WHERE id = '3'";
$abfrage2 = mysql_query($abfrage);

while ($row = mysql_fetch_object($abfrage2)) 
 {
 $text3  = $row->$language;
 }

echo $text3; 
?>

Wenn es so geht , liegt es an der Variable die übergeben wird.
 
Jo das liegt definitiv an dem ollen $language
bei der sprachauswahl übernimmt er mir die sprache (d) nicht...
:(
 
Wenn ID ein DECIMAL-Feld ist, warum steht der Wert dann in Hochkommata ?

hmm, gute Frage vermute mal, dass beim ursprünglichen Code was anderes stand. aber es funktioniert auch mit Hochkommata ;)

so, also, ich hab das Teil zum laufen gebracht.....
so sieht der ganze Code aus, weiss net, ev is er nicht 100% sauber....
aber er funktioniert schon mal, und das ist viiel....

Code:
<?php if(!isset($_GET["language"]))
{
function orderedLanguages()
{
   $languages = split(",", $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
   $lang_q = Array();
   foreach( $languages as $aLang ) {
       $lang_array = split(";q=", trim( $aLang ) );
       $lang = trim( $lang_array[0] );
       if( !isset( $lang_array[1] ) )
           $q = 1;
       else
           $q = trim($lang_array[1]);
       $lang_q["$lang"] = (float)$q;
   }
   arsort($lang_q);
   //extra code for making the languages key indexed
   $i = 0;
   $lang_index = Array();
   foreach($lang_q as $lang => $q) {
   //    $lang_q[$i] = $lang; //add to the same array the index key/language
       $lang_index[$i] = $lang; //add to a new array the index key/language
       $i++;
   }
  
   return $lang_index; // uncomment for returning array with keys={0..n-1}, values={most..least preferred}
   //return $lang_q;
}
$language_browser = orderedLanguages();
$language = $language_browser[0];


$language_raw = str_split($language,2);
$language = $language_raw[0];
switch($language)
{
case "zh":
$language = "c";
break;
case "es":
$language = "s";
break;
case "ru":
$language = "ru";
break;
default:
$language_raw = str_split($language,1);
$language = $language_raw[0];
}
} else { $language = $_GET["language"]; }
$own_name = $_SERVER["PHP_SELF"];
?>
<body>
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><u><b>bitte Sprache wählen: <a href="index.php?language=d">Deutsch</a> 
      <a href="index.php?language=r">Romanisch</a></b></u></font> 
    </div>
 <?
$abfrage = "SELECT $language FROM texte WHERE id = 1";
$abfrage2 = mysql_query($abfrage);
while ($row = mysql_fetch_object($abfrage2)) {
	$texte1  = $row->$language;
	} ?>
	<? echo "$texte1" ?>
 
bööööse !
Du solltest die Variable dringlichst escapen um XSS-Angriffe zu unterbinden.

Außerdem würde ich erst prüfen, ob die Spalte $language existiert. Auch deswegen kann dieser Fehler entstehen.

PHP:
$abfrage = "SELECT ´".$language."´ FROM ´text´ WHERE id = '3'";

hmm, wenn ich das ganze escape dann gib er mir den $language Inhalt, also Sprache anstatt den inhalt von der Tabelle texte aus
 
Kleiner Tipp noch am Rande, der hier noch gar nicht erwähnt wurde: mysql_error() hilft ungemein bei der Fehlersuche. Sobald ein Query fehlschlägt, einfach mal direkt nach dem entsprechenden mysql_query() ein mysql_error() einbauen, um nachzugucken, wo's überhaupt genau hakt.
 
Hallo Leute, ich grüble immer noch an der Seite rum.

aktuell habe ich folgendes Problen:

hi

ich erlaube mir, mich wieder mal mit nem Probs an dich zu wenden...

ich habe eine seite wo ich die einzelnen Inhalte mittels Link aus einer SQL Datenbank nehme und einbinde.

<? $abfrage = "SELECT $language FROM Seiten WHERE id = $page";
$abfrage2 = mysql_query($abfrage);
while ($row = mysql_fetch_object($abfrage2)) {
$inhalt = $row->$language;
} ?><? echo "$inhalt" ?>

mein Problem ist jetzt aber dass ich keine weiteren Texte die ebenfalls in einer Datenbank sind, einbinden kann.
die Abfragen sehen alle gleich aus, wie oben. irgend was mache ich falsch. Nur was?

Wer kann mir helfen?