Heippa!
Väsäsin tässä tälläisen PHP/HTML/CSS editorin nettiin, mutta PHP:n käyttö ei onnistu.
<html> <head> <title>Editori</title> </head> <body> <form action="show.php" method="POST" target="_blank"> <textarea name="koodiboxi" cols="100" rows="15"></textarea> <input type="submit" value="Lähetä </form> </body> </html>
Jos tämän printtaamaan textareaan kirjoittaa PHP:tä ja lähettää tämän show.php:lle, PHP näkyy lähdekoodissa eikä tee mitään.
<?php $koodi = $_POST["koodiboxi"]; echo $koodi; ?>
Missä ongelma?
Mitä sen sinusta pitäisi tehdä? Minusta tuo toimiii aivan oikein, jos nopealla lukaisulla ymmärsin $_POST['koodiboxi'] muuttujassa olevan textarealta lähetetty tekstinpätkä.
Onhan palvelimellasi PHP-tuki?
janijohannes kirjoitti:
Onhan palvelimellasi PHP-tuki?
Jos kerran
<?php $koodi = $_POST["koodiboxi"]; echo $koodi; ?>
toimii niin?
Katsos, PHP-tuki on jos tuota koodia EI näy.
janijohannes kirjoitti:
Katsos, PHP-tuki on jos tuota koodia EI näy.
Kyllä tiedän tämän aivan hyvin, mutta oletin aloittajan edellisten viestien perusteella, että php tuki on käytössä. Luulen lisäksi, että aloittajan laittama ongelma liittyy juurikin lomakkeen kautta lähetetyn php koodin suorittamisen kanssa.
Koodi ei tee mitään koska tulostat sen echo komennolla. Ajamiseen on oma eval(); funktionsa.
Mika9 kirjoitti:
Koodi ei tee mitään koska tulostat sen echo komennolla. Ajamiseen on oma eval(); funktionsa.
Huoh... Se echo kyllä tulostaa sen...
janijohannes kirjoitti:
Huoh... Se echo kyllä tulostaa sen...
Niin mitä sitten? Sitähän olen jo ensimmäisestä vastauksestani asti sanonut, että ongelma ei liity php:n toimivuuteen, vaan väärään toimintamalliin. Aloittajan php tuki on päällä, joten se keskusteluhaara voisi nyt päättyä.
Laitoin tuon toimimaan sivuillani ja hyvin toimii.
Se johtuu vain PHP-tuesta.
http://janijohannes.hirmu.net/jotain/Rocceri.
Tunnus: CBJT
Salasana: CB
Ja tuolla sivuilla koodi on prikulleen sama.
Ei se vaan toimi, niin kuin aloittaja haluaisi, koska tuo sinunkaan koodisi ei suorittanut lomakkeelle kirjoittamaani php-koodia, vaan kirjoitti sen lähdekoodiin sellaisenaan aivan kuten aloittaja totesi avauksessaan. Syötin tuolle sinun lomakkeellesi koodin:
<?php echo"Moikka"; ?>
Tuloksena lähdekoodissa oli:
<?php echo\"Moikka\"; ?>
Oliko muuta vai lopetetaanko lopultakin tämä sivuraide?
janijohannes kirjoitti:
Mika9 kirjoitti:
Koodi ei tee mitään koska tulostat sen echo komennolla. Ajamiseen on oma eval(); funktionsa.
Huoh... Se echo kyllä tulostaa sen...
Niin, eikös se juuri ollut tässä ongelmana? Siis echo tulostaa sen, joten se vain näkyy sitten lähdekoodissa, kun ilmeisesti tarkoituksena oli, että lomakkeelle syötetty koodi ajettaisiin.
No kokeileppa tälläistä:
<?php $koodi = $_POST["koodiboxi"]; $koodi=str_replace('<','<',$koodi); $koodi=str_replace('>','>',$koodi); echo $koodi; ?>
janijohannes kirjoitti:
No kokeileppa tälläistä:
<?php $koodi = $_POST["koodiboxi"]; $koodi=str_replace('<','<',$koodi); $koodi=str_replace('>','>',$koodi); echo $koodi; ?>
Tuolla muutoksella saadaan korkeintaan aikaan se, että tekstiareaan kirjoitettu koodi tulee näkyville sivulle. Se ei suinkaan vieläkään toimi kuten pitäisi, koska echo tulostamaa dataa ei käsitellä tulkilla. eval() funktio, jota täällä jo väläytettiinkin sen sijaan toimisi, mutta en sitä ehkä silti kuitenkaan käyttäisi.
Älä kokeile.
Edit: Teuro prkl...
Rocceri kirjoitti:
PHP näkyy lähdekoodissa eikä tee mitään.
Tässä on valmis koodi, joka luultavasti vastaa kysyjän tarkoituksia: yhteen tekstikenttää syötetään koodi (ja sivunlatauksen yhteydessä tulostetaan entinen), toiseen ilmestyy koodin tuloste. Koodi siis ei jälkimmäisessä laatikossa näy lähdekoodissa, vaan se on suoritettu ja sen tuloste on kirjoitettu lähdekoodiin.
<?php $ajettava = 'echo "Moi\n";'; if (!empty($_POST['ajettava'])) { $ajettava = $_POST['ajettava']; } ?> <h2>Ajettava</h2> <form action="" method="post"> <p><textarea name="ajettava" cols="78" rows="20"><?php echo htmlspecialchars($ajettava); ?></textarea></p> <p><input type="submit" value="Aja" /></p> </form> <hr /> <?php # Suoritetaan koodi, otetaan tuloste talteen ob_-funktioiden avulla. ob_start(); eval($ajettava); $tulos = ob_get_contents(); ob_end_clean(); ?> <h2>Edellisen tulostus</h2> <p><textarea rows="20" cols="78"><?php echo htmlspecialchars($tulos); ?></textarea></p>
Metabolix kirjoitti:
Tässä on valmis koodi, joka luultavasti vastaa kysyjän tarkoituksia: yhteen tekstikenttää syötetään koodi (ja sivunlatauksen yhteydessä tulostetaan entinen), toiseen ilmestyy koodin tuloste. Koodi siis ei jälkimmäisessä laatikossa näy lähdekoodissa, vaan se on suoritettu ja sen tuloste on kirjoitettu lähdekoodiin.
Eikös tarkoitus ollut tulostaa HTML/PHP-sivu? Hyödynsin tätä koodipätkää: https://www.php.net/manual/en/function.eval.php#56641
<?php if(!empty($_POST['ajettava'])) { $ajettava = $_POST['ajettava']; // Tämän pitäisi edellämainitun linkin mukaan toimia, en testannut $ajettava = str_replace('<?php', '<?php', $ajettava); $ajettava = '?>' . trim($ajettava) . '<?php'; eval($ajettava); } else{ ?> <h2>Ajettava</h2> <form action="" method="post"> <p><textarea name="ajettava" cols="78" rows="20"><?php echo htmlspecialchars($ajettava); ?></textarea></p> <p><input type="submit" value="Aja" /></p> </form> <? } ?>
Mahtavaa Ville-v! Tämä toimii mahtavasti, pienellä sovelluksessa tosin. :)
Kiitos! (Tuo viimeisin vierstisi siis.)
Kannattaa sitten olla todella tarkka kenen antaa suorittaa tuon skriptin, koska tuollahan pystyy tekemään mitä vaan mitä PHP:llä yleensäkään pystyy tekemään.
Juu, ihan omiin juttuihin on tarkoitettu :)
ville-v kirjoitti:
Eikös tarkoitus ollut tulostaa HTML/PHP-sivu? Hyödynsin tätä koodipätkää: https://www.php.net/manual/en/function.eval.php#56641
Tuo ero on pieni verrattuna echon ja evalin väliseen eroon, joka on tässä keskustelussa ollut paljon suurempana puheenaiheena. Tuon verran siis pitäisi kysyjän osata tarvittaessa muokata minunkin koodiani, kun nyt eval-funktio tuli esiteltyä.
Pystyykö tähän textareaan lisäämään mahdollisuuden, että PHP koodeissa tulisi PHP väritys, kuten jos käyttää täällä Ohjelmointiputkassa koodiphp tageja?
Rocceri kirjoitti:
Pystyykö tähän textareaan lisäämään mahdollisuuden, että PHP koodeissa tulisi PHP väritys, kuten jos käyttää täällä Ohjelmointiputkassa koodiphp tageja?
Onnistuu javascriptillä.
Nopeella googletuksella löyty mm. tämä
http://marijn.haverbeke.nl/codemirror/contrib/
Voit etsiä lisää vastaavia yhdistelemällä hakusanoja "javascript", "textarea" ja "syntax highlighting".
Kiitos kinnala, sulla on paljon hyviä vastauksia. Juuri sopivia mun tarkoituksiin. :D
Mullakun on yleensä hakusanat hukassa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.