Beiträge

[PHP] Deutsches Zahlenformat konvertieren mit Punkt als Dezimaltrenner

Hallo,

du kennst das wahrscheinlich. Man hat auf seiner Webseite ein Eingabefeld für eine Zahl, die Kommastellen beinhalten kann. Ein Geldbetrag zum Beispiel. Wir geben da dann natürlich etwas in der Art ein: 54,23
So sieht eine Zahl bei uns aus. Aber nicht überall auf der Welt. Die meisten sogar schreiben eine Zahl mit Dezimalstellen so: 54.23. Also mit einem Punkt als Dezimaltrenner. „Leider“ wollen auch Computer und Datenbanken die Zahl mit Punkt als Dezimaltrenner. Und damit geht das Problem los. Man muss also alle Eingaben prüfen und ggf umwandeln.

In meiner ganzen Zeit als Programmierer ist mir das schon oft vor die Füße gefallen. Und heute habe ich eine einfach wie auch geniale Lösung gefunden. Die folgende Zeile nimmt jede Form einer Zahl und wandelt sie in eine Zahl mit Punkt als Dezimaltrenner um. Soweit ich das getestet habe, funktioniert sie absolut sauber.

$val = floatval(preg_replace('/\.(?=.*\.)/', '', str_replace(",",".",$val)));

Was passiert da?

Als erstes wird jedes Komma durch einen Punkt ersetzt. Danach werden alle Punkte, bis auf den letzten entfernt und dann das Ergebnis noch in ein Float umgewandelt und damit auch gleich validiert.

Damit sollte sich das Thema hoffentlich erledigt haben :-)

[PHP] Zeichenketten normalisieren – Groß- und Kleinschreibung

Hallo,

heute mal wieder eine kleine Aufgabe in PHP. Folgende Situation:

Wir haben einen Text-String in dem (natürlich) ein Text steht. Nehmen wir an der Inhalt lautet
HIER bekommen Sie heute total GÜNSTIGE Gurken DIREKT vom Landwirt.
Wir möchten diesen String jetzt automatisch so umändern das alle Wörter die nur Großbuchstaben enthalten, umgewandelt wird in: Anfangsbuchstabe groß – Rest klein
Also so wie sich das gehört. Natürlich müssten wir jetzt logischerweise gucken welche davon wirklich mit einem Großbuchstaben anfangen, wenn Sie denn mitten im Satz stehen. Denn sonst würden wir eine furchtbare Rechtschreibung dabei entstehen lassen. Aber wenn man nicht gerade ein verdammt gutes Wörterbuch (Datenbank) und eine entsprechend gute Routine parat hat, dann muss man sich erst einmal mit meiner Lösung zufrieden geben.

Also Aufgabenstellung ist klar. Wörter die nur aus Großbuchstaben bestehen sollen in kleine Buchstaben mit dem ersten Zeichen groß umgewandelt werden. Aus dem Beispiel oben wird dann aus HIER -> Hier

Eine fertige Lösung gibt es nicht. Etwas eigenes muss her. Der naheliegendste Gedanke ist die Wörter aufteilen und jedes einzelne Kontrollieren ob es nur aus Großbuchstaben besteht. Wenn ja, dann umwandeln, wenn nicht…. dann nicht. Danach alles wieder zusammenbasteln und fertig.

Soweit, so gut. Funktioniert auch sehr schön. Nur eine Sache ist mir aufgefallen. Ich habe zum Umwandeln erst die Funktion ucfirst() benutzt. Diese macht genau das. Erster Buchstabe groß. Man muss nur vorher alles erst einmal mit strtolower() alles klein machen.
Und hier gab es das Problem. Durch Zufall habe ich „GRÖßE“ umwandeln wollen. Dabei hat es die Umlaute total zerschossen. Wenn strtolower() Umlaute „klein macht“ dann zerschießt es irgendwie den Charset. Genauer habe ich mich damit noch nicht beschäftigt, aber zumindest eine Lösung gefunden. Und die heißt: mb_strtolower($String,’UTF-8′)

Wie man sieht kann man hier den Charset mit angeben.  Somit bleiben Umlaute erhalten.

Hier noch mal der ganze Code.


	function NormalizeString($String) {
		$StrA = explode(" ", $String);
		$StrAc = count($StrA);
		$Out = "";
		for($i=0;$i<$StrAc;$i++) {
			$tmp = preg_replace('/[^a-zA-ZäÄöÖüÜß]/', '', $StrA[$i]);
			if(!empty($tmp) && strtoupper($tmp) == $tmp) {
				//Alles groß
				$StrA[$i] = ucfirst(mb_strtolower($StrA[$i],'UTF-8'));
			}
			$Out .= $StrA[$i]." ";
		}
		
		return $Out;
	}

Erst erstellen wir mit explode() ein Array der einzelnen Wörter. Dann durchlaufen wir jedes einzelne in einer For-Schleife. Wir erstellen eine TMP-Variable in der das Wort noch einmal bereinigt wird, damit man es besser vergleichen kann. Was dann auch getan wird. Wird festgestellt das dass Wort groß geschrieben ist, so ändern wir das. Und dann geht alles wieder in die $Out Variable zurück und wird schließlich zurück gegeben.

Viele Grüße
Gordon

[PHP] Kommentare in PHP Scripten

Hallo zusammen.

Heute reden wir mal über Kommentare :)
Wenn man ein Script erstellt, dann ist es sinnvoll das Script zu kommentieren. Also eine kleine Dokumentation im Script. Denn solange man gerade damit Arbeitet und das Script in einer relativen Größe bleibt, weiß man noch was genau welche Zeile macht und wozu Sie da ist.

Doch spätestens wenn das Script beachtliche Formen annimmt und/oder man nach Wochen oder Monaten mal wieder reinschaut… ist alles weg. Wie war das noch gleich? Was macht diese Zeile hier? Wo finde ich jetzt das und das?…  Alles weg… der Code besteht nur noch aus Kauderwelsch.
Spätestens jetzt tritt man sich selbst in den Ar*** das man den Code nicht Kommentiert hat.

Natürlich dauert es länger wenn man zum Code auch noch was schreiben muss… aber irgendwann kann es sich auszahlen. Auch (und gerade) wenn man ein Projekt von einem anderen Programmierer übernimmt ist es wichtig Dokumentierten Code vorzufinden.

Und es ist sooo einfach ;) 2 Schrägstriche (//) bei einer Zeile und ein Schrägstrich mit Stern bei mehreren Zeilen (/* am Anfang… und */ am Ende). Das ganze sieht dann so aus.



Und noch ein Mehrzeiliger Kommentar:



Viele Grüße
Gordon

[PHP] Dateiupload und Dateidownload

Jeder macht das eine und einige machen auch das andere. Die Rede ist vom Hoch- und Runterladen von Dateien im Internet. Jeder kann etwas herunter laden. Ob die Bedienungsanleitung, im PDF-Format, für den Fernseher oder ein schickes Bildchen als Bildschirmhintergrund oder oder oder… die Möglichkeiten sind schier unbegrenzt. Auf der anderen Seite gibt es natürlich auch I-Net Nutzer die auch Dinge hochladen.

Hier möchte ich kurz erklären wie man es als PHP Programmierer lösen kann. Viele Wege führen bekanntlich nach Rom. Hier mein Weg.
Als erstes der Upload. Hier brauchen wir natürlich überhaupt erst einmal eine HTML-Form mit einem Dateifeld. In seiner einfachsten Form würde das so aussehen:



Hier kann der User dann seine Datei auswählen und die Form abschicken. Damit wird, in diesem Fall, die Datei erneut aufgerufen und die Formulardaten mit übergeben. Sprich die Dateidaten. Diese können nun mit PHP erfasst und ausgewertet werden.


if(!empty($_FILES["file"]["name"])) {
	$UploadFolder = "./uploads/";

	//Dateinamen auf ungueltige Zeichen pruefen
	$Dateiname = preg_replace('/[^a-z0-9.-_]/', '', strtolower($_FILES["file"]["name"]));

	//Existiert die Datei auch noch nicht
	if(!file_exists($UploadFolder.$Dateiname)) {
		//An die richtige Stelle kopieren
		move_uploaded_file($_FILES['file']['tmp_name'], $UploadFolder.$Dateiname);
		if(!file_exists($UploadFolder.$Dateiname)) {
			echo "Datei konnte nicht hochgeladen werden. Bitte wenden Sie sich an einen Administrator.";
		} else {
			//Datei ist hochgeladen
		}
	} else {
		echo "Es existiert bereits eine Datei mit diesem Dateinamen. Bitte bennenen Sie die Datei um.";
	}
}

So. Damit haben wir die Datei hochgeladen und in dem Ordner „Uploads“ abgelegt. Das ist natürlich nicht alles. Jeder muss hier seinen eigenen Weg gehen.
Der Dateiname muss z.B. irgendwo (Datenbank) gespeichert werden, damit sich das System später daran „erinnert“. Aber für den Upload selbst reicht das.

Kommen wir zum 2. Teil. Dem Download der Datei.

Ein User hat jetzt eine Bedienungsanleitung auf einer Webseite hochgeladen und für andere Benutzer zum Download zur Verfügung gestellt. Jetzt kommt ein anderer User und möchte die Datei downloaden.

Als Programmierer wäre es das einfachste einfach einen Link zu veröffentlichen der auf die Datei, im Dateisystem, zeigt. Das hätte aber den Nachteil das dieser Link kopiert werden könnte und jeder die Datei einfach herunterladen kann. Schlecht wenn das vielleicht eigentlich nur registrierte Mitglieder dürfen sollen.
Also muss eine andere Lösung her. Hier wieder mein Weg nach Rom ;-)


$UploadFolder = "./uploads/"; //Name des Ordners mit der Downloaddatei
$FileName = "musterdatei.pdf"; //Name der Downloaddatei

header("Content-Type: ".$mimeType);
header("Content-Length: ".filesize($UploadFolder.$FileName));
header("Content-Disposition: attachment; filename="".$FileName.""");
readfile($UploadFolder.$FileName);
exit;

Ja, das war es schon ;-) Aber es ist etwas komplizierter als es auf den ersten Blick scheint. Ich denke die ersten beiden Variablen sind klar. Der Content-Type beschreibt die Datei. Ob es ein Bild, PDF, Word-Dokument oder sonst was ist. Am besten ist hier diesen beim Upload gleich mit zu speichern. Denn das ist der einzige Zeitpunkt wo Du den Content Type „geliefert“ bekommst. Sonst könnte man ihn noch über die Dateierweiterung rausbekommen.

Content-Length ist die Länge der Datei. Vorsicht, nicht wirklich die Größe. Da 1 Zeichen aber einem Byte entspricht – wie praktisch – können wir einfach die Dateigröße in Byte (!) angeben. ;-)

Bei Content-Disposition wird einfach gesagt Dateianhang und den Dateinamen. Hier muss nicht der Originale Dateiname angegeben werden, es könnte auch ein fiktiver angegeben werden.

Und zu guter letzt noch mit readfile die Datei einlesen und gleichzeitig ausgeben.

Ganz wichtig ist hier noch das vor diesem Code keine Ausgabe an den Browser gemacht werden darf. Am besten ist es für den Download eine eigene Datei zu erstellen und vor diesem Code nur das nötigste zu tun. Zum Beispiel checken ob der User, der den Download starten möchte, auch die Berechtigung hat oder die Variablen aus einer Datenbank auslesen. Aber keinerlei ausgaben an den Browser machen, sonst erscheinen ganz viele komische Zeichen im Browser ;-)

[PHP] Passwort generieren

Hi,

da ich auch das ab und zu brauche und jedes mal eine gute Funktion suche… hier meine Gedächtnissstütze :-)


$pwZeichen = 'wertzupasdfghkyxcvbnmWERTZUPLKJHGFDSAYXCVBNM23456789';
srand ((double)microtime()*1000000);
for($i = 0; $i < 5; $i++) {
$passwort .= substr( $pwZeichen, (rand()%(strlen ($pwZeichen) ) ), 1);
}

In der Variable $pwZeichen sind alle Zeichen aufgeführt die in dem Passwort verwendet werden. srand startet den Zufallsgenerator (sonst würde das Passwort aus ein und dem selben Zeichen bestehen ;-)
Die ‚for‘-Schleife bestimmt wieviele Zeichen das Passwort hat. Hier 5. Du kannst den Wert aber auch verändern. Und zu guter letzte werden die Zeichen hintereinander in die Variable $passwort geschrieben.

Das wars schon ;-)

[Tips & Tricks] Wie fange ich an?

Hallo,

hier möchte ich mal ein paar Tips und Tricks aus meiner persönlichen Erfahrung weitergeben. Ich kann nun auf einige Jahre Programmiererfahrung zurückblicken und habe selbst viel Zeit gebraucht um ein paar wichtige Erfahrungen zu machen. Damit andere vielleicht schneller dahinter kommen wie manche Dinge besser laufen, möchte ich ein paar Eckpunkte hier aufschreiben ;)

1) Trenne immer Code und Design

Meine ersten Seiten bestanden aus reinem HTML und alles war in einer Datei… wie auch sonst. Dann kam JavaScript und CSS ins Spiel und damit die ersten, primitven, Anfänge Code auszulagern. Als ich dann mit PHP angefangen habe und diverse Bücher, Foren, Internetquellen und sonstiges dazu konsultierte, wurde der Code weiterhin in einer Datei gespeichert. Also HTML und wild dazwischen der PHP-Code.
Das erste mal, an das ich mich erinnern kann, das ich merkte das diese Art und Weise eigentlich misst ist war als ich auf einer Seite ein komplettes Layout Redesign machen wollte. Mir blieb im Prinzip nichts anderes übrig als die Seite komplett neu zu machen.
Mein Fazit heute: PHP-Code und Layout immer strickt trennen. So viel wie möglich mit CSS arbeiten (man kann fast alles im Layout damit aendern und CSS wird (sollte) immer in einer seperaten Datei gespeichert werden). Ich habe auch mal den Fehler gemacht und HTML code mit PHP erstellt und dann wiederum in das HTML-Template eingebunden… wenn möglich auch das vermeiden.

2) Arbeite Objektortientiert

Wie oben schon beschrieben habe ich frueher alles in einer Datei gehalten. Ob Funktionen, PHP-Code, HTML, CSS und Javascript. Alles in einer Datei. Warum ist das jetzt schlecht? Nehmen wir z.B. die Emailüberprüfung (also ob eine Emailadresse valid ist). Diese wird z.B. gebraucht wenn der User sich registriert. Haben wir einen Newsletter brauchen wir sie auch da. Bauen wir die Funktion in beide Dateien ein und möchten wir die Funktion einmal erweitern dann müssen wir beide Dateien ändern. Zusätzlich wird mehr Speicherplatz benötigt. Immer (!) auslagern. Prinzipell alles was mehrfach gebraucht wird… besser noch alle Funktionen und Klassen immer in externe Dateien auslagern.

Heute ist die Regel: Lagere alles aus was du kannst und was Sinnvoll ist! Das heisst alle Funktionen kommen in eine seperate Datei, Layoutheader und -footer definitv auslagern, so viel wie möglich mit CSS arbeiten (dies natuerlich in einer seperaten Datei speichern), mit Klassen arbeiten (das Thema ist sehr umfangreich), arbeiten mit Strukturen. Alles was mehrfach gebraucht wird bekommt eine Funktion… wenn nicht gar Klasse.

3) Daten die sich ändern können immer in eine (1) Variable legen

Auch hier das selbe Prinzip. Alles was sich ändern kann muss zentral in einer Variable gelagert werden. Aktuelles Beispiel: WordPress versendet (unter bestimmten Voraussetzungen) automatisch Emails. Die Absenderadresse ist fest im Code (an mehreren Stellen) eingebaut und setzt sich aus „wordpress@“ und dem Domainnamen zusammen. Existiert diese Emailadresse nicht real so kann es zu Fehlern kommen… will man Sie ändern muss man in den Code. Hätte man diese in eine Variable (z.B. in der wp-config.php oder gar in der Datenbank) abgelegt waere es ein leichtes Sie zu ändern. Was ich mit dem Beispiel sagen will ist: Baue nichts in den Code ein was sich ändern kann. Besonders dann nicht wenn der Code / das Script weitergegeben werden soll.

4) Erfinde nicht jedes Rad neu

Das hier ist kein Aufruf zum Datenklau! Aber es gibt heutzutage zu (fast) jedem Thema ein Tutorial, einen Codeschnipsel, eine Anleitung oder einfach nur den eigenen Verstand. Man muss nicht für jede Funktion von vorn Anfangen und viele der Codestücke sind millionenfach erprobt und im Einsatz und damit auch fehlerfreier als die eigene Funktion vielleicht sein würde.
Somit kann man sich viel Zeit und Ärger ersparen und auf bestehende Codefragmente zurückgreifen. Sonst kann man auch gern mal bei den anderen Schauen und sich gedanken darüber machen wie die es wohl gelöst haben könnten.
Zu vielen Sachen gibt es sogar komplett fertige Systeme. Wobei ich persönlich selten komplette Systeme nutze. Wenn dann doch mal was geändert werden muss dann muss man sich erst in das Script einarbeiten und, je nachdem wie der Programmierer gearbeitet hat, kann das mitunter sehr kompliziert werden.

… to be continued.

[PHP] Informationen über PHP und den Server

Hallo zusammen,

ein sehr wichtiges Werkzeug bei der Programmierung ist die PHP-Funktion „phpinfo()„. Sie wird immer wieder gebraucht wenn man etwas über den Server, die Konfiguration, Variablen und änliches wissen möchte.

Wie gebraucht man es? Ganz einfach… entweder eine neue Datei erstellen oder in eine bestehende (am besten ganz oben) einbauen:

<?php
phpinfo();
exit;
?>

Das war es auch schon. Ruft man diese Datei nun auf gibt PHP alles raus was er „weiß“. Einfach mal ausprobieren, man kann damit nichts kaputt machen ;)

Möchte man zum Beispiel wissen ob Apache mit dem mod_rewrite-Modul compiliert ist… phpinfo (diese Information steht ganz oben mit). Oder ob bestimmte Module includiert sind… phpinfo(). Auch informationen über die aktuelle Seite werden ausgegeben… z.B. welche IP der Besucher hat und noch wichtiger, in welcher $_SERVER-Variablen diese gespeichert ist. Welche Variablen (POST, GET, COOKIE) übergeben bzw. gespeichert sind.

Aber wie gesagt, einfach ausprobieren… es sind nur informationen… man kann nichts kaputt machen oder verändern. ;)

Gruß
Gordon


Hinweis: Die Verwendung meiner Codeschnipsel erfolgt auf eigene Gefahr! Ich übernehme auch keine Garantie auf Funktionstüchtigkeit (jeder Server ist anders konfiguriert. Bei Problemen können Sie hier aber gern einen Kommentar schreiben und wir suchen eine Lösung. ;)

[PHP] Emailadresse auf korrektheit prüfen / validieren

Hallo zusammen,

fast auf jeder Webseite gibt es ein Feld wo der Besucher seine Emailadresse eingeben soll. Ob in einem Kontaktformular, für die Anmeldung bei einem Newsletter oder für die Anmeldung zu einem Mitgliederbereich. Es gibt Anwendungen wo dies nötig ist.

Wir müssen in jedem Fall die Emailadresse prüfen. Ob Sie vom Aufbau her korrekt ist (nicht das der User ausversehen die Felder verwechselt hat und hier eine Internetadresse eingegeben hat) und wie können prüfen ob es die dazugehörige Domain überhaupt gibt. Schreibfehler in der Emailadresse können wir jedoch leider nicht prüfen… bzw. dies nur mit einem Aufwand der sich nicht mehr rentiert.

Hier eine einfache Funktion zum prüfen der Emailadresse:

 
function mailCheck($email) { 
	return preg_match("/^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-.]+.([a-zA-Z]{2,4})$/", $email); 
} 

Bei dieser Funktion wird lediglich geprüft ob der Syntax der Emailadresse korrekt ist. Das heißt ob das „@“-Zeichen an der richtigen Stelle ist, ob eine TLD vorhanden ist. Ob die Domain vorhanden ist wird hier noch nicht geprüft.

Hier nun eine erweiterte Funktion:

 
function mailcheckDNS($mail) { 
	$email = htmlspecialchars($mail); 
	$r = false; 
	if(preg_match('/(.*?)@(.*?).(w){2,6}/i', $email)) { 
		$split = explode('@', $email); 
		$split2 = explode('.', $split[1]); 
		if(preg_match('/([a-z]){3,64}/i', $split2[0])) { 
			if(preg_match('/([a-z0-9!"$&/()?~#+.:_-]+){1,64}[^@]/i', $split[0])) { 
				$MXCheck = getmxrr($split[1], $mxhosts); 
				if(!empty($MXCheck)) { 
					$r = true; 
				} 
			} 
		} 
	} 
	return $r; 
} 

Diese überprüft nun zusätzlich ob die Domain überhaupt existiert indem sie versucht diese zu erreichen. Ist dies möglich dann fällt die Überprüfung positiv aus, wenn nicht dann negativ.

Es gibt keinen 100%igen Emailcheck, aber was man prüfen kann das sollte man auch. Rechtschreibfehler kann man einfach nicht prüfen. Dafür könnten man z.B. den User die Emailadresse 2 mal eingeben lassen, zur Sicherheit.

Gruß
Gordon


Hinweis: Die Verwendung meiner Codeschnipsel erfolgt auf eigene Gefahr! Ich übernehme auch keine Garantie auf Funktionstüchtigkeit (jeder Server ist anders konfiguriert. Bei Problemen können Sie hier aber gern einen Kommentar schreiben und wir suchen eine Lösung. ;)

[PHP] IP-Adresse anzeigen / herausfinden

Hallo zusammen,

heute zeige ich euch wie man ganz einfach die IP-Adresse seines Besuchers rausfindet. Wozu soll das gut sein? Zum Beispiel wenn man dem Besucher diese anzeigen möchte. Aber viel mehr um sie zu speichern. Denn bei Missbrauch kann man damit den Besucher identifizieren… meistens jedenfalls. Gut, eigentlich tut dies schon der Webserver in seinen Logfiles… aber manchmal ist doppelt besser.

Also wie geht das nun… ganz einfach. Sie steht nämlich in einer Server-Variable:

<?php echo „Ihre aktuelle IP-Adresse ist: <b>“.$_SERVER[„REMOTE_ADDR“].“</b>“; ?>

Was heißt das jetzt? „echo“ gibt etwas aus… nämlich „Ihre aktuelle IP-Adresse ist:“ und „$_SERVER[„REMOTE_ADDR“]“ ist die Variable in der die IP des Besuchers gespeichert ist. Diese ist nicht 100% zuverlässig, also verlassen Sie sich bitte nicht darauf. Kommt ein Besucher über einen Proxy so wird hier die IP des Proxy-Servers gespeichert. Aber in der mehrheit ist es wirklich die richtige IP des Besuchers.

Gruß
Gordon


Hinweis: Die Verwendung meiner Codeschnipsel erfolgt auf eigene Gefahr! Ich übernehme auch keine Garantie auf Funktionstüchtigkeit (jeder Server ist anders konfiguriert. Bei Problemen können Sie hier aber gern einen Kommentar schreiben und wir suchen eine Lösung. ;)

[PHP] Einbinden von zusätzlichen Dateien in das Script (include)

Hallo,

heute möchte ich euch zeigen wie man externe / zusätzliche Dateien in ein Script einbindet.

Der große Vorteil von PHP (gegenüber z.B. HTML) ist, das man nicht alles in eine Datei quetschen muss. Besonders wenn das Script mal etwas größer und komplizierter wird, ist es von großem Vorteil bestimmte Elemente auszulagern. So behält man die Übersicht und nur so ist es möglich Objektorientiert zu arbeiten. Haben wir zum Bespiel eine Funktion die wir öfter brauchen so können wir diese in eine extra Datei schreiben und aus jedem beliebigen Script aus aufrufen.

Doch wie funktioniert das? Ganz einfach mit dem „include()“-Befehl. Es gibt dabei Grundlegend 2 verschiedene Befehle. „include()“ und „include_once()“. Mit dem ersten Befehl kann man eine bestimmte Datei so oft man möchte in einem Script einbinden. Der zweite lässt die Einbindung einer bestimmten Datei in einem Script nur ein einziges mal zu, sollte ein zweites mal versucht werden die Datei zu includen gibt es einen Fehler. Was ist nun wann gut?

Schreiben wir z.B. folgende PHP-Datei:
<?php
session_start();
?>

So darf diese nur ein einziges mal in einem Script eingebunden werden, da es sonst einen Fehler gibt. Um auszuschließen das die Datei ausversehen noch ein weiteres mal aufgerufen wird benutzen wir „include_once()“.

Haben wir aber ein Logo (Bild) in eine externe Datei ausgelagert dann kann es durchaus möglich sein das wir dieses Logo an mehreren Stellen in einem Script einbinden wollen und müssen. Dann kommt „include()“ zum einsatz.
Grundsatzlich ist meine Empfehlung immer include_once() zu benutzen, sofern die Datei nicht unbedingt mehrfach eingebunden werden muss. Damit ist man immer auf der sicheren Seite.

Oft sehe ich Scripte die Menüstrukturen mit „include“ realisieren und dabei einen entscheidenen Fehler machen. Daher möchte ich hier kurz darauf eingehen.
Menüstrukturen mit include zu realisieren ist im grunde eine super sache, ich selbst arbeite oft damit. Aber wie schon erwähnt, immer auf die Sicherheit achten!
Also wie funktioniert es? Hier erst einmal das Beispiel wie man es NICHT machen sollte:

<?php
include($_GET[„seite“]);
?>

Was passiert hier… die Seite wird z.B. mit http://www.testdomain.de/index.php?seite=start.php aufgerufen. Das Script liest den übergebenen Wert „seite“ aus und bindet diese Datei einfach in das Script ein. Das wars. Funktioniert prima werden jetzt einige sagen. Stimmt, tut es… aber was ist wenn ich jetzt folgendes Aufrufe: http://www.testdomain.de/index.php?seite=./.htaccess
Dann bekommt er, unter umständen, Informationen zu gesicht die Ihn nichts angehen. Und das wäre noch der harmloseste Fall. Hacker können damit richtig böse sachen machen!

Also gestallten wir unser Script sicherer:

<?php
if ($_GET[„seite“] == „start“) {
include_once(„start.php“);
} else {
include_once(„errorseite.php“);
}
?>

Was ist jetzt? Wir überprüfen erst einmal was in der übergebenen Variable „start“ steht. Steht dort „start“ drin, dann includen wir die Seite „start.php“… diese könnte aber auch „muster.html“ heißen… der Besucher unserer Seite hat darin keinen Einblick mehr und wir könnten sogar ein bisschen tricksen um unsere Dateien zu verschleiern… und ein bisschen rate ich sogar dazu. ;)
Ist der Übergebene wert aber nicht „start“ (also nicht von uns deklariert) dann geben wir einfach eine vordefinierte „errorseite.php“ aus. Es interessiert uns nicht mehr ob da nun Müll in der Variable steht. Und sollte jetzt noch mal einer http://www.testdomain.de/index.php?seite=http://www.google.de aufrufen, dann landet er auf unserer Errorseite und fertig.

Also bitte, zu Ihrer eigenen Sicherheit, niemals die erste Version verwenden. Sicher, sie ist einfacher zu Handhaben… aber nicht nur für Sie ;)

Das Thema „include()“ ist noch ein wenig umfangreicher. Aber das würde jetzt den Rahmen hier sprengen. Ich denke die Grundzüge sollten hier erklärt sein und vielleicht greife ich das Thema noch mal auf. Später.

Gruß
Gordon


Hinweis: Die Verwendung meiner Codeschnipsel erfolgt auf eigene Gefahr! Ich übernehme auch keine Garantie auf Funktionstüchtigkeit (jeder Server ist anders konfiguriert. Bei Problemen können Sie hier aber gern einen Kommentar schreiben und wir suchen eine Lösung. ;)