kati: nicht abgeschlossene Zeichenfolge

Beitrag lesen

aaaaaaah, sorry, ich habe mich da vertippt, weil ich den Code beim Schreiben des Threads direkt geschrieben habe (habe aus der klasse schon gelöscht gehabt) und nicht mehr getestet.

//in der Methode set_st

$temp = str_replace(")", "", $v);
$temp = str_replace("(", "", $temp);
$temp = str_replace("'", "", $temp);
$a_st[$k] = $temp;

cu kati

ich entschuldige mich erstmal für die unverständliche Fehlerbeschreibung.

Es hat überhaupt nichts mit php und mysql zu tun. eine Klassenmethode v. php liefert einen string zurück. das wars. und der string schaut so aus, wie ich ihn schon beschrieben habe. die erwähnte javascript-Funktion wird innerhalb v. php aufgerufen.

Es handelt sich um einen javascript mysql-Editor, dass automatisch eine mysql-Anweisung generiert. Es funzt alles super.  Das Editor ist aber noch nicht fertig und ich habe noch ein paar Probleme bei komplexeren Abfragen zu beheben. Mein Problem bezieht sich aber nicht auf die Datenbank, nicht auf php, sondern auf javascript. Die javascriptfunktion für das Einlesen (also Ausgabe von Meldungen in ein Statusfenster (select) - ob alles ok ist, oder ein Fehler aufgetreten ist) wird also innerhalb v. php aufgerufen. Der php-Code ist nicht besonders wichtig, bitte die Klasse Status beachten

Der Code:


//die javascriptfunktion in der Datei functions.js
function status_zeigen(status) {
   var position = null;
   //testen, ob es gibt
   if (document.getElementsByName("status_fenster") == null)  return;
   position = document.getElementsByName("status_fenster")[0].length;
   var status_Zeile = document.createElement("option");
   status_Zeile.text = status;
   document.getElementsByName("status_fenster")[0].add(status_Zeile, position+1);
}

//php-Datei t_create.php

<script language="Javascript" src="functions.js" type="text/javascript"></script>

<?php
include_once "mysql.inc";
$c = new Connection("localhost", $_SESSION["kennung"], $_SESSION["password"]);
$s = new Status();
$d = new Database();
$t = new Table();

$d->set_db($c->get_conn(), $_SESSION["current_db"]);
$t->create_table($c->get_conn(), $_POST["sql"]);

//nur Meldungen für die DB-Operation bzgl. Tabelle werden eingefügt.
$s->set_st($t->get_info());

//session-Variable, die die Meldungen beinhält
if (!session_is_registered("meldung")) session_register("meldung");
//falls sich schon etwas in der "meldung" befindet, soll status angehängt werden
$_SESSION["meldung"] = array_merge($_SESSION["meldung"], $s->get_st());

//alle Meldungen in ein Select einlesen:
//Die javascript-Fehlermeldung sagt eindeutig, dass es sich da um eine nichtabgeschlossene Zeichenkette handelt und zwar passiert es genau auf dieser Stelle !

while (list($k, $v) = each($_SESSION["meldung"])) {
echo "<script language="JavaScript">\n";
echo "status_zeigen('$v');\n";
echo "</script>";
}

?>

//mysql.inc
/*Klasse Status macht nichts anderes, als die Meldungen aller
anderen Klassen (Connection, Database, Table) zu übernehmen und zu
verwalten. */

class Status {
  var $st;

function Status() {
     $this->st = array();
  }

//der übergebene Wert $a_st ist auch ein Array
  function set_st($a_st) {
     while(list($k, $v) = each($a_st)) {
/*da die Fehlermeldung in der javascript auftrat, muss evident hier
irgendwas falsch sein. Ausserdem muss ich die ganzen "" anscheinend
auch entfernen (es ist nur eine Beispielfehlermeldung auf die ich
beim Testen gestossen habe und tritt auf, wenn ich versuche ENUM
('x', 'x', 'z') auszuführen (also beim Anlegen der Tabelle). Jetzt
interessiert mich aber nicht wieso der DB-Fehler auftritt, sondern
wieso javascript dies nicht einlesen kann, weil da spezielle
Zeichen wie (,),', oder \ enthalten sind.*/

$temp = str_replace(")", "", $a_st);
         $temp = str_replace("(", "", $temp);
         $temp = str_replace("'", "", $v);
         $a_st[$k] = $temp;
     }
     $this->st = array_merge($this->st, $a_st);
  }

function get_st() {
     return $this->st;
  }
}

Ich hoffe jetzt habe ich es besser erklärt.
gruss kati