hallo iedereen. Ik heb onderstaande php met een formulier. Deze werkt prima, dankzij hulp van enkelen van jullie. Maar zit met 2 dingen waar ik niet aan uit kom!

1. Wanneer de ingevoerde tekst bijv. is: tekst tekst tekst (dus met meerdere spaties of returns erin werkt het script niet meer. wel wordt leegruimte in het begin en einde weggelaten, maar hoe kan ik ervoor zorgen dat er slechts 1 lege ruimte is tussen elk woord en/of returns eruit worden gefilterd?
2. Ik wil de tekst uit het bestand ook in het begin via preg_match toekennen aan een variabel, zodat deze in het formulier wordt getoond. echter ik kom er niet aan uit hoe de synthax moet zijn van de preg-match functie. heb al van alles geprobeerd, maar het lukt mij niet. Bedoeling is dat de tekst net als bij de preg_replace achter id="check1". eruit wordt gehaald.

[code]
<?php

$myfile= "test.html"; // or .php
$string = file_get_contents($myfile);


if( isset($_GET['submit']) )
{
$replace = trim( $_REQUEST['mytext'] );
$content = preg_replace('#(<p[^>]+id="check1"[^>]*>).*?(</p>)#', '$1'.$replace.'$2', $string);

file_put_contents($myfile, $content);
echo $content;
echo $mytext;
}
?>


<form action="" method="get">

<textarea rows = "30" cols = "150" name = "mytext">
<?php echo htmlspecialchars($replace); ?>
</textarea>

<input type="submit" name="submit" value="send"></input>
</form>



/code]
In mijn voorbeeld krijg ik dat niet. Ik denk dat die witruimte ergens in het script wordt toegevoegd?
Wat zegt de print_r()?
Met trim() kan je die wissen.
zal even kijken

[size=xsmall]Toevoeging op 11/01/2022 17:27:09:[/size]



<?php

$myfile= "test.html"; // or .php   
$string = file_get_contents($myfile);

                          
$getcontent = preg_match('#(<p[^>]+id="check1"[^>]*>)(.*?)(<\/p>)#', $string, $matches );


$replace = trim( $matches[2] );
echo $replace;


if( isset($_GET['submit']) )
{

$replace = trim( $_REQUEST['mytext'] );
$output = preg_replace('!\s+!', ' ', $replace);
$replace = $output;




$content = preg_replace('#(<p[^>]+id="check1"[^>]*>).*?(</p>)#', '$1'.$replace.'$2', $string);

file_put_contents($myfile, $content);

echo $content;


echo $mytext;

}


?>



<form action="" method="get">
        
    <textarea rows = "30" cols = "150" name = "mytext">
          <?php echo htmlspecialchars($replace); ?>
         </textarea>
    
    <input type="submit" name="submit" value="send"></input>
</form>



[size=xsmall]Toevoeging op 11/01/2022 17:27:36:[/size]

geen idee waar het doorkomt.
Wat is precies de uitvoer?
Ik krijg geen spaties of tabs erover en erachter, en die worden sowieso gestript door trim().
zal een screenshot maken

[size=xsmall]Toevoeging op 11/01/2022 17:46:04:[/size]

kan zo te zien geen bestand bijvoegen

[size=xsmall]Toevoeging op 11/01/2022 17:47:39:[/size]

bij de uitvoer als echo ... is er geen lege ruimte voor de tekst. in het formulier wel.
mhhh. vreeemd.

[size=xsmall]Toevoeging op 11/01/2022 17:50:07:[/size]

zat toch iets niet goed met de form. heb het invulveld van het formulier nu kleiner gemaakt. en is nu opgelost. heel gek. bedankt voor alle info en hulp. Heb veel aan jullie allemaal
In het vervolg kan je afbeeldingen prima uploaden via imgbb.com.
Een uploadfunctie op dit forum faciliteren we niet.
Die spaties in textarea zijn niet zo vreemd.

Er staan er tig voor en na de php code

     <textarea rows = "30" cols = "150" name = "mytext">
          <?php echo htmlspecialchars($replace); ?>
         </textarea>


Doe het zo

<textarea rows = "30" cols = "150" name = "mytext"> <?php echo htmlspecialchars($replace); ?></textarea>


ah daar komt het door. wist niet dat dat effect zou hebben. bedankt hiervoor.
tip:
haal ook de spatie voor <¿php nog weg. (die regel van Adoptive hierboven dus)

Daar komt er een spatie voor de tekst.
Waarschijnlijk haal je die later weer weg met trim(), maar lijkt me beter om de oorzaak te onderdrukken, ipv het gevolg steeds te moeten oplossen met trim() (al is die trim sowieso wel verstandig om er in te houden).
Goede tip. Ivo. Zal in het vervolg de gehele php code mooi op elkaar aansluiten om dergelijke situaties in de toekomst te voorkomen.
Is dit een idee?

Hoef je niet zo complex te hannesen met regex.

De INPUT wordt bewaard in een JSON bestand en daaruit weer opgevraagd en getoond in het FORM.

En tegelijkertijd bewaard in een geformatteerd .html bestand dat is gebaseerd op een template (sjabloon).

In het FORM kan je een sjabloon kiezen, zodat je met dezelfde INPUT diverse uitvoerbestanden kan maken.

tekst_sjabloon_1.html

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

<style>
h1 { font-style: italic; }
p  { font-weight: bold; }
</style>

<h1>{H1}</h1>

<p>{CONTENT}</p>


tekst_sjabloon_2.html

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

<style>
h1 { font-style: italic; }
p  { font-weight: bold; }
div {max-width: 500px; border: 1px solid red; padding: 0.500em;}
</style>

<div>

<h1>{H1}</h1>

<p>{CONTENT}</p>

</div>


tekst_uitvoeren.php PHP bestand

<?php
$bewaarJSON_file = 'tekst_bewaar.json';
$tekst_template  = 'tekst_sjabloon';
$tekst_uit       = 'tekst_uit';

if( $_POST['submit'] && $_POST['title'] <> '' && $_POST['content'] <> '' )
{
	$bewaarArr            = [];
	$bewaarArr['title']   = htmlspecialchars( trim( $_REQUEST['title'] ) );
	$bewaarArr['content'] = htmlspecialchars( trim( $_REQUEST['content'] ) );
	$bewaarJSON           = json_encode( $bewaarArr );
	file_put_contents( $bewaarJSON_file, $bewaarJSON );

	$sjabloon       = $_POST['sjabloon'];
	$tekst_template = $tekst_template . '_' . $sjabloon . '.html';
	$template       = file_get_contents( $tekst_template );
	$tekst_uit      = $tekst_uit . '_' . $sjabloon . '.html';

	$template = preg_replace( '^\{H1\}^', nl2br( $bewaarArr['title'] ), $template );
	$template = preg_replace( '^\{CONTENT\}^', nl2br( $bewaarArr['content'] ), $template );
	file_put_contents( $tekst_uit, $template );
} else {
	$tekst_uit = $tekst_uit . '_1.html';
	if ( !file_exists( $tekst_uit ) )
	{
		file_put_contents( $tekst_uit, '' );
	}
}

if ( file_exists( $bewaarJSON_file ) )
{
	$JSON_decoded = json_decode( file_get_contents( $bewaarJSON_file ), TRUE );

	echo '<h4>Decoded JSON array</h4>';
	echo '<pre>' . print_r( $JSON_decoded, TRUE ) . '</pre>';

	echo '<h4>Decoded text</h4>';
	echo $JSON_decoded['title'] . '<br />' . PHP_EOL;
	echo $JSON_decoded['content'] . '<br />' . PHP_EOL;

	$title   = $JSON_decoded['title'];
	$content = $JSON_decoded['content'];
} else {
	$tempArr = [];
	file_put_contents( $bewaarJSON_file, json_encode( $tempArr ) );
}
?>

<script>
function clearInput() {
	document.getElementById('title').value = '';
	document.getElementById('content').value = '';
}
</script>

<form id="theForm" method="post">

<p><label for="sjabloon">Kies een sjabloon</label><br />
<select id="sjabloon" name="sjabloon">
	<option value="1">Sjabloon 1</option>
	<option value="2">Sjabloon 2</option>
</select></p>

<p><label for="title">Title (h1)</label><br />
<input type="text" id="title" name="title" value="<?php echo $title; ?>" /></p>

<p><label for="content">Inhoud (p)</label><br />
<textarea rows="5" cols = "80" id = "content" name = "content"><?php echo $content; ?></textarea></p>

<p><input type="submit" name="submit" /></p>

<p><input type="button" value="Wis Input" onclick="clearInput(); return false;" /></p>

</form>

<p><a href="<?php echo $tekst_uit; ?>" target="_blank">Toon uitvoerbestand</a></p>

<p><a href="<?php echo $bewaarJSON_file; ?>" target="_blank">Toon JSON bestand</a></p>

Reageren