PHP-Code in .php-Datei schreiben

  • Themenstarter Themenstarter moritz115
  • Beginndatum Beginndatum
M

moritz115

Hallo,

ich stehe mal wieder vor einem Problem. Habe viele Lösungswege ausprobiert, jedoch hat keiner Funktioniert :(
Jetzt brauche ich eure Hilfe. Es geht darum:

Per Post werden Daten weiter gegeben, die hier in einer MySQL Datenbank gespeichert werden:



PHP:
<?php

include("config.inc");

mysql_connect($host, $user, $passwd) or die ("Keine Verbindung hergestellt!");
mysql_select_db ("$db1") or die ("Datenbank nicht geöffnet!");



if ($_POST['shoutbox'] == "shoutbox")
{
//checkbox is checked
}
else
{
//checkbox isn't check


if(!empty($_POST['name']) || !empty($_POST['inhalt'])) {
 
  $sqlbef = "INSERT INTO `$db`.`emp_page` 
(`id` ,`name` ,`inhalt`,`geprueft`,`url`) VALUES ('','$_POST[name]','$_POST[inhalt]','no','www.pages.ein-mal-page.de/$_POST[name].php')";
$sqlerg = mysql_query($sqlbef) or die(mysql_error());
  
  
  echo "Datensatz hinzugefügt!";
 }
 else
 {
  echo "Kein Datensatz hinzugefügt!";
 }



Jetzt wird eine Datei erstellt. Das Problem ist, dass in diese .php Datei wiederrum ein PHP-Code rein soll. Und genau das ist mein Problem.


Erstellung der Datei:

PHP:
$datei = fopen("pages/".$_POST['name'].".php","w");
$datei;
$dateiname = "pages/".$_POST['name'].".php";
$handler = fopen($dateiname , "a+");
fwrite($handler , $text);



Davor muss jetzt noch die Variable $text definiert werden. In dieser Variable soll ein PHP-Code stehen. Dieser:


PHP:
<?php
 $db = mysql_connect($host, $user, $passwd) or die ("Keine Verbindung hergestellt!");
mysql_select_db ("$db1") or die ("Datenbank nicht geöffnet!");





HIER SOLL ÜBER MYSQL DER INHALT (Spalte ind er Datenbank) VON DER ID, DIE GERADE OBEN ERSTELLT WURDE AUSGEGEBEN WERDEN. ABER NICHT ABGESPEICHERT WERDEN, SONDERN BEI JEDEM AUFRUFEN DER ERSTELLTEN PHP-DATEI NEU ABGERUFEN WERDEN. UNGEFÄHR SO:
("SELECT Inhalt FROM wwp_page WHERE ID = ''OBEN ERSTELLTE ID");







$query = mysql_query($abfrage)or die(mysql_error());

while($row = mysql_fetch_object($query))
 {
  $row->inhalt = preg_replace('/\[b\](.*?)\[\/b\]/', '<b>$1</b>', $row->inhalt);
  $row->inhalt = preg_replace('/\[i\](.*?)\[\/i\]/', '<i>$1</i>', $row->inhalt);
  $row->inhalt = preg_replace('/\[color=([[:alnum:]]{6}?).*\](.*?)\[\/color\]/', '<font color="#$1">$2</font>', $row->inhalt);
  $row->inhalt = preg_replace('/\[url=([^ ]+).*\](.*)\[\/url\]/', '<a href="$1">$2</a>', $row->inhalt);
  $row->inhalt = preg_replace('/\n/', "<br/>\n", $row->inhalt);
 
  echo $row->inhalt;
 }
?>



Im PHP-Code steht ja schon, das dort die oben erstellte ID mit in die .php Datei eingespeichert werden soll. Wie geht dies und wie mache ich, dass der PHP code von "$text" nicht in diesem Script erkannt wird, sondern erst in der erstellten PHP Datei erkannt wird?

Ich hoffe ich habe dies gut genug erklärt!
Hoffentlich versteht ihr alles und könnt mir helfen.
moritz115
 
Zuletzt bearbeitet von einem Moderator:
Also ich würde mal sagen du musst das $ durch \$ maskieren, das ' durch \', das \ durch \\, das " durch \" usw...
Achja und das < von <?php musst du durch ein ascii ersetzen... ich glaub es ist: &lt;
Dann erkennt PHP es nicht als PHP code und schreibt es hinein ;)
Hoffe ich konnte helfen,
Lg
Daniel :D
 
Hallo,

wenn ich vor jedem der genannten Zeichen diese Zeichen davor mache, soll es nicht passieren!? Also wirklich bei jedem? Wird dies dann in der .php Datei auch als PHP-Code erkannt und normal ausgeführt?
Und wie ist es, mit der ID die oben erstellt wird und unten eingefügt werden muss? Mitten in diesem Code. Ich muss das iwie aufteilen. Das weiß ich auch wie. Aber wie kann ich die ID ermitteln, die oben erstellt wurde? Ich könnte natürlich die letzte ID ermitteln, aber dann kann es ja auch passieren, das gleichzeitig ein anderer Eintrag erstellt wurd, und es läuft etwas schief. Also, wie soll ich das machen? Und wie soll ich dann auch noch die ID mit abspeichern? Nur als ID?


mfg
moritz115
 
Also es sollte normalerweise dann anstatt dem \" ein " gespeichert werden... Habe es aber jetzt nicht getestet :D
Zu deinem Id problem... ermittle die zeit in mikrosekunden (microtime) und speichere sie in die db... dann lässt du noch eine variable die auch die mikrosekunden enthält speichern und vergleichst.. :)
Hoffe ich konnte dir helfen,
Daniel
 
Hallo,

das mit den Microsekunden ist ein guter Hinweis. Welcher PHP-Code sollte dafür verwendet werden? Und was ist, wenn genau gleichzeitig zwei ID's erstellt werden? Kann man nicht anders die eben erstellte ID ermitteln?
Das mit dem \" werde ich testen ;)

Danke
moritz115

Hallo,

wenn ich das mit dem \" etc. mache, kommt bei einer .php Datei folgendes heraus:

Code:
<?php echo date("j-M-Y, l"); ?›


Da wird nicht das Datum angezeigt, sondern einfach die Zeile und das PHP wird garnicht gewertet. ich glaube für das > habe ich auch einen falschen Code genommen. Das ist so klein. Aber daran sollte es nicht liegen...


Bei folgendem PHP-Code:



PHP:
$text = "&lt;?php

echo date(\"j-M-Y, l\");

";




$datei = fopen("pages/".$_POST['name'].".php","w");
$datei;
$dateiname = "pages/".$_POST['name'].".php";
$handler = fopen($dateiname , "a+");
fwrite($handler , $text);



Der COde der in der PHP-Datei steht wenn ich ihn mit einem Editor öffne:

Code:
&lt;?php

echo date("j-M-Y, l");

??



Es wird einfach als text gewertet :( Nicht als PHP code ausgeführt... Was nun? Andere Möglichkeit muss her...^^
mfg
moritz115
 
Schau was hiermit geschieht:

PHP:
$text = <<< EOH

echo "Hey," . 'was geht ab?' . \$var;

EOH;

Woher kommt denn der Quelltext? Von einem Formular?
 
Zuletzt bearbeitet:
du musst nach EOH das Simikolon eine Zeile darunter machen!
EOH
;

Aber so funktionierts! SUPER!!

Jetzt nur noch die Frage. WIe mache ich das mit der oben generierten ID? Wie finde ich diese heraus?
 
Zuletzt bearbeitet von einem Moderator:
dann nimm wieder das <?php nicht mit dem ascii code.. und das ?>...
Vielleicht geht es dann...
Zu microtime.. nein es ist nicht möglich das jemand im mikrosekundenbereich gleichzeitig erstellt... außerdem macht der server die anfragen hintereinander ;)
 
Hallo,

Dank für deine (eure) Hilfe ;)
Also wie wäre dann genau der Code für microtime? So, dass der auch in der Datei abgespeichert werden würde? Verstehe noch nicht ganz. Brächte ein Beispiel. Google spuckt mir auch nichts verständliches aus :( Also mit EHO möchte ich das machen...

mfg
moritz115
 
Zuletzt bearbeitet von einem Moderator:
1. Microtime_float:
PHP:
<?php
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();

// Die Skriptverarbeitung fuer einen bestimmten Zeitraum unterbrechen
usleep(100);

$time_end = microtime_float();
$time = $time_end - $time_start;

echo "In $time Sekunden nichts getan\n";
?>
2. Microtime:
PHP:
<?php
$time = microtime(); 
echo $time; // Gibt die Zeit in Mikrosekunden aus
?>
LG
Daniel
 
Zurück