Programmieren mit php und mySQL (Dateien) - Guru 2.0
Programmieren mit php und mySQL (Dateien)

Programmieren mit php und mySQL (Dateien)

Die Lösung der Hausaufgabe wird Dich sicher brennend interessieren, denn dann siehst Du ob Du die Funktionen verstanden hast. Danach kommen wir zum letzten Teil des reinen php-Kurses, den Dateien. Der nächste Teil wird dann der Start des mySQL-Kurses sein.

Lösung zu Übung 6.1

[php collapse=”true”]<?php
/******************
* Ausgabe eines mehrdimensionalen Arrays
* Dateiname: uebung_6_1.php
* Funktion: Erweiterung von Uebung 4.6
* um eine Ausgabe-Funktion
* erstellt am: 7. Juni 2009, 10:53
* Copyright: Clemens Gull
*/
//mehrdimensionales Array erstellen
$photos = array(
"Rom" => array(
array(
"name" => "Petersdom",
"datum" => "20.04.09",
"zeit" => "10:12",
"datei" => "rom_01.jpg"
),
array(
"name" => "Park",
"datum" => "20.04.09",
"zeit" => "13:40",
"datei" => "rom_01.jpg"
),
array(
"name" => "M&ouml;nch",
"datum" => "21.04.09",
"zeit" => "9:23",
"datei" => "rom_03.jpg"
)
),
"Paris" => array(
array(
"name" => "Louvre",
"datum" => "18.10.09",
"zeit" => "18:03",
"datei" => "paris_02.jpg"
),
array(
"name" => "Photographie",
"datum" => "18.10.09",
"zeit" => "9:17",
"datei" => "paris_01.jpg"
),
array(
"name" => "Unendlichkeit",
"datum" => "20.10.09",
"zeit" => "12:12",
"datei" => "paris_03.jpg"
),
array(
"name" => "Arc de triomphe",
"datum" => "19.10.09",
"zeit" => "14:39",
"datei" => "paris_04.jpg"
)
)
);

//Ausgabe des Arrays
printArray($photos);
//Array erweitern
foreach($photos as $key1 => $array) {
foreach($array as $key2 => $array) {
$photos[$key1][$key2][‘bewertung’] = -1;
}
}
//horizontale Linie ausgeben
echo "<hr />";
//Ausgabe des geaenderten Arrays
printArray($photos);

//Array ausgeben
//@param $photos string 3D-Array mit den Photodaten
function printArray($photos) {
foreach($photos as $key => $array) {
//erste Ebene (Ort) ausgeben
echo "<ul><li>".$key."</li><ul>";
foreach($array as $key => $array) {
//Index des Photos ausgeben
echo "<li>Index: ".$key."</li><ul>";
foreach($array as $key => $value) {
//Einzelne Elemente des Photos ausgeben
echo "<li><em>".$key."</em>: ".$value."</li>";
}
echo "</ul>";
}
echo "</ul></ul>";
}
}
?>[/php]

Nun kommen wir zu den Dateien. Hier gibt es zwei Teile, welche uns besonders interessieren: Einerseits müssen wir Dateien in der Applikation selber verwenden können, andererseits müssen wir auch Daten aus Dateien lesen oder in sie schreiben können. Ich werde diesmal nur die erste Variante erklären. Denn unser Kurs zielt ja auf die Verwendung einer Datenbank ab. Daher denke ich, dass wir Dateioperationen im Moment einfach nicht brauchen. Falls wir darauf stossen, werde ich sie natürlich erklären. Also mach Dir keine Hoffnung, dass Du von den php-Befehlen erlöst wirst. Auch im mySQL-Teil werden wir immer wieder neue Dinge rund um php kennenlernen.

Dateien einbinden

Bei den Funktionen hast Du ja schon erfahren, dass redundanter SourceCode nichts gutes ist. Innerhalb eines Programmes stellen wir diesen Code in einzelnen Funktionen dar, um ihn wiederverwenden zu können. Wie sieht das jetzt aus, wenn wir diesen Code in mehreren Applikationen oder php-Dateien verwenden wollen. Mit Deinem Wissensstand würdest Du die Funktion jetzt in jede Datei hineinkopieren und schon hast Du wieder redundanten Code wenn Du alle Dateien anschaust. Unser Ziel ist als Programmierer folgendes:

Wir wollen eine Applikation,

  • welche normalerweise aus mehreren php-Dateien besteht.
  • welche keinen redundanten Code enthält
  • deren Code wir in anderen Projekten wiederverwenden können
  • welche leicht wartbar ist
  • welche performant ist
  • welche die Belastund des webServers gering hält.

Mit der neuen Möglichkeit SourceCode in verschiedene Dateien auszulagen und dann wiederzuverwenden kommen wir unserem Ziel wieder einen Schritt näher.

Dateien inkludieren

Mit dem folgenden Befehl kannst Du Dateien in eine php-Datei einfügen, als ob der Code immer dort gestanden wäre.

include

Syntax

include (Dateiname)

Parameter

  • Dateiname
    Ein String welcher einen Verweis auf eine lokale (oder entfernte) Datei enthält.

Beispiel

[php light=”true”]include ("vars.php");[/php]

In diesem Beispiel wird die Datei vars.php in die aktuelle php-Datei eingebunden. Da kein Verzeichnis angegeben wurde, muss sich vars.php im selben Verzeichnis befinden.

Machen wir dazu gleich eine Übung.

Übung 7.1

Nimm dazu die Lösung von der aktuellen Hausübung und speichere sie unter dem Namen uebung_7_1.php ab. Nun lagerst Du die Definition des Photo-Arrays in eine Datei arrPhotos.php aus. Falls Du eine Menge an Fehlermeldungen erhälst, denke zuerst nach, wie eine php-Datei aufgebaut sein muss.

Der Code zur Datei uebung_7_1.php:

[php collapse=”true” highlight=”19″]<?php
/******************
* Arbeiten mit include
* Dateiname: uebung_7_1.php
* Funktion: Array-Definition einbinden
* erstellt am: 7. Juni 2009, 11:17
* Copyright: Clemens Gull
*
* @uses: arrPhotos.php
*/

//******
* Arraydefinition einbinden
* 3D-Array mit
* Ort (assoziativ)
* Photos (numerisch)
* Detaildaten (assoziativ)
*****/
include ("arrPhotos.php");

//Array ausgeben
printArray($photos);
//Array erweitern
foreach($photos as $key1 => $array) {
foreach($array as $key2 => $array) {
$photos[$key1][$key2][‘bewertung’] = -1;
}
}
//horizontale Linie ausgeben
echo "<hr />";
//Array ausgeben
printArray($photos);

/***************
* Array als unsortierte Liste ausgeben
* Name: printArray()
*
* @param $photos string 3D-Array mit den Photodaten
*/
function printArray($photos) {
foreach($photos as $key => $array) {
//erste Ebene (Ort) ausgeben
echo "<ul><li>".$key."</li><ul>";
foreach($array as $key => $array) {
//Index des Photos ausgeben
echo "<li>Index: ".$key."</li><ul>";
foreach($array as $key => $value) {
//Einzelne Elemente des Photos ausgeben
echo "<li><em>".$key."</em>: ".$value."</li>";
}
echo "</ul>";
}
echo "</ul></ul>";
}
}
?>[/php]

Du siehst wie kurz der Code geworden ist, er ist jetzt viel leichter lesbar geworden. Denn die Definition des Arrays ist hier eigentlich nicht relevant und verwirrt nur. Du siehst aber auch, dass ein gut dokumentierter Code immer wichtiger wird, denn sonst hast Du bald keine Ahnung mehr, welche Datei für was zu ständig ist.
Der Code zur Datei arrPhotos.php:

[php collapse=”true”]
<?php
/******************
* Arbeiten mit include
* Dateiname: arrPhotos.php
* Funktion: Array definieren
* erstellt am: 7. Juni 2009, 11:18
* Copyright: Clemens Gull
* verwendet: – uebung_7_1.php
*/
$photos = array(
"Rom" => array(
array(
"name" => "Petersdom",
"datum" => "20.04.09",
"zeit" => "10:12",
"datei" => "rom_01.jpg"
),
array(
"name" => "Park",
"datum" => "20.04.09",
"zeit" => "13:40",
"datei" => "rom_01.jpg"
),
array(
"name" => "M&ouml;nch",
"datum" => "21.04.09",
"zeit" => "9:23",
"datei" => "rom_03.jpg"
)
),
"Paris" => array(
array(
"name" => "Louvre",
"datum" => "18.10.09",
"zeit" => "18:03",
"datei" => "paris_02.jpg"
),
array(
"name" => "Photographie",
"datum" => "18.10.09",
"zeit" => "9:17",
"datei" => "paris_01.jpg"
),
array(
"name" => "Unendlichkeit",
"datum" => "20.10.09",
"zeit" => "12:12",
"datei" => "paris_03.jpg"
),
array(
"name" => "Arc de triomphe",
"datum" => "19.10.09",
"zeit" => "14:39",
"datei" => "paris_04.jpg"
)
)
);
?>[/php]

Ein sehr oft vorkommender Fehler ist das Fehlen der <?php und ?>-Tags. Vergiss also nie, wie eine php-Datei definiert wird, sonst klappt das mit include() nicht.

Ein Tipp zur Sicherheit

Viele Programmierer speichern diese include-Dateien in ein eigenes Verzeichnis. Dies ist auch sinnvoll, da man so ein wenig Struktur in die Applikation bekommt. Anfänger machen es aber oft “ganz gut” und ändern die Erweiterung dieser Dateien von .php auf .inc und das ist ein wirklich schlimmer Fehler. Denn mit dieser Erweiterung wird die Datei nicht mehr vom php-Interpreter angenommen, sondern direkt ausgeliefert. Probier mal aus die Datei arrPhotos.php direkt im Browser auf zu rufen. Danach änderst Du die Erweiterung auf .inc und rufst diese Datei im Browser auf. Schau Dir das Resultat an und stell Dir jetzt vor, dass in dieser Datei ein Benutzername oder ein Passwort steht. Viel leichter kannst Du es einem Hacker nicht mehr machen. Bevor Du die Datei wieder umbenennst, probier auch die uebung_7_1.php im Browser aus, Du siehst es funktioniert alles wie vorher.

Es gibt noch einen weiteren Befehl um Dateien zu inkludieren. Bei umfangreichen Applikationen kann es Dir passieren, dass Du eine include-Datei mehrfach einbinden musst. Stell Dir vor, Du hast mehrere Dateien, welche eine Ausgabefunktion benötigen. Diese Funktion hast Du schlauerweise in eine externe include-Datei ausgelagert. Dadurch ergibt sich folgendes Bild

  • datei1.php
    • inkludiert ausgabe.php
  • datei2.php
    • inkludiert ausgabe.php

Das ist auch kein Problem, solange die beiden Dateien extra aufgerufen werden. Jetzt machst Du aber folgendes:

  • master.php
    • inkludiert datei1.php
      • inkludiert ausgabe.php
    • inkludiert datei2.php
      • inkludiert ausgabe.php

Und jetzt ist die Katastrophe perfekt. Die Funktion, welche Du in ausgabe.php definiert hast, ist in der Datei master.php zweimal definiert worden. Und genau das mag php gar nicht und wird mit einer Fehlermeldung quittiert werden. Um dieses Problem zu lösen gibt es den Befehl include_once(). Er funktioniert gleich wie include(), hat aber einen Unterschied. Er prüft ob die einzubindende Datei bereits inkludiert wurde, ist dies der Fall wird sie kein zweitesmal eingebunden. Dadurch bist Du sicher, dass nichts doppelt definiert wird oder auch überschrieben wird.

Zusätzlich kannst Du auch die Befehle require() und/oder require_once() verwenden. Sie funktionieren gleich wie die eben vorgestellten Befehle, haben aber auch einen Unterschied. Sonst würde sie es ja nicht geben. Tritt ein Fehler beim Einbinden mit include auf, so generiert php nur eine Warnung und das Programm wird fortgesetzt. Im Gegensatz generiert php beim Einbinden mit require einen Fehler und beendet das Programm. Dies ist besonders wichtig, wenn es um Funktionen oder grundlegende Teile des Programms geht.

Übung 7.2

Zum Abschluss dieses Kapitel noch eine Übung. Verwende dazu die Dateien aus der Übung 7.1 und lagere die Ausgabefunktion in eine Datei arrAusgabe.php aus und binde sie dann mit require ein.

Der Code zur Datei uebung_7_2.php:

[php collapse=”true” highlight=”22″]<?php
/******************
* Arbeiten mit include
* Dateiname: uebung_7_2.php
* Funktion: Array-Definition einbinden
* erstellt am: 7. Juni 2009, 11:31
* Copyright: Clemens Gull
*
* @uses: arrPhotos.php
* @uses: arrAusgabe.php
*/

/******
* Arraydefinition einbinden
* 3D-Array mit
* Ort (assoziativ)
* Photos (numerisch)
* Detaildaten (assoziativ)
*****/
include ("arrPhotos.php");
//Ausgabefunktion einbinden
require_once("arrAusgabe.php");

//Array ausgeben
printArray($photos);
//Array erweitern
foreach($photos as $key1 => $array) {
foreach($array as $key2 => $array) {
$photos[$key1][$key2][‘bewertung’] = -1;
}
}
//horizontale Linie ausgeben
echo "<hr />";
//Array ausgeben
printArray($photos);

?>[/php]

Der Code zur Datei arrAusgabe.php:

[php collapse=”true”]<?php
/******************
* Arbeiten mit require
* Dateiname: arrAusgabe.php
* Funktion: AFunktion zur Ausgabe eines Arrays
* erstellt am: 7. Juni 2009, 11:32
* Copyright: Clemens Gull
*
* verwendet in: uebung_7_2.php
*/

/***************
* Array als unsortierte Liste ausgeben
* Name: printArray()
*
* @param $photos string 3D-Array mit den Photodaten
*/
function printArray($photos) {
foreach($photos as $key => $array) {
//erste Ebene (Ort) ausgeben
echo "<ul><li>".$key."</li><ul>";
foreach($array as $key => $array) {
//Index des Photos ausgeben
echo "<li>Index: ".$key."</li><ul>";
foreach($array as $key => $value) {
//Einzelne Elemente des Photos ausgeben
echo "<li><em>".$key."</em>: ".$value."</li>";
}
echo "</ul>";
}
echo "</ul></ul>";
}
}
?>[/php]

In eigener Sache

Ich wünsche Dir wieder viel Erfolg bei den Übungen und auch bei der Hausübung. Ich bin gespannt wie viele mitmachen und auf die Lösung kommen. Ich werde es aber nur erfahren, wenn Du einen Kommentar eingibst. Also schreib ruhig, dass Du die Übungen machst und auch wie es Dir dabei geht. Der Kurs kann für Dich ein riesiger Erfolg werden, wenn Du mir eine Rückmeldung gibst. Denn dann kann ich die weiteren Artikel Deinen Wünschen anpassen.
Trotz meiner Vermutung, dass ich es heute nicht schaffe, gibt es trotzdem die Fortsetzung des Kurses. Php ist jetzt soweit fertig und Du darfst mit Ungeduld auf den mySQL warten.

Information

Diese Artikelserie ist mit dem Tag phpMySQL@Kurs versehen. Damit kannst Du schnell alle Teile des Kurses finden: https://www.guru-20.info/tag/phpMySQL@Kurs

Startseite bzw. Inhaltsverzeichnis des Kurses

Es wurde ein Kommentar zu diesem Beitrag geschrieben.

  • RedHacker

    Danke
    Selten hab ich so ein gut verständliches Artikel wie deines gelesen.
    Hat,s schon beiträge über mySQL gegeben oder kommt,s noch?
    Wie zbs alte Databank an neu anpassen usw.

    Ciao

Blogheim.at Logo
Diese Website verwendet Cookies - nähere Informationen dazu finden Sie in unserer „Datenschutzerklärung“. Klicken Sie auf „Ich stimme zu“, um Cookies zu akzeptieren und unsere Webseite zu besuchen, oder klicken Sie auf „Cookie-Einstellungen“, um Ihre Cookies selbst zu verwalten.