[vraag] Combinatie van php en html in 1 textarea opslaan
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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>
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.
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.
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?
Bijvoorbeeld een e-mail template:
Code (php)
1
2
3
4
5
2
3
4
5
$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);
//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 :
Code (php)
1
2
3
4
5
2
3
4
5
$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);
//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:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$zoekvideo = $connect->query("SELECT naam FROM videos blablabla");
while(){
... .. ...
}
?>
$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 ";
dan zou je bij de replace nog een "; bij de replace ervoor moeten zetten en echo " erachter.
preg_replace_callback aanroepen.
Dan moet je daarvoor een functie schrijven, en deze met - Ariën - op 14/06/2018 15:43:48:
Dan moet je daarvoor een functie schrijven, en deze met preg_replace_callback aanroepen.
Als er een like knop was, had ik er opgedrukt. :P
Bedankt, ga ik mij daar op inlezen en toepassen.
En als dit niet gecombineerd gaat worden met bestanden die je kunt wegschrijven dan had je hier wellicht beter een apart draadje voor kunnen starten want het heeft eerlijk gezegd weinig met elkaar te maken.
Gewijzigd op 14/06/2018 19:57:42 door Thomas van den Heuvel