Archief - Javascript herkent geen <br>

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Da_Luke

Legacy Member
Hoi aan allen,

ik heb een form met een textarea die wordt door gegeven aan een javascript. Dit werkt allemaal héél soepel en perfect buiten 1 probleem. Als ik in mijn textarea een enter ingeef (volgende alinea) dan zal mijn javascript dit niet doorgeven naar mijn php.

Javascript code:
PHP:
	<script type="text/javascript" language="javascript">
	   var http_request = false;
	   function makeRequest(url, parameters) {
	      http_request = false;
	      if (window.XMLHttpRequest) { // Mozilla, Safari,...
	         http_request = new XMLHttpRequest();
	         if (http_request.overrideMimeType) {
	         	// set type accordingly to anticipated content type
	            //http_request.overrideMimeType('text/xml');
	            http_request.overrideMimeType('text/html');
	         }
	      } else if (window.ActiveXObject) { // IE
	         try {
	            http_request = new ActiveXObject("Msxml2.XMLHTTP");
	         } catch (e) {
	            try {
	               http_request = new ActiveXObject("Microsoft.XMLHTTP");
	            } catch (e) {}
	         }
	      }
	      if (!http_request) {
	         alert('Cannot create XMLHTTP instance');
	         return false;
	      }
	      http_request.onreadystatechange = alertContents;
	      http_request.open('GET', url + parameters, true);
	      http_request.send(null);
	   }
	
	   function alertContents() {
	      if (http_request.readyState == 4) {
	         if (http_request.status == 200) {
	            //alert(http_request.responseText);
	            result = http_request.responseText;
	            document.getElementById('edit').innerHTML = result;            
	         } else {
	            alert('There was a problem with the request.');
	         }
	      }
	   }
	
		function get(obj, uri) {
		  var getstr = "?";
		  for (i=0; i<obj.getElementsByTagName("input").length; i++) {
		  	if (obj.getElementsByTagName("textarea")[i]) {
		           getstr += obj.getElementsByTagName("textarea")[i].name + "=" + 
		                   obj.getElementsByTagName("textarea")[i].value + "&";
		        }
		        if (obj.getElementsByTagName("input")[i].type == "text") {
		           getstr += obj.getElementsByTagName("input")[i].name + "=" + 
		                   obj.getElementsByTagName("input")[i].value + "&";
		        }
				if (obj.getElementsByTagName("input")[i].type == "hidden") {
		           getstr += obj.getElementsByTagName("input")[i].name + "=" + 
		                   obj.getElementsByTagName("input")[i].value + "&";
		        }
		     if (obj.getElementsByTagName("input")[i].tagName == "SELECT") {
		        var sel = obj.getElementsByTagName("input")[i];
		        getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
		     }
		     
		  }
		  makeRequest(uri, getstr);
		}
		</script>

Form code:
PHP:
<div id="edit">
<form action="javascript:get(document.getElementById('add'), 'handle_input.php');" name="add" id="add">
<input type="hidden" name="faq_categorie" value="1" />	
<table>
	<tr>
		<td>
		 	<b>Post de vraag</b>
		 		<input name="faq_vraag" class="input_7" type="text" />
		</td>
	</tr>
	<tr>
		<td>
		 	<b>Post hier het antwoord</b>
			<textarea id="faq_antwoord" name="faq_antwoord" class="kader_4"></textarea>
		</td>
	</tr>
	<tr>
		<td>
			<input type="submit" name="submit" class="button_1" value="Toevoegen"/>	
		</td>
	</tr>
</table>
</form>
</div>

Behandeling van de output:
PHP:
function cleanUp($data) {
	   $data = trim(strip_tags(htmlspecialchars($data)));
	   $data = str_replace("'","'",$data);
	   return $data;
}

$faq_vraag = cleanUp($_GET['faq_vraag']);
$faq_antwoord = cleanUp($_GET['faq_antwoord']);
$faq_categorie = $_GET['faq_categorie'];
mysql_query("INSERT INTO faq (faq_categorie, faq_vraag, faq_antwoord) VALUES ('$faq_categorie', '$faq_vraag', '$faq_antwoord')") or die(mysql_error());

ik herhaal, dit script werkt perfect, de waarden worden in de database geplaatst maar daar zijn de <br> tags niet aanwezig.

Alvast bedankt voor enige reactie!

Da_Luke

Legacy Member
Ik heb dit geprobeerd

$faq_antwoord = nl2br($_GET['faq_antwoord']); in plaats van mijn cleanUp()

Ik krijg dezelfde output... Wat jij echter toont en volgens die manual ook is dit in php... Maar mijn waarden worden eigenlijk door gegeven via mijn javascript en daar worden dus ook die <br> verwijderd...

Da_Luke

Legacy Member
ik denk dat het probleem bij de functie get(obj, uri) ligt, daar heeft hij een waarde in de volgende aard: ?faq_antwoord=antwoord antwoord&faq_categorie=1&faq_vraag=vraag vraag

Dit geeft hij dan door aan de volgende functie... als ik daar een alert maak en hem dit laat tonen zijn de enters nog zichtbaar... dus het is daarna dat het zou moeten mislopen...

Groeten

Curahee Q

Legacy Member
Het is dan ook niet de bedoeling om html in een database op te slaan. Die br tags moet je toevoegen bij het eruit halen van alles.

<?php
// alles wat met database shizzle te maken heeft
while($data = mysql_fetch_assoc($query)) {
echo nl2br($data['tekst']);
}
?>

dJeez

Legacy Member
Curahee Q zei:
Het is dan ook niet de bedoeling om html in een database op te slaan.
Sedert wanneer niet? Zo goed als elk CMS slaat (X)HTML wysiwyg pagina's op in een DB.

OT: Om data te posten naar de server (zeker als het over een formulier met een textarea gaat zoals in dit geval) gebruik je de POST methode, niet GET.

Curahee Q

Legacy Member
Bij een WYSIWYG is het anders. Maar stel dat je een forum hebt met UBB code (zoals hier). En je zet de Bold-tags van tevore al om naar <strong>tekst</strong> en je slaat het op in je database. Ik heb een foutje getypt, wil het editten en ja hoor, weer moet hij alles parsen. Het parsen gebeurt dus bij het eruit halen van je data en niet bij het erin steken.

Een wysiwyg editor, als ik het me goed herinner, zet de data ook weer terug om naar hetgeen wat het werkelijk is. Daar heeft het geen zin om alles met ubb op te slaan ofzo, of op een andere manier want het moet sowieso toch naar html worden omgezet.

passero

Legacy Member
aantal maal dat hij moet parsen is veel kleiner als je het opslaat in html dan in ubb code. Als je het in ubb code opslaat dan moet hij bij ELKE view parsen, terwijl als je het in html opslaat moet hij enkel parsen als je editeert...

Da_Luke

Legacy Member
dJeez zei:
OT: Om data te posten naar de server (zeker als het over een formulier met een textarea gaat zoals in dit geval) gebruik je de POST methode, niet GET.

Ja, maar het is dat javascriptje die de GET methode gebruikt en niet de POST (zoals ik al zei, gevonden op internet). En dat javascriptje gebruik ik om een input in de database te plaatsen zonder de pagina te refreshen (de bekende div refresh dus)

ondertussen werkt het nog steeds niet. Toch al bedankt voor enige reacties.

Greetz

Curahee Q

Legacy Member
Dan moet jij het aanpassen zodat het wel met post werkt ;).

Da_Luke

Legacy Member
Kheb het kunnen oplossen, de Get idd door POST vervanen en een kleine toevoeging aan het javascript (stond ook ergens online) werkt het nu wel perfect.

Dit vervangen:
PHP:
http_request.open('GET', url + parameters, true);
Door:
PHP:
http_request.open('POST', url, true);
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Content-length", parameters.length);
http_request.setRequestHeader("Connection", "close");
http_request.send(parameters);

enigste probleem is nu dat hij tekens als de "é" niet correct in mijn dbase pompt hij toont dan volgend teken: é
Als ik m'n array bekijk dan toont hij nogtans mooi de "é"

dJeez

Legacy Member
Dat is een typisch utf-8 vs latin1 encoding probleem. Je moet ervoor zorgen dat zowel je db als je pagina's dezelfde encoding gebruiken. Als je voor beide utf-8 gebruikt en je db is een MySQL db dan kan het wellicht opgelost worden door (als je de connectie naar je db opent) SET NAMES 'utf8' uit te voeren alvorens inserts en selects te doen uit je db. Je kan dan bij de POST vanuit Javascript wellicht ook best de charset toevoegen aan het content type.
Code:
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");

Da_Luke

Legacy Member
Jup, bedankt voor het antwoord, werkt perfect allemaal nu.
Greetz
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan