# PHP Quellcode mit Variablen in MYSQL Speichern und zur Laufzeit interpretieren.



## crx_ed9 (1. Oktober 2007)

Hallo @all,

also ich versuche einen PHP Quellcode in einer Datenbank abzulegen. 
Offensichtlich bin ich zu beschränkt diesen korrekt durch php Interpretieren zu lassen.

Aktuell geht es um ein kleines Beispiel, welches ich wie folgt darstellt:

MySql Quelltext:

```
$string = $_REQUEST['UID'];
```

Zum Auslesen der Daten gehe ich wie folgt vor:


```
$con = mysql_connect($dbhost, $dbuser, $dbpwd) or exit(mysql_error());
    mysql_select_db($dbname, $con) or exit(mysql_error());
		    mysql_select_db($dbname, $con) or exit(mysql_error());
    $sql="select * from `$dbname`.`html` where `name`='test_php'";
    $daten=mysql_query($sql);
    $ergebnis=mysql_fetch_array($daten);
	$phpCDE=$ergebnis['code'];

			
$str = $phpCDE;

eval ("\$str = \"$str\";");
echo $str . "\n";
```


Rufe ich nun dieses Test-Script auf (blabla.de/test.php?UID=12), erhalte ich entweder eine Fehlermeldung, und wenn ich diese ausmerze erhalte ich nachfolgende ausgabe:


> $string = $_REQUEST['UID'];



Also Interpretiert sieht mir das nicht aus ;(


Ich bin für jeden Vorschlag offen.


Grüße aus der Stadt im Quadrat


CRX-ED9


----------



## ne0hype (1. Oktober 2007)

Hi,

naja wenn du dir das mal so anschaust wirst du feststellen das

$str = $phpCDE;

der Code

$string = $_REQUEST['UID'];  

sprich

$str = '$string = $_REQUEST['UID'];';

naja und da sind ' in REQUEST und das wird wohl den Fehler ausmachen... und bitte verwende statts $_REQUEST -> $_GET


----------



## crx_ed9 (1. Oktober 2007)

@ne0hype

klar das mit $_request sollte auch nur zu Verprobung fungieren und wird später so nicht mehr verwendet. 
Und wie würde ich an den übergeben Wert kommen?

Ansonsten erstmal Danke für die Antwort, ich werde weiterhin mich daran versuchen.

Besten Dank


----------



## ne0hype (1. Oktober 2007)

Dieses Beispiel zeigt wie du es lösen kannst ob das jetzt auch so super ohne die ' ist weiss ich nicht


```
<?php
$str = '$_GET[UID]';

eval ("\$str = \"$str\";");
echo $str . "\n";  

?>
```


----------



## crx_ed9 (1. Oktober 2007)

Danke, so wie deine Mail eingetroffen ist, habe ich es auch hinbekomen.

```
$con = mysql_connect($dbhost, $dbuser, $dbpwd) or exit(mysql_error());
mysql_select_db($dbname, $con) or exit(mysql_error());
mysql_select_db($dbname, $con) or exit(mysql_error());
$sql="select * from `$dbname`.`html` where `name`='test_php'";
$daten=mysql_query($sql);
$ergebnis=mysql_fetch_array($daten);
$phpCDE=$ergebnis['code'];
eval ("\$phpCDE = \"$phpCDE\";");
echo $phpCDE . "\n";
?>
```

Hab besten Dank.

Liebe Grüße 


CRX-ED9


----------



## crx_ed9 (1. Oktober 2007)

Einen kompletten Quellcode kann man so aber nicht in der Datenbank speichern? oder doch?
Grüße


CRX-ED9


----------



## ne0hype (1. Oktober 2007)

doch klar... warum nicht?


----------



## Flex (1. Oktober 2007)

Theoretisch wäre es möglich, aber mit welchem Ziel?

[phpf]eval[/phpf] ist ansich eine "böse" Funktion und sollte (meiner Meinung nach) gar nicht benutzt werden.

Was ist denn dein Plan?


----------



## crx_ed9 (1. Oktober 2007)

dann sitze ich huete effektiv auf meiner Leitung,

ich habe eine kleine Schleife eingefüg und beim auslesen bekomme ich den Fehler hier:

Parse error: syntax error, unexpected T_STRING in htdocs/html/test2.php(14) : eval()'d code on line 3
for($i=0;$i<100;$i++) { echo "ich bin User mit UserID $_GET[UID] und laufe in der Schleife $i\n"; }


----------



## ne0hype (1. Oktober 2007)

na das sind dann so aus:

```
$str = 'for($i=0;$i<100;$i++) { echo "ich bin User mit UserID $_GET[UID] und laufe in der Schleife $i\n"; }';
eval ("$str");
```


----------



## crx_ed9 (1. Oktober 2007)

Mein Plan? 

ich versuche mir einen Memberlogin zu generieren, das habe ich mittels scripte schon gelöst, jedoch ist der Provider nicht so zuverlässig, daher verschwinden hin und wieder die Scriptdateien oder es ist nur die indexseite zu erreichen. Der MySQL server hingegen ist immer erreichbar.  

Nun dachte ich --> 

Schmeiß die Scripte in eine Datenbank und ruf die Werte einfach anstatt der Scripte ab bzw. auf.

@ne0hype

Klar wer die Brille aufzieht sieht auch die ' '  Danke.


----------



## ne0hype (1. Oktober 2007)

ja aber da musst du tierisch aufpassen... denn PHP Code mit eval() auszuführen und dann noch Daten verwenden die von einer Form kommen ist schon ganz schön riskant


----------



## crx_ed9 (1. Oktober 2007)

Gibt es eine analoge Funktion zu eval(), welche es ermöglicht ohne Sicherhietsbedenken ein Script aus einer Datenbank auszuführen?

Wenn nicht werde ich halt doch bei den Scripten bleiben müssen. 
Es wäre halt schön gewesen und es wäre eine einfacherer Administration möglich gewesen.

Liebe Grüße


----------



## ne0hype (1. Oktober 2007)

Es liegt nicht an der Funktion eval() sondern daran das eval() den PHP Code interpretiert und somit mann über die Form und dessen $_POST Code einschmuggeln kann.


----------



## crx_ed9 (1. Oktober 2007)

Das würde bedeuten, das die Formulare als Scripte bleiben müssten, und nur die Inhalte der Scripte mittels eval geladen werden sollten ...


... das muss ich mir nochmal durch den Kopf gehen lasen, ob ich wirklich die Scripte in der DB haben möchte oder nicht


Danke nochmals an alle

@Nachtrag:


Also habe mal ein Script eingetragen, dass funktioniert leide rnicht so wie ich mir das Vorstelle. Bedeutet, dass in diesem Script einige Funktionen enthalten sind und einige umgeleitete Echos, sowie ein JavaScript, welches auch nicht so funktioniert wie es als Script-Datei seinen Dienst erweist.


----------



## crx_ed9 (11. August 2010)

nur so am Rande,

nach dem ich die Projekte von damals beendet habe...

Die Lösung ist so einfach ...

EVAL() ist schei**e, warum INJECTIONS etc.

Also Arbeitet man mit Working-Copies im PHP-TEMP oder in einem separierten TMP Verzeichnis. 
Diese kann man dynamisch zur Laufzeit wiederum einbinden. 

Belastet zwar den Server und die Scripte werden ebbes langsamer, ist aber deutlich sicherer...

Danke für eure Mühen.. Hab das Forum hier leider aus den Augen verlohren gehabt. 

Greetz..


----------

