Hallo,

Hoe kan ik het beste html en php gebruiken in een textarea en die opslaan als een php bestand?

Het liefst wil ik, dat het opgeslagen wordt, zoals je het in het textarea typt (enters e.d.). Ik heb geprobeerd met nl2br etc., maar hier door krijg ik een error, omdat het script ook <br>'s plaatst binnen php gedeeltes, waar door error 500 komt.
Nl2br() hoort op de uitvoer van je script. Waar je dus de waarde toont.
Zoiets?

<?php
if ( $_POST['submit']) {
	$file = $_POST['name'] . '.php';

	$code = $_POST['code'];
	// Write the contents back to the file
	file_put_contents($file, $code);
	header('location:'.$file);
	exit();
}
?>
<form method="post" action="">
<input type="text" name="name" size="40" value="" placeholder="bestandsnaam zonder .php"/><br />
<textarea name="code" rows="20" cols="50"></textarea><br />
<input type="submit" name="submit" value="submit" />
</form>


Als je de code plakt in het textarea, krijg je na de submit een bestand met dezelfde code, dat weer opent als form, waarna etcetera.
@Marco: gewoon opslaan zoals je het intypt? Hier hoeven geen speciale bewerkingen voor plaats te vinden.

Als je echter de inhoud van een bestand weer wilt wijzigen via een textarea is het natuurlijk wel zaak dat de tekst van het ingelezen bestand ontdaan wordt van enige speciale betekenis binnen HTML. Dit doe je met een escaping-functie zoals htmlspecialchars().

Het is natuurlijk zaak dat je het bestand waarmee je PHP kunt invoeren en de code waarmee je dit wegschrijft naar een PHP-bestand héééél goed beveiligd anders zet je de deur wagenwijd open voor hackers... Zorg dus dat je heel goed weet waar je mee bezig bent.

Of nog beter, misschien moet je deze functionaliteit helemaal niet op je site hebben.
Thomas van den Heuvel op 29/05/2018 17:55:06

@Marco: gewoon opslaan zoals je het intypt? Hier hoeven geen speciale bewerkingen voor plaats te vinden.

Als je echter de inhoud van een bestand weer wilt wijzigen via een textarea is het natuurlijk wel zaak dat de tekst van het ingelezen bestand ontdaan wordt van enige speciale betekenis binnen HTML. Dit doe je met een escaping-functie zoals htmlspecialchars().

Het is natuurlijk zaak dat je het bestand waarmee je PHP kunt invoeren en de code waarmee je dit wegschrijft naar een PHP-bestand héééél goed beveiligd anders zet je de deur wagenwijd open voor hackers... Zorg dus dat je heel goed weet waar je mee bezig bent.

Of nog beter, misschien moet je deze functionaliteit helemaal niet op je site hebben.


Ik heb het inmiddels aangepast. ;)

Nu zit ik met het volgende:
Tijdje terug kwam ik wel eens scripts tegen waar ze gebruik maakte van "{tekst}" wat omgezet werd in html/php. Iemand een idee hoe dit heet en hoe het werkt?
[php]str_replace[/php]
Dit zijn waarschijnlijk placeholders voor variabele waarden. De bestanden waarin dit soort dingen staan zijn vaak templates, oftewel, een soort van blauwdruk met invulvakjes voor een uiteindelijk document.

Bijvoorbeeld een e-mail template:
Geachte {aanhef} {achternaam},

Iemand, mogelijk u, heeft een aanvraag gedaan voor het herstellen van uw wachtwoord.
Als u dit niet was hoeft u niets te doen.

Via de volgende link kunt u uw wachtwoord herstellen:
{reset_password_link}

Groet,

De Redactie
Kwam ergens een template tegen waarin o.a. dit stond :

$template = file_get_contents($root.'signup_template.'.$format);
//replace all the tags
$template = preg_replace('^\{USERNAME\}^', $info['username'], $template);
$template = preg_replace('^\{EMAIL\}^', $info['email'], $template);
$template = preg_replace('^\{KEY\}^', $info['key'], $template);

Dat kan ook, maar dan gebruikt het een 'dure' reguliere expressie.
Maak gewoon gebruik van array en preg_replace_callback ipv meedere keren preg_replace() te gebruiken.
Adoptive Solution op 10/06/2018 15:55:57

Kwam ergens een template tegen waarin o.a. dit stond :

$template = file_get_contents($root.'signup_template.'.$format);
//replace all the tags
$template = preg_replace('^\{USERNAME\}^', $info['username'], $template);
$template = preg_replace('^\{EMAIL\}^', $info['email'], $template);
$template = preg_replace('^\{KEY\}^', $info['key'], $template);




Oke, maar hier gebruiken ze dus enkel een variable als replace, maar is het ook mogelijk om bijvoorbeeld {videos} om te zetten in:
<?php
$zoekvideo = $connect->query("SELECT naam FROM videos blablabla");
while(){
... .. ...
}
?>

Je zit namelijk wel met de echo's. Niet dat het opeens zoiets wordt:

echo "dit is een test <?php $zoekvideos = $connect->etc... ?>";
dan zou je bij de replace nog een "; bij de replace ervoor moeten zetten en echo " erachter.

Reageren