[MySQL][PHP] Jak wstawić do bazy danych kod PHP i potem wykonać go w momencie pobrania z bazy?
Chcesz przechować w bazie danych kod PHP programu, aby móc wykonać go w momencie pobrania kodu z bazy danych.
Często zachodzi potrzeba aby przechowywać w bazie danych kod PHP w postaci "zwykłego tekstu". W momencie pobrania kodu PHP z bazy danych przydałoby się go jednak od razu wykonać. W ten sposób w bazie mogą być przechowywane nie tylko przykłady do tekstów, ale i strony WWW dla serwisu...
Wykonajmy formularz, w którym po wpisaniu kodu PHP zostanie on przesłany do bazy danych. Następnie odczytamy go z bazy i wykonamy umieszczony tam kod PHP na stronie WWW. Stwórzmy prostą tabelę z polem id i polem zawierającym kod:
CREATE TABLE kod (
id INT NOT NULL PRIMARY KEY,
kod TEXT
);
Gdy tabela jest gotowa możemy wykonać skrypt, który będzie dodawał kod PHP do bazy. Całość wpiszmy do pliku index.php
<?
$serwer="localhost";
$login="user";
$haslo="password";
$id=$_POST["id"];
$kod=$_POST["kod"];
if ($id<>"" and $kod<>"") {
$p=mysql_connect($serwer, $login, $haslo);
mysql_select_db("baza1",$p);
$wynik = mysql_query("INSERT INTO kod VALUES('$id','$kod')",$p);
if ($wynik) echo "kod został dodany do bazy";
else echo "kod nie został dodany!";
mysql_close($p);
}
?>
<form action="index.php" method="post">
nr ID: <br><input type="text" name="id"><br>
Kod PHP: <br><textarea name="kod" cols=30 rows=10></textarea><br>
<input type="submit" value=" wpisz do bazy ">
</form>
W formularzu tworzymy dwa pola: numer ID aby zidentyfikować skrypt i pole na kod. Po wysłaniu formularza skrypt pobierze wpisane dane, połączy się z bazą danych i wstawi do tabeli kod oraz numer ID. Ważne jest tylko aby numer ID nie powtarzał się, bo wtedy do bazy nie będzie można dodać rekordu.
Kod powinien być wpisany bez początkowego tagu <? i końcowego ?>. A więc w postaci, np.:
$a=10;
$b=20;
echo $a+$b;
Aby odczytać kod PHP znajdujący się w tabeli wystarczy pobrać go i umieścić w funkcji eval(), która wykonuje przekazany do niej tekst, traktując go jak kod PHP.
<?
$serwer="localhost";
$login="user";
$haslo="password";
$id=2;
$p=mysql_connect($serwer, $login, $haslo);
mysql_select_db("baza1",$p);
$wynik = mysql_query("SELECT * FROM kod WHERE id=$id",$p);
mysql_close($p);
$pola = mysql_fetch_array($wynik);
$id = $pola["id"];
$kod = $pola["kod"];
if ($kod<>"") eval($kod);
?>
Po ustaleniu numeru ID dla wybranego kodu jest on pobierany poleceniem SELECT z tabeli, a następnie zwracany wynik umieszczany jest w zmiennych $id i $kod. Z numeru ID nie będziemy korzystać (chyba, że chcesz wypisać numer kodu obok), natomiast ważna jest zawartość pola kod w zmiennej $kod.
Jeżeli wartość ta nie jest pusta, wtedy możemy wykonać kod PHP w funkcji eval(). Na ekranie pojawi się wynik działania wprowadzonego skryptu PHP.