Jacob: vorformatierte Strings mit innerHtml

Beitrag lesen

Hi,

ich zerbreche mir hier den Kopf über ein Problem, was eigentlich sehr einfach seien sollte.

es *ist* einfach, wenn man es nicht künstlich verkompliziert.

Kurz umrissen, ich habe eine Textarea, deren Inhalt in in meiner Datenbank speichre.

Okay, schau'mer mal.

  	$beschreibung=$\_POST["element\_2"];  
  	//$beschreibung= strip\_tags($beschreibung);  
  	//$beschreibung= htmlspecialchars($beschreibung);  
  	$beschreibung= nl2br($beschreibung);  
  	$beschreibung=str\_replace("\r\n","",$beschreibung);  

Wozu hier nl2br()? Willst du <br>-Tags in die Datenbank schreiben? Nein, das willst du eigentlich nicht! Speichere die Daten möglichst neutral. Behalte die Zeilenumbrüche bei, wie du sie auch schon angeliefert bekommst. Gut dass du strip_tags() und htmlspecialchars() wenigstens wieder rausgenommen hast.
Allerdings solltest du die Daten vor dem Eintragen unbedingt nach den Regeln deiner Datenbank maskieren. Bei mySQL wäre beispielsweise mysql_real_escape_string() dafür vorgesehen und geeignet.

Natürlich maskiere ich, allerdings erst direkt im Statement selber:
...,'".mysql_real_escape_string($beschreibung)."',...

Ausgeben tue ich den Text per Javascript:
tmp2.innerHTML = "<h2>"+markdetails[i].name+"</h2><br>Datum: "+datum[2]+"."+datum[1]+"."+datum[0]+"<br><p>"+markdetails[i].beschreibung+"<br>Veranstaltungsort: "+markdetails[i].adresse+"<br>Link zum Veranstalter: "+markdetails[i].url+"</p><br>Eingetragen von "+markdetails[i].von;

Und wie kommen die Daten von der DB bis zum Javascript?

Hier ein Beispiel:
Ausgabe im Browser:

Ja, die <br>-Tags, mit denen du den Text beim Eintragen verstümmelt hast, werden also exakt 1:1 wieder ausgegeben.

Inhalt im entsprechenden Feld in der Datenbank:
1<br />23<br />5<br />3<br />52<br />241

Genau - da sind sie ja auch schon.

Mir ist noch nicht klar, wie deine Daten von der DB wieder bis zum Browser kommen. Aber beim Eintragen machst du schon mal einen Kardinalfehler.

Hi Martin,
meine Daten kommen von der DB in den Browser über 2 Stationen:

		$sql = "SELECT * FROM wbb".WBB_N."_map WHERE `date` like \"2011%\" ORDER BY `wbb1_1_map`.`date` ASC";  
		//print_r($sql);  
		$result = WCF::getDB()->sendQuery($sql);  
		while ($row = mysql_fetch_object($result)) {  
			$this->thnigs2011[$this->count]= $row;  
			$this->count++;  
		}

Nachdem ich also ein Array mit meiner Abfrage habe, übergebe ich dieses an das Template (das ganze geschieht im Rahmen eines Forums, welches auf diese Art der Trennung nutzt):

WCF::getTPL()->assign (array('things2011' => $this->things2011));

Nun kann ich das Array im JavaCode quasi benutzen:

	{foreach from=$thnigs2011 item=id}  
		marker =createMarker("{$id->lat}","{$id->lng}");  
		map.addOverlay(marker);  
		markdetails2011[i]= new singledetail("...(andere Parameter für den Konstruktor)...", "{$id->description}","...weitere Parameter..." );  
		markers2011[i] = marker;  
		i++;  
	{/foreach}

Die Abfrage von Markdetails hast du ja bereits im 1. Posting von mir gesehen.

So long,
Martin

Meine (falsche) Idee war, die Eingaben vor dem Input in die DB zu bearbeiten, da ich bei der Abfrage und Ausgabe ja später mit größeren Mengen arbeite, und die maskierung dort aufwändiger ist?!

Vielen Dank für deine erste Hilfestellung.

Gruß
Jacob