JS/PHP übergreifendes Var Problem

chrisbergr

Erfahrenes Mitglied
Hallo!
Als erstes will ich mich entschuldigen, wenn ich hier im falschen Forum bin. Aber welches das richtige währe wusste ich jetzt nicht da es hier um HTML/JS und PHP/SQL geht.
Also es geht darum dass ich einen neuen Artikel schreiben kann. Die eingabe erfolgt über einen Layer, dessen Inhalt ich verändern kann. Warum Layer? Das liegt daran dass ich Microsofts execCommand´s benutze, um veränderungen wie Fett/Kursiv/Unterstrichen usw. gleich anzeigen zu lassen.
Das ganze sieht dann so aus und ist soweit nur HTLM/JavaScript:
PHP:
<script>
function format(command, parameter)
{
  divEditable.focus();
  document.execCommand(command, false, parameter);
}
</script>

[...]

<img src="ico/bold.gif" onClick="format('Bold', '');"> 
<img src="ico/italic.gif" onClick="format('Italic', '');"> 
<img src="ico/underline.gif" onClick="format('Underline', '');"> 

[...]

<form name="form1" method="post" action="index.php?page=sendnew&UIN={UIN}">
  <div style="overflow=no;" id="divEditable" contenteditable width="100%" height="100%" name="newcontent">
    <p>#pagegfx##main#</p>
  </div>
  <button name="submit" type="submit" value="Abschicken">Abschicken</button>
</form>
So jetzt ist aber mein Problem, den Inhalt aus dem Layer in die PHP Variable '$newcontent' zu bekommen, um per
PHP:
$sql = "INSERT INTO article (content,ip,date) VALUES ('".addslashes($newcontent)."','".addslashes($REMOTE_ADDR)."',NOW())";
das ganze in die Datenbank einzutragen.
Wenn ich anstelle des Layers ein <textarea> Feld nehme, funktioniert das einwandfrei, jedoch kann ich eben diese Layoutänderungen nicht anwenden.

So ich hoffe ihr versteht mein Problem und könnt mir helfen.

Gruß ACID

PS: Wenn jemand einen komplett anderen Vorschlag hätte, das zu realisieren (ohne MSexecCommand´s), dann würde mich das auch interessieren, da ich mit dieser Variante IE abhängig bin.
 
Zuletzt bearbeitet:
Hi!

Bau doch ein onSubmit-Event ein, welches die Daten aus deiner Layer in ein (unsichtbares, also "visibility:hidden") Textfeld schreibt. Dann per "return true;" das Formular abschicken lassen und du hast den Inhalt des Textfeldes, also auch den Inhalt deiner Layer in PHP...

Mamphil
 
Es gibt eine Vorgängerversion dieser Technik, welche mit <textarea> funktioniert.
Infos dazu findest du bei MS.

Das Ganze lässt sich auch mit Gecko's bewerkstelligen...da musst du dann allerdings statt einem <div> ein <iframe> verwenden....
die Funktionsweise zwischen Gecko's und IE ist dann etwas unterschiedlich.
Weitere Infos dazu findest du bspw. bei devedge.netscape.com.
In diesem Fall müsstest du dann, wie von Mamphil beschrieben, den Inhalt des <iframes> in einem versteckten Formularfeld speichernj, bevor du das Formular sendest.
 
@ Mamphil: Uhh.. auf sowas muss man ersteinmal kommen.

Danke für den Denkanstoß. Jetzt denke ich allerdings, dass der Thread im Falschen Forum ist, da ich nicht genau weiß (auser dass ich die funktion document.write) brauche, wie ich das als code einbau (JS war nie meine Stärke)

Gruß ACID
 
das sollte etwa so gehen:
Code:
<script type="text/javascript">
<!--
function div2input()
{
document.form1.newcontent.value=document.all.divEditable.innerHTML;
return true;
}
//-->
</script>
<form name="form1" method="post" onsubmit="return div2input()"action="index.php?page=sendnew&UIN={UIN}"> 
  <div style="overflow=no;" id="divEditable" contenteditable width="100%" height="100%" > 
    <p>#pagegfx##main#</p> 
  </div> 
<input type="hidden"name="newcontent">
  <button name="submit" type="submit" value="Abschicken">Abschicken</button> 
</form>
 
Ok, dann danke ich mal vielmals und begebe mich wieder an die Arbeit.
Gruß

Ps. Mit der Vorgängerversion kann ich nicht viel anfangen, aber danke für den Tipp mit den Gecko´s
 
Zurück