PHP Link dynamisch zusammensetzen, dringend :)

BoDyGuArD

Lt. Junior Grade
Registriert
Feb. 2003
Beiträge
327
Hey Community,

sitze gerade an einem Problem an dem ich beinahe verzweifle und Hilfe brauche..

Also, folgendes:
Ich rufe eine URL folgendermaßen und mit folgenden Parametern auf:
"www.xyz.de/index.php?content=home&lang=de"
Ich möchte nur mit dem Template "index.php" arbeiten und den content einfach simpel anhand des Aufrufes an bestimmten Stellen includen. (externe Dateien, content_..._de/en.php)

Folgendermaßen möchte ich mir nun aus dem obigen Aufruf das "include-file" zusammensetzen:
content_home_de.php

Bis jetzt sieht es so aus:
Code:
<?php 
	# Content includen!
	$content = $_GET['content'];
	$contents = array('home', ...);

	if (!empty($content)) 
	{
		if(in_array($content,$contents)) 
		{
			$content .= '.php'; // [B]Hier fehlt der passende Code zum zusammensetzen![/B]
			include($content);
		}
		else 
		{
			echo 'Page not found. Return to <a href="index.php">strong>index</strong></a>';
		}
	}
	else 
	{	
		include(...);
	}
?>

Ich hoffe, ich habe mich einigermaßen verständlich ausgedrückt!

Die Seite soll 2-sprachig sein, es sollen einzelne Files mit dem Inhalt und der Form content_"Content-Aufruf-In-Adresszeile"_"Sprach-Aufruf-In-Adresszeile".php
included werden.

Oder gehts leichter?

Vielen Dank für die Hilfe!
Tobi
 
Hi,

ich habe deinen Wunsch mal nachgebaut und hoffe, dass das so in deinem Interesse ist.
Habe lange nichts mehr mit PHP gemacht, sei als bitte gnädig mit mir ^^
Wenn du die Seite folgendermaßen aufrufst, sollte die zu includende Datei per echo ausgegebene werden (zu Testzwecken): seite.php?content=home&lang=en

PHP:
<?php
	$sprache = $_GET['lang']; 
	$content = $_GET['content'];
	$seiten = array('home', 'about', 'impr');
	
	if((in_array($content, $seiten)) AND ($sprache == "de" OR $sprache == "en" ))
	{
		$einbinden = "content_" . $content . "_" . $sprache . ".php";
		echo $einbinden; // zum Testen
		//include ($einbinden); für später
	}
	else
	{
		echo "Die aufgerufene Seite existiert so nicht.";
	}
?>


Gruß
 
Surviv0r schrieb:
$content = 'content_' . $_GET['content'] . '_' . $_GET['lang'] . '.php';

?!

btr.fly schrieb:
Hi,

ich habe deinen Wunsch mal nachgebaut und hoffe, dass das so in deinem Interesse ist.
Habe lange nichts mehr mit PHP gemacht, sei als bitte gnädig mit mir ^^
Wenn du die Seite folgendermaßen aufrufst, sollte die zu includende Datei per echo ausgegebene werden (zu Testzwecken): seite.php?content=home&lang=en

PHP:
<?php
	$sprache = $_GET['lang']; 
	$content = $_GET['content'];
	$seiten = array('home', 'about', 'impr');
	
	if((in_array($content, $seiten)) AND ($sprache == "de" OR $sprache == "en" ))
	{
		$einbinden = "content_" . $content . "_" . $sprache . ".php";
		echo $einbinden; // zum Testen
		//include ($einbinden); für später
	}
	else
	{
		echo "Die aufgerufene Seite existiert so nicht.";
	}
?>


Gruß
Funktioniert super, vielen Dank für die Hilfe!
 
Frage am Rande: wäre
PHP:
if(is_file("content_" . $content . "_" . $sprache . ".php")) include("content_" . $content . "_" . $sprache . ".php");
else echo "seite existiert nicht";

nicht ausreichend? is_file erlaubt doch auch nur local, weshalb injections hier nicht das thema sein sollten.
 
Stimmt, schöne und einfache Lösung. Da kann man sich das Array und die Sprachabfrage sparen :)
 
Guter Lösungsvorschlag!
Jetzt gibts noch nen neues Problem, schließt leider an die Lösung von diesem an.

Ich möchte in ein leeres div per include (deshalb das ganze Heckmeck) mein HTML-Layout + Inhalt includen.
Leider bekomme ich es nicht hin, in eine .php-Seite html code funktionierend zu includen! Wie mache ich das?! Per echo zickt alles rum!

Kann mir hierzu bitte auch nochmal jemand weiterhelfen?!

Vielen Dank!
 
volcem schrieb:
PHP:
<div id=bla class bla>
include("seite.php");
include("seite.html");
include_once("seite.php");
</div>

??
Und das jetzt noch bezogen auf meine Problemstellung, das ich erst während des Aufrufes entscheide, welche Datei ich include?

PHP:
if(is_file("content_" . $content . "_" . $sprache . ".php")) 
    include("content_" . $content . "_" . $sprache . ".php");
else echo "seite existiert nicht";

Sprich, da nen html include?
 
Wenn ich dich richtig verstanden habe willst du wenn es die Seite nicht gibt eine "externe" einbinden?
Wenn ja:

PHP:
<?PHP
if(is_file("content_" . $content . "_" . $sprache . ".php"))
 {  
    include("content_" . $content . "_" . $sprache . ".php"); 
    } else {
    include_once("deine_html_seite.html");
    } ?>

Wahlweise könntest du auch gleich deinen html code reinschreiben(wenn nicht zuviel ist(wegen der übersicht))

PHP:
<?PHP
if(is_file("content_" . $content . "_" . $sprache . ".php"))
 {  
    include("content_" . $content . "_" . $sprache . ".php"); 
    } else { ?>
    <p>Hier dein HTML-Code, ganz normal in HTML geschrieben</p>
    <?PHP } ?>
 
nein, ich möchte, WENN es den Aufruf GIBT .html includen. Ich versuchs mal auf deine erste Art und Weise :)
 
Funktioniert, er macht aber aus allen Umlauten das hier: �
Wie kann ich das lösen?
 
lol versuche mal statt ö &ouml; zu schreibe usw.
ü = &uuml;
ä = &auml;
Ü = &Uuml; usw...........
MfG
Destruction
 
Das ist, wenn ich große Textinhalte include etwas umständlich, genau deshalb hab ich ja hier Rat gesucht! :) Da muss es doch eine Möglichkeit geben?!
 
Gibt folgende Möglichkeiten:
Du setzt im Header direkt utf_8 oder iso-8859-1
utf_8 ist hier wohl die bessere Wahl.

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Dann kannst du auch alle in der 'variable' "umwandeln" lassen:

Nennt sich " htmlentities($deinevariable) wo ÄÜÖ etc drin sind "
Und für den Rest, diese Funktion: html_special_chars()

Aber besser ist das wenn du deine Dateien in utf_8 codierst.
Einfach zwischen deinen <head>bla</head> bereich s.o kopieren und gut.
 
Achte bitte darauf, dass
  • Die Kodierung der HTML-Datei (im Texteditor zb utf8 enistellen)
  • Die Kodierung der PHP-Datei (im Texteditor zb utf8 enistellen)
  • META Charset-Definition in der HTML-Datei (<meta http-equiv="Content-Type" content="text/html; charset=utf-8">)
  • Charset des Webservers (header ("Content-type: text/html;charset=utf-8");)
identisch sind
 
Einhörnchen schrieb:
Frage am Rande: wäre
nicht ausreichend? is_file erlaubt doch auch nur local, weshalb injections hier nicht das thema sein sollten.

Wenn du damit leben kannst, dass du somit Bugs oder Exploits in is_file (die in Zukunft jemand finden könnte) ausgesetzt bist, geht das okay :)
 
Zurück
Oben