• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Wieso führt er diese Befehle trotz der Anführungszeichen aus?

Nick

Mitglied
Hallo.

Ich habe diesen Code:

PHP:
$text = "
<?php include '../../../../site/head-admin.php' ?>
<?php include '../../../../site/schutz.php' ?>
<body> 
<div id='container'> 
<div id='header'> 
<?php include '../../../../site/nav/nav-login.php' ?>
</div><br />
<?php$db_link = mysql_connect (**, **, **);
$db_sel = mysql_select_db( ** )   
or die('Auswahl der Datenbank fehlgeschlagen'); 
$sql = 'SELECT * FROM beschreibungen WHERE name='".$name."' ';
 $db_erg = mysql_query( $sql );
mysql_free_result( $db_erg );?>
</div>
</body></html> ";

Im anderen Script wird dann eine Datei erstellt die den $text hat. Doch wenn ich diese nun Aufrufe bekomme ich einen Error. Gucke ich mir den Quellcode an kommt das hier:

PHP:
<?php include '../../../../site/head-admin.php' ?>
<?php include '../../../../site/schutz.php' ?>
<body> 
<div id='container'> 
<div id='header'> 
<?php include '../../../../site/nav/nav-login.php' ?>
</div><br />
<?php = mysql_connect ( **, **, **);
 = mysql_select_db( ** )   or die('Auswahl der Datenbank fehlgeschlagen');  
= 'SELECT * FROM beschreibungen WHERE name='Geometrie' ';  
= mysql_query(  );
 
mysql_free_result(  );?>
</div>
</body></html>

Also macht er bei dem ersten Code ja trotz der anführungszeichen was.

Woran liegt das?

MfG
 
Du hast einen grundsätzlichen Gedankenfehler. Man kann keine include()-Funktionen innerhalb von Strings ausgeben. Erst recht nicht mit PHP-Code umgeben.

Falsch:
PHP:
$text = "<? include("datei.php"); ?>";

Auch falsch:
PHP:
$text = "include("datei.php");";

Ebenso falsch:
PHP:
$text = include("datei.php");

Wenn Du die Rückgabe aus per include() eingebundenen Dateien in einem String speichern willst, hast Du 2 Möglichkeiten.

a) Umgib die Ausgabe mit ob_start() und speichere die Rückgabe in der Variable.
PHP:
ob_start();
include("datei.php");
$text = ob_get_contents();
ob_end_clean();

b) Verhindere, dass die eingebundenen Dateien selbst direkt etwas ausgeben und nutze Funktionen um die Ausgabe zu erhalten.

PHP:
include("datei.php");
$text = funktionsname();

Merke: sobald Du etwas per include() einbindest, wird es auch direkt ausgeführt.
 
Dabei funktionieren die inkludes ja. Die werden erst im entsprechenden Dokument ausgeführt. Und Inkludieren da wie sie's sollen Navigation und Header.

Der Teil der ja nicht klappt ist das Variablen initialisieren.

z.B.
PHP:
$sql = 'SELECT * FROM beschreibungen WHERE name='".$name."' ';
wird zu
PHP:
 = 'SELECT * FROM beschreibungen WHERE name='Geometrie' ';
also wird das $sql wegestrichen...
 
ich verstehe das nicht so ganz.
Die Inklude Fuktionen werden ja nicht direkt ausgeführt, sondern erst wenn sie im nächsten Dokument sind. Das ist ja auch richtig so, denn ich will ja im erzeugten Dokument nicht die inkludierte Navigation haben sondern immer noch den inklude befehl.

Und ich finde in deinem Text nichts zu meinem Problem mit den Variablen, sry :/

Danke schon mal
MfG
 
Dein Problem ist, dass Du nicht verstanden hast, dass das was Du hier versuchst gar nicht geht. Daher habe ich dir die Alternativen genannt. Wenn Du genauer beschreibst was Du eigentlich vor hast, könnte man vlt. auch mehr Details liefern?!
 
Also im Admin Bereich von meinem Programm gibt es ein Formular mit dem man einen Text erstellen kann den User dann lesen können.
Dazu gibt es ein Formular in dem man eine Kategorie auswählt, einen Namen und dann die Beschreibung.

Wenn er Abschickt wird Name und Beschreibung in eine MySQL Tabelle eingetragen, und ein Dokument mit dem Namen erstellt. In diesem Dokument soll nun der Text den der Admin in seinem Formular hatte der dann in die Datentabelle gekommen ist stehen.

Ich hatte das schon mal geschafft ohne den Datenbank zwischenschritt, allerdings ist es mit Datenbank konfortabler den Text wieder zu bearbeiten.

Bei dem Dokument das nun erstellt wird, soll also nun erst mal der Grundaufbau der Seite stehen also das header und nav inkludiert werden, und dann die Funktion zum Niederschreiben des Inhalt feldes aus der Datenbank.


Das hier ist das Formular im Admin Bereich zum Erstellen des Themas:
PHP:
<form method="post">
Themenamen angeben<br />
<input name="name" type="text"> 
<br />
Beschreibung angeben<br />
<textarea name="explain" cols="50" rows="30"></textarea> 
<br />Klasse angeben f&uuml;r die die Beschreibung bestimmt ist.<br />
<input type="radio" name="klasse" value="5und6">5 und 6
<input type="radio" name="klasse" value="7und8"> 7 und 8
<input type="radio" name="klasse" value="9und10"> 9 und 10
<input type="radio" name="klasse" value="oberstufe"> Oberstufe <br />
In welches Fach geh&ouml;rt die Beschreibung?  <br />
<input type="radio" name="fach" value="mathe">Mathe
<input type="radio" name="fach" value="technik">Technik
<br />
Abschicken<br /><input type="submit" value=" Absenden "><input type="reset" value=" Abbrechen"></form>
<?php
$explain = $_POST["explain"];
$klasse = $_POST["klasse"];
$name = $_POST["name"];
$fach = $_POST["fach"];

if (isset($_POST['sumbmit'])) 
{
if ($name || !$klasse || !$fach || !$explain) {    
echo '<font color=#FF0000>Sie haben nicht alle notwendigen Details eingegeben.<br />';    
exit;
}
}
@ $db = new mysqli('**', '**', '**', '**');
$query = "insert into beschreibungen values          ('" . $name . "', '" . $explain . "',NOW() )";
$result = $db->query($query);
$pfad = "../".$klasse."/".$fach."/erklaerung/".$name.".php";
$text = "
<?php include '../../../../site/head-admin.php' ?>
<?php include '../../../../site/schutz.php' ?>
<body> 
<div id='container'> 
<div id='header'> 
<?php include '../../../../site/nav/nav-login.php' ?>
</div><br />
<?php
$db_link = mysql_connect ( **, **, **);
$db_sel = mysql_select_db( ** )  
 or die('Auswahl der Datenbank fehlgeschlagen'); 
$sql = 'SELECT * FROM beschreibungen WHERE name='".$name."' '; 
$db_erg = mysql_query( $sql );
echo $zeile['Content']; 
mysql_free_result( $db_erg );?>
</div>
</body></html> ";

$fp = fopen ("../".$klasse."/".$fach."/erklaerung/".$name.".php", "w");   
fwrite($fp,$text); 
if (fwrite == 1) {
echo '<font color=#FF0000>Datei wurde erstellt & beschrieben ! 
<a href="'.$pfad.'"> Jetzt anschauen </a><br />';
 }
fclose($fp); 

?>
</div>

und daraus soll halt dann die Datei erstellt werden mit dem Namen den man Angibt, und dem Inhalt den man dort angibt.

MfG
 
Ahnte schon so etwas. Dann wäre meine 1. Antwort immer noch die Richtige und für deinen Fall passende. Stichwort ob_start().

Alternativ kannst Du auch mit Platzhaltern arbeiten. Also nicht diese Seiten includen sondern anstelle dessen nur Platzhalter einfügen die dann bei der Ausgabe des Textes durch die eigentlichen include-Dateien ersetzt werden.

So wie Du es aktuell geschrieben hast, geht es definitiv nicht.
 
Also ich versteh beide Methoden nicht.
Wenn ich mit
diesem ob_start() arbeite also:
PHP:
ob_start();
$text = "
<?php include '../../../../site/head-admin.php' ?>
<?php include '../../../../site/schutz.php' ?>
<body> <div id='container'> <div id='header'> 
<?php include '../../../../site/nav/nav-login.php' ?>
</div><br />
<?php$db_link = mysql_connect ( **, **, **);
$db_sel = mysql_select_db(** )  
 or die('Auswahl der Datenbank fehlgeschlagen'); 
$sql = 'SELECT * FROM beschreibungen WHERE name='".$name."' '; $db_erg = mysql_query( $sql );
mysql_free_result( $db_erg );?>
</div>
</body></html> ";
$text = ob_get_contents();
ob_end_clean();
gibt es zwar auf der erstellten Seite keinen Syntax fehler mehr, aber dafür ein komplett leeres Dokument.

MfG
 
Zuletzt bearbeitet:
Schau dir mal das Syntax-Highlightning an. Alles, was hier rot ist, wird nicht ausgeführt!

PHP:
<?php
ob_start();
$text = "
<?php include '../../../../site/head-admin.php' ?>
<?php include '../../../../site/schutz.php' ?>
<body> <div id='container'> <div id='header'> 
<?php include '../../../../site/nav/nav-login.php' ?>
</div><br />
<?php$db_link = mysql_connect ( **, **, **);
$db_sel = mysql_select_db(** )  
 or die('Auswahl der Datenbank fehlgeschlagen'); 
$sql = 'SELECT * FROM beschreibungen WHERE name='".$name."' '; $db_erg = mysql_query( $sql );
mysql_free_result( $db_erg );?>
</div>
</body></html> ";
$text = ob_get_contents();
ob_end_clean();
?>

include bindet nur eine Datei in den Code ein. Wenn du include "datei.php"; machst, wird der Code aus datei.php einfach an dem Ort eingefügt, wo du den Befehl gemacht hast.

Was du willst, ist den von datei.php generierten Inhalt in eine Variable speichern.

Vereinfacht ist das Beispiel so:
PHP:
ob_start();
include "datei.php";
$generierter_inhalt = ob_get_contents();
ob_end_clean();

Wenn du das nicht verstehst, solltest du dich mal mit PHP-Grundlagen auseinandersetzen.
 
Nein ich möchte das dieser String dort oben erst mal nicht ausgeführt wird, sondern erst wenn er in der Richtigen Datei ist. Das klappt ja auch halt außer mit den nicht roten teilen.

Das was nicht funktinoiert ist, das z.B.
PHP:
db_link
im String kein String ist sondern ausgeführt wird.
Jetzt muss ich es verhindern das er schon irgendwas damit macht bevor die Datei gespeichert ist.
Und das bekomme ich mit ob_start() nicht hin.
 
Wie gesagt: ob_start() wäre eine Variante. Die Alternative dazu wären Platzhalter (siehe oben), welche ich für deinen Fall auch empfehlen würde.
 
Könntest du mir bitte mal ein Beispiel geben?
Ich versteh nicht wie ich entweder ob_Start() oder Platzhalter einbauen soll...

Danke :)
 
Platzhalter, wie der Name schon sagt:

PHP:
$text = "[KOPF] Text der Seite [FOOTER]";

So speicherst Du das in der Datenbank. Bei der Ausgabe von diesem Text ersetzt Du dann die Platzhalter durch das was die includeten Dateien ausgeben. Also:

PHP:
ob_start();
include("kopf.php");
$kopf = ob_get_contents();
ob_end_clean();
$ausgabe = str_replace("[KOPF]", $kopf, $ausgabe);
 
Hea?! Ich verstehe keinen Satz aus dem Thread.. kann es sein, dass im Laufe des Threadverlaufes Sachen editiert wurden?? Alles was im ersten Thread steht, ist bereits nicht vergleichbar mit dem Code o_O

Prinzipiell.. hab ich nur raus gelesen, dass man in eine Variable kein include setzen kann, dabei möchte ich jedoch etwas hinzufügen:

[getUser.php]
PHP:
<?php
    return array( 'Username' => 'Test' );
?>

[index.php]
PHP:
<?php
    $user = include( 'getUser.php' );

    echo $user[ 0 ];
?>

Das funktioniert.. auch nett falls man aus unerklärlichen Gründen auf JSON verzichten will bzw. es anders machen will.

"Think different" Variante. Fehlt nur, dass die Variante um 1000€ teurer ist..
 
Zurück
Oben