phpundmysql.de

Errata der 2. Auflage

Das Problem mit den Namensräumen
Als wir die Skripte für das Buch programmierten und Teile des Buches schrieben, die sich mit Namensräumen (Namespaces) befassen, wurden Namensräume mittels doppeltem Doppelpunkt in der folgenden Form beschrieben (Version: PHP 5.3 dev):

namespace System::Test::Namensraum;

Leider ist in der aktuellsten Version von PHP 5.3 genau dieser Teil geändert worden, was dazu führt, dass kein Skript der Buch-CD (1. Druck der 2. Auflage) ordentlich ausgeführt wird. Nun werden Namensräume mittels Backslash angegeben:

namespace System\Test\Namensraum;

Sie können daher die aktualisierten Skripte herunterladen und über die alten Skripte kopieren: htdocs_working.zip

Wir entschuldigen uns für diesen Fehler, dies war aber bei einer in der Entwicklung befindlichen Version 5.3 von PHP nicht leicht abzusehen.

Kapitel 4.2: Variablen

Mehrwertsteuer (S. 78)

Auf Seite 78 wird ein Beispiel mit 19% Mwst. angeführt, im nachfolgenden Text sowie im Code-Beispiel wird jedoch noch der Faktor 1,17 verwendet. Korrekt wäre natürlich:

Im Text: 17,73 * 1,19 =  21,0987;

Im Code-Beispiel: $steuerfaktor = 1.19;

Kapitel 6.2: MySQL und SQL

Auto_increment für Tabellen (S. 199)

Auf Seite 199 werden zwei Tabellen vorgestellt, die beim Ausführen der INSERT-Statements auf den folgenden Seiten Probleme bereiten können. Man sollte hier einen automatisch inkrementierenden Primär-Schlüssel angeben. Dies wird durch das Angeben von AUTO_INCREMENT erreicht.

Damit sehen die SQL-Befehle folgendermaßen aus:

   CREATE TABLE kontakte(
   kid INT PRIMARY KEY AUTO_INCREMENT,
   name VARCHAR(200),
   ortRef INT,
   telefonnummer VARCHAR(100));

und

   CREATE TABLE staedte(
   sid INT PRIMARY KEY AUTO_INCREMENT,
   postleitzahl VARCHAR(10),
   name VARCHAR(200));
FLOOR-Befehl (S. 219):

Auf Seite 219 ist das Ergebnis des Befehls:

SELECT FLOOR(-199.9)

natürlich -200 (nicht 200).

Kapitel 14.3: Datenbankverbindungen

Auf Seite 564 im Skript class.MySQL.php wird der Konstruktor der mysqli-Klasse folgendermaßen aufgerufen:

$this->MySQLiObj = new mysqli($server.“:“.$port, $user, $password, $db);

Die Angabe des Ports der MySQL-Datenbank verursacht einen Fehler bei der Verbindung mit der Datenbank (in der 5.3 dev-Version noch nicht!). Die korrekte Version lautet so:

$this->MySQLiObj = new \mysqli($server, $user, $password, $db, $port);

Diese Änderung an der entsprechenden Klasse class.MySQL.php im Ordner inc/classes ist im working_htdocs-zip mittlerweile enthalten.

Kapitel 14.4: Sicherheitsklasse

Auf Seite 582 wird behauptet, dass die Befehle htmlspecialchars und htmlentities gegensätzliches bewirken. Dieses ist nicht der Fall!

Beide Befehle maskieren bspw. Sonderzeichen wie & in &. htmlentities ist lediglich weitreichender und wandelt alle Sonderzeichen um, während htmlspecialchars nur einige Zeichen umwandelt.

Quelle: http://us2.php.net/manual/en/function.htmlentities.php

Kapitel 14.5: Logging

Bei einem Aufruf der Funktion Log löschen oder Session löschen aus der Debug-Konsole (class.DebugConsole.php, S. 584 ff.) tritt in beiden Fällen ein Warnung auf, die besagt, dass der Header bereits ausgegeben wurde. Dies liegt daran, dass die Konsole erst in der Funktion printBody() der HTML-Klasse ausgegeben wird. Zu diesem Zeitpunkt ist aber der HTML-Header bereits ausgegeben.

Um dies zu verhindern, sollte der Parameter $withConsole von der Funktion printBody() in die Funktion printHead() verschoben werden.

Der Aufruf:

if($withConsole AND DEBUG)DebugConsole::displayConsole();

sollte ebenfalls an den Anfang der printHead()-Funktion verschoben werden. Dann tritt der Fehler nicht mehr auf, da alle Ausgaben an den Browser nach diesem Aufruf (der die header()-Funktion von PHP verwendet, die durch den Parameter „location“ einen Browserreload initiiert) geschehen.

Als Konsequenz muss man aber alle PHP-Dateien ändern, die die Funktion printBody() und printHead() verwenden.

Kapitel 14.5: Logging realisieren

Auf Seite 632 des Buches wird beschrieben, wie man das Logging für ein Skript „einschalten“ kann. Hierbei wurde die falsche Datei eingebunden und instantiiert.

Hier müsste statt:

require_once PROJECT_DOCUMENT_ROOT."/scripts/Log/classes/class.Logging.php";
$LOG = new Logging();

folgendes stehen:

require_once PROJECT_DOCUMENT_ROOT."/scripts/Log/classes/class.Log.php";
$LOG = new Log();

stehen.

Kapitel 17.3: Web API .htaccess-Datei

Bei der Erstellung der Buch-CD ist leider die .htaccess-Datei für die WebAPI verloren gegangen. Sie können diese hier herunterladen: .htaccess für WebAPI.

Sie müssen diese Datei in den Ordner scripts/WebAPI/API kopieren und in .htaccess umbenennen !