• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Textarea mehrzeilig füllen

csigg

Neues Mitglied
Hallo,

ich habe eine textarea, die ich auf Buttonklick mit einer Textvorlage aus einer Datenbank füllen will.
Dazu baue ich mir mit PHP ein Javascript folgendermaßen auf:
PHP:
    $verbindung = getVerbindung();
        $abfrage = "SELECT * FROM rma_textbausteine ORDER BY id ASC";
                                                    
        $ergebnis = mysql_query($abfrage) or die ("Fehler"); 
        
        echo ' switch(nummer) {';
        
        while($row = mysql_fetch_assoc($ergebnis)) 
        {
            $id = $row['id'];
            $text = $row['text'];
                                    
            echo '      case '.$id.':     document.forms.kommen.kommentar.value = "'.$text.'";';
            echo '                   break;';

        }
        
        echo ' }';
Wenn ich in der Variable jetzt einen einzeiligen Text drinstehen haben, ist das kein Problem, sobald der Text aber mehrzeilig wird, funktioniert das nichtmehr, der Text wird dann einfach nicht geschrieben.

Hat von euch einer eine Idee wie ich das ganze umgehen könnte?
 
Werbung:
document.forms.kommen.kommentar.value

ist eine JavaScript Variable, die du innerhalb der while Schleife immer wieder überschreibst.
Statt jedesmal eine Zeile auszugeben, überschreibst du jedes Mal die vorherige Ausgabe und hast am Ende nur eine Zeile, logisch.
 
ja nein, nicht ganz, deshalb ja das switch, case davor.

Das Ergbnis sollte so aussehen:
PHP:
switch(nummer)
{
case 1: document.forms.kommen.kommentar.value = "Hier drin steht ein mehrzeiliger Text"; break;
case 2: document.forms.kommen.kommentar.value = "Hier drin steht ein zweiter Text"; break;
case 3: document.forms.kommen.kommentar.value = "Hier drin steht ein mehrzeiliger Text"; break;
case 4: document.forms.kommen.kommentar.value = "Hier drin noch einer"; break;
}
Das Problem ist, wenn der Text wirklich mehrzeilig eingefügt wird, dann steht der String auf mehrere Zeilen unterbrochen.
 
Werbung:
Dann mach es einfacher:

PHP:
$sOutput = ' switch(nummer) {';
while($row = mysql_fetch_assoc($ergebnis)) {
    $sOutput .= 'case '.$id.':     document.forms.kommen.kommentar.value = "'.$text.'";';
    $sOutput .= 'break;';
}
$sOuput .= ' }'; 
echo $sOutput;
 
@Mark: soweit kenn ich mich mit HTML aus, aber wie soll ich denn mit JavaScript zwischen die die zweit Tags was schreiben?
 
Werbung:
Code:
[COLOR=#000000][COLOR=#0000CC]document[/COLOR][COLOR=#006600].[/COLOR][COLOR=#0000CC]forms[/COLOR][COLOR=#006600].[/COLOR][COLOR=#0000CC]kommen[/COLOR][COLOR=#006600].[/COLOR][COLOR=#0000CC]kommentar[/COLOR][COLOR=#006600].innerHTML = "..."[/COLOR][/COLOR]
 
@bodil: super, danke ;)

ich habs jetzt abgeändert in
PHP:
echo '      case '.$id.':     document.forms.kommen.kommentar.innerHTML = "'.$text.'";';
Funktioniert aber leider trotzdem noch net, ich geh mal davon aus, weil der String über mehr als eine Zeile geht.

Hier mal das Generierte Beispiel-HTML:
PHP:
function callTB(nummer) { 	 switch(nummer) { 	 case 2: 	document.forms.kommen.kommentar.innerHTML = "Sehr geehrte Herr  Gruß"; 			      break; 	 case 3: 	document.forms.kommen.kommentar.innerHTML = "Test"; 			      break; }}
 
Was willst du überhaupt mit dem JavaScript Gedöns? Ist doch völlig überflüssig.
Du schreibst dein HTML und packst die DB Abfrage zwischen die <textarea> TAGS.

Code:
<html>
<! ...  Head, Body, den ganzen Kram ... >

<textarea>
<?php
// Verbindung

while(Abfrage)
{

// von mir aus auch noch ein switch() hier

echo "case ".$row->id.":
".$row->text.";
break;";
}
?>
</textarea>

</html>
 
Werbung:
Das geht so leider nicht.

Ich habe ein Textfeld, und in dass soll, einen Textvorlage eingefügt werden. Schön wäre es jetzt natürlich, wenn ich net die Seite wieder neu laden muss, sonder das per JavaScript direkt einfügen kann.
Das mit dem Seite neu Laden (also nur über PHP) ist für den User recht nervig.
 
Ähem, was du vorhast kann nicht funktionieren.
PHP wird ausschliesslich Serverseitig ausgeführt und hat KEINEN Einfluss darauf, was der Browser aus der Ausgabe macht.
JavaScript wird ausschliesslich Clientseitig ausgeführt und hat KEINE Verbindung zum Server.

Du kannst nicht mit einem Stück JavaScript zurück zu PHP und damit Daten vom Server abfragen, schlicht weil JavaScript im Browser läuft und keine Verbindung zum Server hat.
Entweder du liest beim Laden der Seite ALLE möglichen Werte mit PHP aus und übergibst sie als JavaScript Variablen an den Browser, oder du musst bei Klick die Seite, inkl. dem PHP Zugriff auf die DB neu laden.
 
Also wenn ich jetzt nicht total was übersehen habe, macht mein Script doch genau das!!!

Es liest alle möglichenkeiten aus der DB mittels PHP und erstellt eine Javascript mit dem Switch-Case, für jeden DB-Eintrag ein Case.
Und über das JavaScript wird dann zur Laufzeit entsprechend der Text geschrieben.
 
Werbung:
Nein, dein PHP Code liest zwar alle Zeilen, übergibt an den Browser aber nur EINEN Wert, denn (wie ich schon zu Anfang gesagt habe) überschreibst du den Wert von
document.forms.kommen.kommentar.value
immer wieder und hast am Ende nur den letzten Wert.

Edit:
Vielleicht ist es einfacher zu verstehen, wenn ich dir sage, switch() ist ein PHP Befehl, der auf dem Server ausgeführt wird, aber NICHT an den Browser weitergegeben wird, der Browser erhält ausschliesslich das, was im

echo " das hier bekommt der Browser ";

steht, alles Andere existiert beim Client nicht.
 
Zuletzt bearbeitet:
Das stimmt so nicht ganz.
Das Switch gebe ich ja mit echo aus, d.h. das steht in der JavaScript-Funktion, es stehen also schon alle CASE-Anweisungen im JS.
Siehe auch meinem Beispiel des generierten Codes von oben.
 
Wäre es denn möglich, die Leerzeichen bzw. eig. die Zeilenumbrüche so zu maskieren, dass die nur in meiner Textarea wirksam sind, und nicht in meinem Quellcode, sodass ich praktisch einen Zusammenhängenden String habe?
 
Werbung:
Ja, nur muss ich jetzt praktisch den eigentlichen Zeilenumbruch noch finden.

Der User gibt ja in einer Teaxtarea einmal den Text ein, wie er dann auch aussehen soll. Den schreib ich auch die DB, und dann müsste ich ihn, um ihn wieder einzufügen, umsetzen mit den \n,....
Wie finde ich also einen eingegebenen Zeilenumbruch?
 
Die heißen in PHP eigentlich auch "\n" (die doppelten Anführungszeichen sind wichtig, wenn ich das richtig in Erinnerung habe.) Du musst die Zeilenwechsel so ersetzen, dass das \n anschließend lesbar im JS steht (wenn ich das Problem, wie ich es gerade nochmal überflogen habe, richtig verstanden habe.) Dafür solltest du das \n dann maskieren:
PHP:
echo "\\n"; [\PHP]
Es könnte also mit einem einfachen str_replace getan sein:
[PHP]$js = str_replace("\n", "\\n", $db);
($db: test aus der Datenbank, $js: Text, den du im JS verwendest.)
Habs nicht ausprobiert, müsste aber hinhauen ...
 
Werbung:
@bodil: vielen Dank schonmal.

Ich habs jetzt mal getestet, der Quellcode sieht immt noch aus wie vorher, und es funktioniert auch leider noch net.
Aber ich denke der Weg ist schonmal der richtige ;)
 
Hi csigg,
probier' mal den mehrzeiligen Text einfach mit "<span>" und "</span>" zu notieren.

Folgendes funzt einwandfrei, übertragen werden mehrzeilige Textblöcke, bei jedem Button ein anderer:
foreach($textmodule_ids as $k => $v) {
$textmodule_button_content = '<span>' . $v['content']. '</span>';
$textmodule_button_text = '"' .$v['text']. '"';
$textmodule_button_id = '"' .'mtext_' .$v['id']. '"';
echo '<input type="button" name=' .$textmodule_button_id. ' value=' .$textmodule_button_text. ' onclick="comments.value=' .$textmodule_button_content. '">';
}

Die Werte kommen bei mir aus einem Array.
Da drin ist einmal der mehrzeilige Text (content), die Button-Beschriftung (text) und eine ID für den Button. Die Schleife legt so viele Buttons an wie Elemente vorhanden sind.
Wichtig für Dich sollte die fette Zeile sein. Das Zielfeld heisst "comments", muss bei Dir sicherlich angepasst werden.

VG
Holger
 
Zurück
Oben