Textarea BB-Code und E-Mailversand

hikeda_ya

Erfahrenes Mitglied
Hallo Community,

ich sitze mal wieder vor einem Problem.

Ich möchte eine Art Newsletter schreiben. JAAAA mit Word usw geht das ganz einfach.

Doch ich sollte es mittels PHP und BB-Code umsetzten können.

Mein Ziel ist es in einem textarea ganz normalen Text einzugeben und dann wie bei den BB-Codes ein Synonym für "Vorname" oder "Nachname" anklicken, das wird dann bei senden aus einer MYSQL Datenbank gefüllt.

Die normalen BB-Codes bekomme ich hin. so recht und schlecht aber das "Vorname" ersetzt wird mit dem Datenbank Ergebnis - da happerts.


PHP:
echo "	<br><br>
          <form action=\"rundmail.php\" name=\"formular\" method=\"post\">
          <button type=\"button\" onClick=\"insert('[ b ]', '[ /b ]')\"><b>b</b></button>
	  <button type=\"button\" onClick=\"insert('[ i ]', '[ /i ]')\"><i>i</i></button>
          <button type=\"button\" onClick=\"insert('[ Vorname ]', '[ /Vorname ]')\"><i>i</i></button>
          <br><br>
          <textarea name=\"Content\" cols=\"100\" rows=\"10\" /><h2></h2></textarea><br><br>
          <input type=\"submit\" name=\"send_email\" value=\"Eintragen\" />
          </form>";

if (isset ($_REQUEST['send'])){


function parseBBCode2HTML( $bb )
{
    $bb = preg_replace('/\[b\](.*?)\[\/b\]/', '<b>$1</b>', $bb);
    $bb = preg_replace('/\[i\](.*?)\[\/i\]/', '<i>$1</i>', $bb);
    $bb = preg_replace('/\[color=([[:alnum:]]{6}?).*\](.*?)\[\/color\]/', '<font color="#$1">$2</font>', $bb);
    $bb = preg_replace('/\[url=([^ ]+).*\](.*)\[\/url\]/', '<a href="$1">$2</a>', $bb);
$bb = preg_replace('/\[Vorname\](.*?)\[\/Vorname\]/', $row['vorname'], $bb);
    $bb = preg_replace('/\n/', "<br/>\n", $bb);

    return $bb;

}
$text = $_REQUEST['Content'];

$formatiert = parseBBCode2HTML( $text );

echo $formatiert;  
}
 
Zuletzt bearbeitet:
Das ganze soll für den Schriftführer eines Vereins werden.

Dieser soll sich die formatierungen und Platzhalter über die BB-Codes oder Buttons in den Text einfügen können. Bin mit den BB-Codes noch nicht so ganz konvorm

Ganz nach dem Sinne

Hallo "Vorname",

hiermit möchte ich Dich zu unserer nächsten Hauptversammlung am... ..Einladen.

Termin: (b) xx.xx.xxx (/b) usw
 
Zuletzt bearbeitet:
Dein Code sagt:
[Vorname]{blabla irgendwas}[/Vorname] wird immer ersetzt mit den Daten in $row unabhängig von dem was "in" Vorname steht.

Da genügt es doch:
{Vorname} immer durch die Daten in $row ersetzen zu lassen, was per str_replace getan wär.

Oder hast du noch zusätzliche Sachen vorgesehen?
 
und wie bringe ich meinem Script bei

nicht {vorname} {/vorname} sonder nur {vorname} zu übernehmen

lasse ich das end-tag weg - dann meckert das Script das es fehlt.

Zu dem will ich ja auch {b} und {/b} verwenden können


Code:
<script type="text/javascript">
<!--
function insert(aTag, eTag) {
  var input = document.forms['formular'].elements['Content'];
  input.focus();
  /* für Internet Explorer */
  if(typeof document.selection != 'undefined') {
    /* Einfügen des Formatierungscodes */
    var range = document.selection.createRange();
    var insText = range.text;
    range.text = aTag + insText + eTag;
    /* Anpassen der Cursorposition */
    range = document.selection.createRange();
    if (insText.length == 0) {
      range.move('character', -eTag.length);
    } else {
      range.moveStart('character', aTag.length + insText.length + eTag.length);      
    }
    range.select();
  }
  /* für neuere auf Gecko basierende Browser */
  else if(typeof input.selectionStart != 'undefined')
  {
    /* Einf?gen des Formatierungscodes */
    var start = input.selectionStart;
    var end = input.selectionEnd;
    var insText = input.value.substring(start, end);
    input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end);
    /* Anpassen der Cursorposition */
    var pos;
    if (insText.length == 0) {
      pos = start + aTag.length;
    } else {
      pos = start + aTag.length + insText.length + eTag.length;
    }
    input.selectionStart = pos;
    input.selectionEnd = pos;
  }
  /* für die übrigen Browser */
  else
  {
    /* Abfrage der Einfügeposition */
    var pos;
    var re = new RegExp('^[0-9]{0,3}$');
    while(!re.test(pos)) {
      pos = prompt("Einfügen an Position (0.." + input.value.length + "):", "0");
    }
    if(pos > input.value.length) {
      pos = input.value.length;
    }
    /* Einfügen des Formatierungscodes */
    var insText = prompt("Bitte geben Sie den zu formatierenden Text ein:");
    input.value = input.value.substr(0, pos) + aTag + insText + eTag + input.value.substr(pos);
  }
}
//-->
</script>
 
Zuletzt bearbeitet:
Aha du hast noch ein JavaScript.
Dann lass es bei einem Container mit [] aber verwende vielleicht str_replace, weil in [Vorname] bestimmt nie was drin steht.

Oder warum änders die Parameter nicht in:
insert('[Vorname]', '') für das onClick-Attribut?
 
Zuletzt bearbeitet:
Zurück