Wat blijft iedereen nou moeilijk doen met die ereg's, gebruik gewoon nl2br die daarvoor gemaakt is.
Voor zover ik weet is PHP_EOL, zoals Tommy zei, de linebreak van de server. En heeft dan ook niks met je client te maken. Het maakt je script alleen inzetbaar op meerdere platformen.
Maar Lars, voor jouw probleem: [php]nl2br[/php] dus, en inderdaad pas als je het op het scherm zet, en dus niet als je het in de database zet.
Wat blijft iedereen nou moeilijk doen met die ereg's, gebruik gewoon nl2br die daarvoor gemaakt is.
Voor zover ik weet is PHP_EOL, zoals Tommy zei, de linebreak van de server. En heeft dan ook niks met je client te maken. Het maakt je script alleen inzetbaar op meerdere platformen.
Maar Lars, voor jouw probleem: [php]nl2br[/php] dus, en inderdaad pas als je het op het scherm zet, en dus niet als je het in de database zet.
PHP_EOL is een constant dat te stand komt door het OS dat gebruikt wordt. Op Linux is het wat anders dan op Windows, wat zo'n zijn beurt weer anders is dan OSx, etc.. (geen ideen waarom het anders is).
Maar jullie snappen nog niet wat ik met dat andere bedoel. Neem dit bericht dat ik typ hier, daar zitten enters in. Stel Windows doet dat met /n/r en ik neem even aan de PHP Hulp op een Linux server draait. Als je dan gaat replacen op PHP_EOL, wordt de SYSTEEMSTANDAARD gepakt en niet alle standaarden. Snappen jullie het nou? Dus als je input van meerdere platforms kan komen, niet PHP_EOL gebruiken. Dit moet je gebruiken in bijv. een mail of om je code netjes te echoën.
Okay, ik wil liever niet PHP_EOL gebruiken, maar gewoon: preg_replace().
Dit lukt maar niet, het ziet er nu dus zo uit:
(heb het gedaan met reactie nu.)
<?php
include('verbind.php');
if(trim($_POST['reactie_bericht']) == ""){
echo 'Je bent vergeten een reactie in te tikken';
}else{
session_start();
$reactie_bericht = trim($_POST['reactie_bericht']);
// spaties eraf (eind en begin)
$reactie_bericht = wordwrap($reactie_bericht, 100, "\n", true);
// max 100 tekens per regel weetje nog?
$reactie_bericht = mysql_real_escape_string($reactie_bericht);
// een slash voor sql gevoelige tekens plaatsen
$reactie_bericht = htmlentities($reactie_bericht);
$reactie_bericht = preg_replace("\r\n|\r|\n", "<br />", $reactie_bericht);
// ongewenste html codes 'beveiligen'
$sql = "INSERT INTO reactie
(topic_id, gebruiker_id, reactie_bericht, reactie_datumtijd)
VALUES
(".trim($_POST['topic_id']).",'".$_SESSION['gebruiker_id']."','".$reactie_bericht."', now())";
$resultaat = mysql_query($sql) or die(mysql_error());
if(mysql_affected_rows() > 0){
// met mysql_affected_rows krijg je een getal terug..
// dit getal is het aantal rijen waar mysql de insert into
// query op heeft uitgevoerd.. in ons geval altijd 1 met deze query
// dus als de output van mysql_affected_rows hoger als 0 is (1 dus)
// dan gaat hij verder in het script
$nummer = $_POST['topic_id'];
header("Location: index.php?bekijktopic=$nummer");
}else{
echo 'toevoegen mislukt';
}
}
?>
Het gaat om deze regel:
$reactie_bericht = preg_replace("\r\n|\r|\n", "<br />", $reactie_bericht);
Dit werkt NIET, want als ik een bericht typ met (enters), dan komt er wel een enter in de mySQL, maar geen <br />, en dat moet, enters moeten worden vervangen door <br />.
Gvd, geen HTML in je database pleuren man. Hoe vaak wil je dit horen?
En doe het eens zo:
preg_replace(array("\r\n", "\n", "\r"), "<br />", $text);
?
Onbekende gebruiker
04-04-2009 13:24
Tommy! Weet je wel waar je het allemaal over hebt?
Het maakt geen bal uit op welke OS je het bericht typt. Het bericht wordt op de website (Linux) opgestuurd, wordt op de server (Linux) verwerkt en wordt in de database (Linux) opgeslagen. Het boeit dus helemaal geen ene flikker of je op een Windows PC, of op een FreeBSD PC, of een Mac zit.
Dit allemaal gebeurt op de server!
EDIT: René. <textarea> bevat NIET per definitie \r\n en PHP_EOL bevat NIET per definitie \n!!! Waarom zitten jullie toch allemaal jullie zin door te drijven?
Op een Linux server bevat <textarea> \r (fictief/als voorbeeld) en PHP_EOL ook \r. Op een Windows server bevat <textarea> \n\r (fictief/als voorbeeld) en PHP_EOL ook \n\r. Een client die bijv op een Linux website als zijnde Windows wat opstuurt geeft dan niet \n\r door maar \r, omdat de website op de Linux server staat.
En GaMer13, blijkbaar weet jij niet waar je het over hebt. Want dat HTML form staat niet op de server. Maar op de computer van de client. Doe eerst maar even lezen wat het verschil tussen serverside en clientside is. Daarna mag jij je er weer mee bemoeien.
De inhoud van dat formulier komt na het versturen pas op de server. Als je het nog aan het typen ben, heeft de server er geen bal mee te maken, die weet niet eens dat je aan het typen bent.
En Lars, voor de 6e keer ofzo, nl2br gebruiken als je het weer op je scherm wil krijgen! Als je het in je database stopt, moet je er niet eerst HTML van maken, alleen beveiligen, zoals bv. mysql_real_escape_string.