3Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
29080
29080
EMPFEHLEN
-
17.07.03 10:43 #1
- Registriert seit
- Apr 2001
- Ort
- Hamburg
- Beiträge
- 1.309
Diese FAQ soll eine Sammlung der am häufigst auftretenden PHP Probleme werden.
Ich habe mir Apache / PHP /MySQL auf einem XYZ Betriebssystem installiert und ich bekomme keine bzw nur HTML Seiten angezeigt- Die Seite der Apachefriends.org beschäftigt sich mit der Installation des Apache Webservers unter Linux / Windows.
Die FAQ der Apachefriends findet sich hier
Meine Zeilenumbrüche aus einer Textarea werden nicht übernommen, was tun?- Es gibt in PHP die Funktion nl2br(), welche die durch Enter hinzugefügten Umbrüche in einer Textarea in XHTML komforme <br /> Tags umwandelt.
Ich kann nach Abschicken des Formulars nicht auf meine Variablen zugreifen, was tun?- Seit PHP 4.2 ist standardmäßig Register_Globals deaktiviert, wodurch man nur noch über die superglobalen Arrays $_POST bzw. $_GET auf die übergebenen Werte zugreifen kann. http://de3.php.net/manual/de/languag...les.predefined
Ich habe Probleme damit, Dateien über eine Formular auf meinen Webserver hochzuladen, was tun?- Drei Tutorial dazu findet ihr unter:
http://www.tutorials.de/content/506-...-formular.html
http://www.tutorials.de/content/1065...ei-upload.html
http://www.tutorials.de/content/842-...ax-upload.html
Wie kann ich Inhalte per PHP dynamisch in meine Seite einfügen?- Soetwas wird über Templates geregelt, dazu haben wir 3 Tutorials.
http://www.tutorials.de/content/514-php-templates.html
http://www.tutorials.de/content/510-...te-parser.html
http://www.tutorials.de/content/537-...ign-skins.html
Ich bekomme die Fehlermeldung "cannot add header information", was mache ich falsch?- Diese Fehlermeldung wird ausgegeben, wenn versucht wird, ein Cookie zu setzen, eine Session zu starten oder per Header auf eine andere Seite weiterzuleiten, zuvor allerdings schon HTML Code an den Browser geschickt wurde. Entweder ihr stellt nun euren Code dementsprechend um oder ihr benutzt die Funktion ob_start() in Verbindung mit ob_end_flush().
Wie kann ich die Ausgabe einer Datenbankabfrage auf mehrere Seiten verteilen?- Dazu haben wir gleich zwei Tutorials in der zugehörigen Sektion.
http://www.tutorials.de/content/507-seitenfunktion.html
http://www.tutorials.de/content/547-...verteilen.html
Warum kann ich xyz mit meinem in der MySQL Datenbank gespeicherten Datum nicht machen?- Um eine einfachere Handhabung von gespeicherten Daten zu ermöglichen, empfiehlt es sich, das entsprechende Datum nicht im MySQL Spalten-Typ date zu speichern, sondern in eine normale Spalte vom Typ Integer den aktuellen Unix-Timestamp, welchen man über time() ausgeben kann.
- Durch verwenden des UNIX-Timestamps vereinfacht sich die Bildung von Differenzen zwischen zwei Daten, sowie die individuelle Ausgabe eines Datums bis auf die Sekunde genau via date().
Weitere Themen sind hier herzlich willkommen.
Suchfunktion: php faq tutorial hilfeGeändert von sheel (19.09.11 um 05:05 Uhr) Grund: Links aktualisiert
-
In diesem Thema werde ich zukünftig die hier am häufigsten genannten und auftretenden Fehler nennen sowie Ursachen und Lösungen dazu erläutern.
Warning: Cannot modify header information - headers already sent by (output started at 〈Dateipfad A〉:〈Zeile A〉) in 〈Dateipfad B〉 on line 〈Zeile B〉
Bedeutung Die Datenausgabe begann in 〈Dateipfad A〉:〈Zeile A〉. Deshalb kann in 〈Dateipfad B〉:〈Zeile B〉 der Header nicht mehr verändert werden.
Ursache Der Header ist Teil einer HTTP-Nachricht und enthält Informationen über über den Körper der Nachricht (der eigentlich Nutzlast) und wird vor diesem gesendet. Sobald eine Ausgabe stattfand – sowohl explizit also auch implizit – wird der Header an den Client gesendet und eine Änderung ist nicht mehr möglich.
Betroffen sind davon alle Funktionen, die den HTTP-Header direkt oder indirekt verändern. So beispielsweise die header()-, setcookie()- und session_start()-Funktion.
Verwandte Fehlermeldungen:- Warning: session_start(): Cannot send session cookie - headers already sent …
- Warning: session_start(): Cannot send session cache limiter - headers already sent …
- Warning: session_regenerate_id(): Cannot regenerate session id - headers already sent …
Lösung Es muss dafür gesorgt werden, dass vorzeitig keine Ausgabe geschieht. Dies ist zwar mit dem EVA-Prinzip (Eingabe-Verarbeitung-Ausgabe) möglich, aber oft auch nicht durchgehend anwendbar. Deshalb ist es sinnvoller und zuverlässiger die Ausgaben mithilfe der Funktionen zur Ausgabesteuerung zu puffern.
Warning: 〈Funktion〉: supplied argument is not a valid MySQL result resource in 〈Dateipfad〉 on line 〈Zeile〉
Bedeutung Um Datensätze einer Datenbankabfrage verarbeiten zu können, muss diese in der Form einer Ergebnisressource angegeben werden.
Ursache Die Ergebnisressource ist meist der Rückgabewert der mysql_query()-Funktion. Diese gibt jedoch bei einem Fehlschlag der Datenbankabfrage (Syntaxfehler, fehlende Verbindung mit einem Datenbankserver, Tabellen oder Spalten nicht vorhanden, etc.) den Wert false zurück. Auch bei Abfragen, die keine Datensätze sondern nur den Erfolgsstatus zurückliefern (insb. INSERT-, UPDATE-, DELETE-Abfragen), ist der Rückgabewert keine Ergebnisressource.
Lösung Die grundsätzliche Regel lautet, dass Funktionen wie die mysql_fetch_*()-Funktionen zum Abholen eines Datensatzes nur bei Datenbankabfragen mit einer MySQL-Ergebnisressource als Rückgabewert erlaubt sind. Dies kann mit der is_resource()- und get_resource_type()-Funktion sichergestellt werden. Zusätzlich sollte geprüft werden, ob es bei der Datenbankabfrage nicht zu einem Fehler kam (siehe mysql_error()- und mysql_errno()-Funktion). Erst wenn beide Bedingungen (richtiger Datentyp, kein MySQL-Fehler) erfüllt sind, kann der Wert bedenkenlos verarbeitet werden.
Markus Wulftange
-
Sehr häufig scheinen Probleme mit den verwendeten Zeichensätzen aufzutreten.
Hier mal eine kleine Checkliste dazu:- Was habe ich überhaupt für einen Zeichensatz?
Der verwendete Zeichensatz ist üblicherweise(sofern ihr die auszugebenden Daten nicht selbst vor der Ausgabe mit einem anderen Zeichensatz kodiert) derjenige, in dem ihr die Dateien(PHP-Skripte,HTML-Dokumente etc. ) abspeichert.
Ihr könnt das idR. in dem von euch verwendeten Editor einsehen und einstellen, welcher Zeichensatz dies ist/sein soll.
Achtet darauf, daß ihr bei der Wahl von UTF8 ohne die sogenannte ByteOrderMark(BOM) speichert.
- Was denkt der Browser, was ich für einen Zeichensatz ich verwende?
Der Browser denkt garnicht, er macht, was ihm gesagt wird.
Folgende Quellen können ihm das sagen:- Der Besitzer des Browsers kann einstellen, welcher Zeichensatz verwendet wird, wenn keine Informationen von anderer Seite verfügbar sind.
- Das Dokument selbst kann es dem Browser sagen, über eine META-Angabe zum Inhaltstyp des Dokumentes, ein Beispiel für Latin1:Code :
1
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
- Der Webserver kann es dem Browser sagen.
Beispiel für die Apache-Konfiguration mit UTF8 als Standardzeichensatz:Code :1
AddDefaultCharset utf-8
- PHP kann es dem Browser sagen.
Beispiel für die PHP-Konfiguration mit UTF8 als Standardzeichensatz:
Code :1
default_charset = "utf-8"
- Ein PHP-Skript kann es dem Browser sagen:
Code :1
<?php header('Content-Type: text/html; charset=utf-8'); ?>
Beachtet, dass die serverseitigen Angaben(3,4,5) zum Zeichensatz Vorrang haben vor der im META-Tag(2) notierten.
- Der Besitzer des Browsers kann einstellen, welcher Zeichensatz verwendet wird, wenn keine Informationen von anderer Seite verfügbar sind.
- Soweit, so gut. Die Dateien sind korrekt gespeichert, der Browser bekommt die korrekte Information, trotzdem sehe ich da komische Zeichen

Viele PHP-Funktionen arbeiten derzeit noch mit Latin1 als Standardzeichensatz.
Enthalten Strings, die mit solchen Funktionen bearbeitet werden, Nicht-ASCII-Zeichen, und ist der Zeichensatz des verarbeiteten Strings nicht Latin1, kann dies zu Fehlern führen.
Kleines Beispiel eines UTF-8-kodierten Skriptes:
Das Ergebnis ist nicht zufriedenstellend:Code :1 2 3 4
<?php header('Content-Type: text/html; charset=utf-8'); echo strtolower('Knödelsüppchenvielfraß'); ?>
Lösung: Multbyte-String-Funktionen:kn�dels�ppchenvielfra
Das Ergebnis wie gewünscht:Code :1 2 3 4
<?php header('Content-Type: text/html; charset=utf-8'); echo [B]mb[/B]_strtolower('Knödelsüppchenvielfraß'); ?>
knodelsüppchenvielfraß - Ok, das funktioniert jetzt, aber ihr kommuniziert mit Datenbanken, schreibt dort hinein und lest dort Daten aus.
Für Daten in einer DB wird natürlich ein bestimmter Zeichensatz verwendet
Welcher das ist, das könnt ihr beim Erstellen der Datenbanken/Tabellen festlegen. Tut ihr das nicht, wird der Standard des Datenbankservers verwendet.
- Super, auch das ist erledigt, aber es herrscht immer noch Chaos?
Die Daten sind zwar im gewünschten Zeichensatz in der Datenbank gespeichert, das bedeutet jedoch nicht, dass sie in diesem Zeichensatz dort ankommen oder von dort abgeschickt werden.
Verantwortlich dafür (MySQL als Beispiel genommen) sind diese 3 Konfigurationseinstellungen des DB-Servers:- character_set_client
Diese Einstellung gibt an, mit welchem Zeichensatz die Daten kodiert sind, die der DB-Server gesendet bekommt. Das sollte natürlich derjenige sein, den euer PHP-Skript verwendet.
- character_set_connection
Diese Einstellung gibt an, in welchen Zeichensatz die Anweisungen(inklusive Daten) kodiert werden sollen, bevor der Server die Anweisung ausführt.
Das sollte derjenige sein, in dem die Daten in der DB abgespeichert werden sollen oder gespeichert sind.
- character_set_results
Das ist der Zeichensatz, in dem der DB-Server die Daten an euer PHP-Skript zurücksenden soll. idR. also derselbe wie bei character_set_client
Brauchen sie aber auch nicht.
Nach dem Herstellen der Datenbankverbindung könnt ihr die 3 genannten Einstellungen über ein einziges Query vornehmen:
...setzt den Zeichensatz für alle 3 Einstellungen bspw. auf UTF-8Code sql:1
SET NAMES utf8
Diese Einstellung bleibt erhalten für alle Anweisungen, welche die aktuelle DB-Verbindung nutzen.
Sie kann auch wieder geändert werden, dazu einfach nochmals das Query absetzen mit einem anderen Zeichensatz.
Beachtet die Schreibweise des Zeichensatzes, sie ist nicht identisch mit der in PHP verwendeten.
Ein...würde nicht die gewünschte Wirkung erzielen.Code sql:1
SET NAMES UTF-8
Die Liste der von MySQL unterstützen Datensätze (inkl. der zu verwendenden Schreibweise im Statement) findet ihr hier: http://dev.mysql.com/doc/refman/5.0/...-charsets.html
- character_set_client
- Was habe ich überhaupt für einen Zeichensatz?
-
21.06.11 18:30 #4
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.127
Standard-Frage: Ich habe ein Script, das nicht funktioniert.
Anwort:
Möglicherweise ist die Fehler-Anzeige bei dir deaktiviert, bitte schalte doch folgende Einstellungen ein. Dafür gibt es zwei Möglichkeiten.
1. Über Code:
Code php:1 2
ini_set('display_errors', 1); error_reporting(E_ALL|E_STRICT);
2. Über die php.ini
Wenn man den Pfad zur Datei kennt, kann man es auch dauerhaft so einstellen, das Fehler im Browser angezeigt werden. Dafür sucht man in der php.ini die Einstellung für
- display_errors: Muss auf On stehen
- error_reporting: Sollte auf E_ALL | E_STRICT stehen
Häufig kann man sich selbst dadurch schon einige Fragen beantworten.Geändert von saftmeister (21.06.11 um 18:34 Uhr)
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
Ähnliche Themen
-
Zufällig auftretende I/O-Locks
Von Bratkartoffel im Forum HardwareAntworten: 0Letzter Beitrag: 12.01.10, 19:39 -
Quellcode lesen, auftretende Fragen
Von Steusi im Forum PHPAntworten: 3Letzter Beitrag: 17.04.09, 14:49 -
Texturenfehler ? Texture erscheint zu häufig
Von Karlitos im Forum Autodesk Maya (ehemals Alias)Antworten: 3Letzter Beitrag: 20.06.07, 01:30 -
Häufig gestellte Fragen (FAQ)
Von Helmut Klein im Forum InternetkommunikationAntworten: 0Letzter Beitrag: 26.05.04, 16:18 -
Replace nur $x häufig machen
Von Gaius im Forum PHPAntworten: 9Letzter Beitrag: 18.04.04, 16:43





Zitieren

Login






[PHP] [Codeschnipsel] ImageColor aus HTML-Farbcodierung erstellen