unerklärlicher MySQL-Abfrage Fehler

Hi @ all!

2 Fragen!

1. Frage:

Ich hab ne Funktion geschrieben, die je nach übergebener ID nen text aus ner DB abfragt und ausgibt:

PHP:
function db_txt_error($id) {
        $query = @mysql_query("SELECT formular, text_id, ".$_GET['pref_lang']." FROM foa_formulare WHERE formular = 'error' AND text_id = '$id'") or die(mysql_error());
        $result = @mysql_fetch_array($query) or die("Fehler");
        echo $result[$_GET['pref_lang']];
}

Jetzt gibt er mir hier

PHP:
	if(!isset($bu_name) || $bu_name == "") {
	$error2 = db_txt_error(2)."<br>\n";
	}

diesen Fehler aus:

Code:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM foa_formulare WHERE formular = 'error' AND text_id = '2''

Wieso

+++++++++++++++++++++

2. Frage:

Wieso gibt er mir bei diesem Textfeld

HTML:
<input type="Text" name="bu_name" value="<?php echo $bu_name; ?>" size="" maxlength="">

wenn die Variable $bu_name vorher nur mit

PHP:
$bu_name = strip_tags( trim( addslashes($_POST['bu_name']) ) );

bearbeitet wurde,

HTML:
<br />

im Textfeld aus

+++++++++++++++++

Sind meine Fragen halbwegs verständlich? Fragt nach, wenn nicht!

Mfg christoph_hro
 
hab keinen fehler entdeckt (nur mal überflogen), aber übernimm niemals ungeprüfte $_GET-werte in ein SQL-statement
flooo
 
Zu 1. Im SQL-Statement ist ein Fehler. Wäre vielleicht praktisch, wenn du das SQL-Statement postest.
Zu 2. Was steht denn in der Variable $_POST['bu_name']?
 
Du solltest mal überprüfen, was in $_GET['pref_lang'] steht, wenn das leer ist, dann gibt es mit Sicherheit einen Syntaxfehler.
 
das SQL-Statement ist das:

PHP:
"SELECT formular, text_id, ".$_GET['pref_lang']." FROM foa_formulare WHERE formular = 'error' AND text_id = '$id'"

In $_POST['bu_name'] steht anfangs noch nichts drin, soll ja erst aus nem Formular kommen... Habs nach dem Prinzip aufgebaut:

PHP:
<?php

if($_POST['submit'] {

// Formulardaten werden verarbeitet

// Hier ist auch das:

 $bu_name = strip_tags( trim( addslashes($_POST['bu_name']) ) ); 

}

else {

?>

<html>
<head>
...
// FORMULAR

// und hier ist das:

<input type="Text" name="bu_name" value="<?php echo $bu_name; ?>" size="" maxlength="">

...

</html>

<?php

}

?>

In $_GET['pref_lang'] steht ja das richtige drin. Und zwar seh ich das an ner anderen Funktion, die genau den gleichen aufbau hat, sich aber nur in einem Wort unterscheidet!

Funktion, die nicht funktionier:

PHP:
function db_txt_error($id) {
if($_GET['pref_lang'] == "en" || $_GET['pref_lang'] == "de") {
    $query = @mysql_query("SELECT formular, text_id, ".$_GET['pref_lang']." FROM foa_formulare WHERE formular = 'error' AND text_id = '$id'") or die(mysql_error());
        $result = @mysql_fetch_array($query) or die("Fehler");
        echo $result[$_GET['pref_lang']];
        }
}

Funktion, die funktioniert:

PHP:
function db_txt_appl($text_id) {
if($_GET['pref_lang'] == "en" || $_GET['pref_lang'] == "de") {
    $query = @mysql_query("SELECT formular, text_id, ".$_GET['pref_lang']." FROM foa_formulare WHERE formular = 'appl' AND text_id = '$text_id'") or die(mysql_error());
        $result = @mysql_fetch_array($query) or die("Fehler");
        echo $result[$_GET['pref_lang']];
	}
}
 
hm. kleine Frage.. wie heisst das feld, dass du mit der $_GET variable ansprechen willst?

heisst das en oder de

ich denke, eher, dass du den wert auslesen willst, oder?

dein SQL Fehler bezieht sich auf das feld VOR dem FROM..

also muss dort ein fehler sein..

zur sicherheit lass dir einfach den query via

echo $query;

ausgeben.. Dann siehst du den fehler sicherlich sofort.
 
wie se sehn, sehn se nix... Ich hab mal die query mit echo ausgegeben:

SELECT formular, text_id, de FROM foa_formulare WHERE formular = 'appl' AND text_id = '1'

genau das, was ich will. Trotzdem sagt er mir immer noch den gleichen Fehler. Langsam bekomm ich echt ne Krise, so was schwules aber auch... :confused:

xloouch sagte ja vor dem FROM liegt das Problem, aber da er ja genau das ausgibt was ich will (nämlich für $result['pref_lang'] -> de), weiß ich auch nicht mehr weiter.

christoph
 
gut... Ich habs hinbekommen. Letztendlich lag es an $result['pref_lang'], fragt mich aber nicht wieso. Ich habs vorher zu testzwecken einfach mal ausgegeben, und da hat er genau das angezeigt, was ich auch brauchte. Hab ich das manuell (also statisch) in die Funktion eingefügt, hat auch alles wunderbar geklappt.
Jetzt hab ichs so gemacht, das er die variable in der Session beim login speichert, und die füg ich dann in die Funktion ein. Da funktionierts komischerweise, obwohl ich keinen unterschied zwischen $_SESSION['pref_lang'] und dem aus der DB abgefragten (in $result['pref_lang'] gespeichert) sehe... naja, egal, hauptsache es geht :)

Schönen Abend noch!
 
Zurück