So, noch der versprochene Nachtrag: Ich verwende einerseits CodeMirror aber auch TinyMCE als Editoren auf der Seite, und beide speichern nicht…
Hier ist das als HTML ausgegebene Formular (wird von einer Klasse entsprechend des darzustellenden Inhaltes generiert):
[html]
<th>Details</th>
</tr>
<tr bgcolor="#E9EDF4">
<td>Autor</td>
<td><input type="text" size="50" maxlength="70" name="content_author" value="Administrator"/></td>
</tr>
<tr bgcolor="#D0D8E8">
<td>Datum</td>
<td>2011-07-10 21:49:07</td>
</tr>
<tr bgcolor="#E9EDF4">
<td>Beschreibung</td>
<td><textarea id="content_description" class="desc" name="content_description" cols="38" rows="5">Startseite</textarea></td>
</tr>
</table><br/>
<br/>
<table>
<colgroup>
<col width="150"/>
<col width="150"/>
<col width="150"/>
<col width="200"/>
<col width="250"/>
</colgroup>
<tr>
<td>
<a href="#" style="text-decoration: none" onClick="editor.setValue('')">
<img src="http://www.html.de/images/icons/blank.png" alt="Blank" title="Blank" border="0" style="margin:6px 0 -6px 6px"/> Inhalt löschen
</a>
</td>
<td>
<a href="#" style="text-decoration: none" onClick="editor.undo()">
<img src="http://www.html.de/images/icons/undo.png" alt="Undo" title="Undo" border="0" style="margin:6px 0 -6px 6px"/> Zurück
</a>
</td>
<td>
<a href="#" style="text-decoration: none" onClick="editor.redo()">
<img src="http://www.html.de/images/icons/redo.png" alt="Redo" title="Redo" border="0" style="margin:6px 0 -6px 6px"/> Vorwärts
</a>
</td>
<td>
<button type=button onclick="search()">Suchen</button>
<input type=text style="width: 8em" id="query" value="">
</td>
<td>
oder <button type=button onclick="replace()">Ersetzen</button> mit
<input type=text style="width: 8em" id="replace">
</td>
</tr>
</table>
<br/>
<textarea id="code_editor" name="code_editor">
<h3>
<center>Herzlich willkommen auf unserer Homepage</center>
</h3>
</textarea>
<input type="hidden" name="id" value="1"/>
<p><input type="submit" name="edit_content" value="Speichern"/>
<input type="submit" name="edit_content" value="Abbruch"/></p>
[/html]und in "edit_content.php" steht unter anderem dies:
[php]
if(isset($_POST["edit_content"])){
if($_POST["edit_content"] == "Speichern"){ // Inhaltsänderung speichern
$content->edit_content(
$_POST["id"],
$content->get_title($_POST["id"]),
$_POST["content_author"],
$_POST["content_description"],
$content->get_url($_POST["id"]),
$content->get_type($_POST["id"]),
$_POST["code_editor"]);
}
$relaod = true;
}
[/php]und in der content-Klasse sind diese Teile wichtig:
[php]
function content_DB_connect(){
// Mit MySQL Datenbank verbinden
// Im Fehlerfall wird der Rest nicht ausgeführt
global $GLOBAL; // Variable in Klasse bekannt machen
$host = $GLOBAL["db_Host"]; // Host der Datenbank
$user = $GLOBAL["db_User"]; // Benutzer der Datenbank
$password = $GLOBAL["db_Password"]; // Passwort
$db = $GLOBAL["db_Name"]; // Tabellenname
$this->link = mysql_connect("$host","$user","$password"); // Verbindung speichern
if(!$this->link) exit(mysql_error());
$error = mysql_select_db("$db",$this->link);
if(!$error) $error = mysql_error();
return $error;
}
// Eintrag löschen
function delete_content($id){
global $GLOBAL; // Variable in Klasse bekannt machen
$db = $GLOBAL[„db_content“]; // Datenbankname sichern
// Eintrag löschen
$sql = "DELETE FROM $db WHERE `id`='$id'";
$error = mysql_query($sql);
if(!error) exit(mysql_error());
// Lücke schliessen -> folgende Einträge nach oben schieben
$sql = "UPDATE $db SET `id`=`id`-1 WHERE `id`>'$id' ORDER by `id` ASC";
$error = mysql_query($sql);
if(!error) exit(mysql_error());
}
// Eintrag hinzufügen
function add_content($title, $author, $description, $url_id, $type, $content){
global $GLOBAL; // Variable in Klasse bekannt machen
$db = $GLOBAL[„db_content“]; // Datenbankname sichern
// Werte zusammenstellen und an MysQL streamen
$error = mysql_query("INSERT INTO $db (`title`, `author`, `description`, `url`, `type`, `content`) VALUES
(\"$title\", \"$author\", \"$description\", \"$url_id\", \"$type\", \"$content\");");
if(!$error) return mysql_error();
else return true;
}
// Eintrag bearbeiten
function edit_content($id, $title, $author, $description, $url_id, $type, $content){
global $GLOBAL; // Variable in Klasse bekannt machen
$db = $GLOBAL[„db_content“]; // Datenbankname sichern
$sql = "UPDATE $db SET `title`=\"$title\", `author`=\"$author\", `description`=\"$description\", `url`=\"$url_id\", `type`=\"$type\", `content`=\"$content\" WHERE `id`='$id'";
$error = mysql_query($sql);
if(!error) exit(mysql_error());
}
[/php]Alles ausser das Edit funktionieren vom Script her, auch wenn die entsperchende Zeile in phpMyAdmin hinzugefügt wurde.
Ich steh auf dem Schlauch: Einerseits gibt es keine Fehlermeldung (der querry gibt true zurück), aber nur bei denn Zeilen, die vom Script selber hinzugefügt wurden geht das update.
Die $_POST Werte stimmen alle, sogar bis zur edit-Funktion werden die neuen Inhalte weitergegeben, aber das update klappt nicht.
EDIT:
Ah, hab noch was herausgefunden: Es funktioniert nur bei importierten Tabellen nicht. Aber wieso?