Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tekstikenttään syötetyn PHP-sivun näyttö

Sivun loppuun

Rocceri [05.04.2009 10:17:45]

#

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?

ville-v [05.04.2009 10:26:55]

#

<?php
$koodi = $_POST["koodiboxi"];
$tiedostonnimi = rand().".php";

$tiedosto = fopen($tiedostonnimi, "w") or die("Ei toimi");
fwrite($tiedosto, $koodi);
fclose($tiedosto);

include($tiedostonnimi);
?>

Teuro [05.04.2009 10:27:46]

#

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ä.

janijohannes [05.04.2009 10:34:09]

#

Onhan palvelimellasi PHP-tuki?

Teuro [05.04.2009 10:36:11]

#

janijohannes kirjoitti:

Onhan palvelimellasi PHP-tuki?

Jos kerran

<?php
$koodi = $_POST["koodiboxi"];
echo $koodi;
?>

toimii niin?

janijohannes [05.04.2009 10:49:45]

#

Katsos, PHP-tuki on jos tuota koodia EI näy.

Teuro [05.04.2009 10:52:49]

#

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.

Mika9 [05.04.2009 10:54:32]

#

Koodi ei tee mitään koska tulostat sen echo komennolla. Ajamiseen on oma eval(); funktionsa.

janijohannes [05.04.2009 10:56:29]

#

Mika9 kirjoitti:

Koodi ei tee mitään koska tulostat sen echo komennolla. Ajamiseen on oma eval(); funktionsa.

Huoh... Se echo kyllä tulostaa sen...

Teuro [05.04.2009 10:59:18]

#

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ä.

janijohannes [05.04.2009 11:03:02]

#

Laitoin tuon toimimaan sivuillani ja hyvin toimii.
Se johtuu vain PHP-tuesta.
http://janijohannes.hirmu.net/jotain/Rocceri.html

Tunnus: CBJT
Salasana: CB

Ja tuolla sivuilla koodi on prikulleen sama.

Teuro [05.04.2009 11:15:42]

#

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?

Metabolix [05.04.2009 11:18:48]

#

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.

janijohannes [05.04.2009 14:12:08]

#

No kokeileppa tälläistä:

<?php
$koodi = $_POST["koodiboxi"];
$koodi=str_replace('<','&#60',$koodi);
$koodi=str_replace('>','&#62',$koodi);
echo $koodi;
?>

Teuro [05.04.2009 14:21:58]

#

janijohannes kirjoitti:

No kokeileppa tälläistä:

<?php
$koodi = $_POST["koodiboxi"];
$koodi=str_replace('<','&#60',$koodi);
$koodi=str_replace('>','&#62',$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.

Juhko [05.04.2009 14:22:24]

#

Älä kokeile.

Edit: Teuro prkl...

Metabolix [05.04.2009 14:47:33]

#

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>

ville-v [05.04.2009 15:39:14]

#

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>
<?
}
?>

Rocceri [05.04.2009 17:10:16]

#

Mahtavaa Ville-v! Tämä toimii mahtavasti, pienellä sovelluksessa tosin. :)
Kiitos! (Tuo viimeisin vierstisi siis.)

Grez [05.04.2009 17:18:13]

#

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.

Rocceri [05.04.2009 18:23:56]

#

Juu, ihan omiin juttuihin on tarkoitettu :)

Metabolix [05.04.2009 18:49:14]

#

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ä.

Rocceri [06.04.2009 16:42:04]

#

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?

kinnala [06.04.2009 16:59:02]

#

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/php/index.html

Voit etsiä lisää vastaavia yhdistelemällä hakusanoja "javascript", "textarea" ja "syntax highlighting".

Rocceri [06.04.2009 17:05:58]

#

Kiitos kinnala, sulla on paljon hyviä vastauksia. Juuri sopivia mun tarkoituksiin. :D
Mullakun on yleensä hakusanat hukassa.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta