Problem bei Mysql abfrage

danielmueller

Gesperrt
Ich komme an einem bestimmten Problem nicht mehr weiter. Ich möchte eine bestimmte Zeile meiner DB auswählen allerdings gibt es ein kleines Problem. welche Zeile ausgewählt werden soll wird mit $section bestimmt solange $section eine Zahl ist funktioniert auch alles. Sobald man aber nun so wie ich es eigentlich machen will einen String dann kommt eine Fehlermeldung. Hier mein Skriptschnipsel:
PHP:
 $sql = "SELECT * FROM doc_desc, doc_text "
. "WHERE doc_desc.c_section = doc_text.section AND doc_text.section = $section";
 
Wenn es ein String ist, musst du es soweit ich weiß in Anführungszeichen setzen:
PHP:
$sql = "SELECT * FROM doc_desc, doc_text " 
. "WHERE doc_desc.c_section = doc_text.section AND doc_text.section = '$section'";

Gruß
 
Original geschrieben von Marvin Schmidt
Wenn es ein String ist, musst du es soweit ich weiß in Anführungszeichen setzen:
... denn ansonsten wird der MySQL-Server versuchen, mit einer Tabellenspalte zu vergleichen, die den Namen deines Strings trägt oder es kommt zu riesigen Problemen, weil auf einmal Leerzeichen im Code sind, die da nicht hingehören.

Mamphil
 
Ich habe es jetzt einmal ausprobiert allerdings besteht das Problem weiterhin. Mein Skript basiert auf dem hier auf Tutorials verfügbarem Tut. Ihr findet meine Testseite mit dem Skript hier:
:
http://www.daniel-portal.de/Dynamisch/Test/index.php?section=1
so sollte es sein aber nicht:
http://www.daniel-portal.de/Dynamisch/Test/index.php?section=Home
Hier ist der Quelltext:
PHP:
if(!isset($_GET["section"])) $section = Home;
 if(!isset($section)) $section = $_GET["section"];

 //Datenbankverbindung aufbauen und Datenbank auswählen
 mysql_connect($mysql["host"],$mysql["user"],$mysql["password"]);
 mysql_select_db($mysql["database"]);

 //Datenbankabfrage zusammenstellen
 $sql = "SELECT * FROM doc_desc, doc_text "
        . "WHERE doc_desc.c_section = doc_text.section AND doc_text.section = '$section'";

 //Datenbank wird abgefragt
 $_result = mysql_query($sql);
 //Das Ergebniss wird in dem Feld ($_array) gespeichert
 $_array = mysql_fetch_assoc($_result);

 //Definition der Variablen durch die die Platzhalter
 //ersetzt werden.
 $title    = $_array["title"];
 $css      = $_array["css"];
 $template = $_array["template"];
 $text     = $_array["text"];
 //Array mit den Platzhaltern (Keys) und den Inhalten.
 $var_array = array("TITLE" => $title,
                    "CSS" => $css,
                    "TEXT" => $text,
                    );

 //Initialisierung der Klasse und Parsen des Templates
 $tpl = new parser($template, $var_array);


Anschließend noch die Klasse:

PHP:
Class parser
 {
  var $template;
  var $temp_content;

  function parser($template, $var_array)
  {
   $this->template = $template;
   $this->temp_content = file($this->template);
   $parsed = $this->rplc($var_array);
   echo(implode("", $this->temp_content));
  }

  function rplc($var_array)
  {
   foreach($var_array as $key => $value)
   {
    //$regex[var_name] : {VARIABLE}
    $regex['var_name'] = "#{[[:space:]]*?(".strtoupper($key)."){1,}?[[:space:]]*?}#si";
    $this->temp_content = preg_replace($regex['var_name'], $value, $this->temp_content);
   }
  }
 }
 
Original geschrieben von danielmueller
Ich habe es jetzt es gab an einer anderen Stelle ein Fehler vielen Dank für eure Hilfe.
Und welcher?

Ich wills euch verraten :D
In
PHP:
if(!isset($_GET["section"])) $section = Home;
fehlen um das letzte "Home" die Anführungszeichen - PHP weist der Variablen $section die Konstante Home zu.

Mamphil
 
Zurück