Probleme bei if-Anweisung

Alles, was PHP betrifft, kann hier besprochen werden.

Re: Probleme bei if-Anweisung

Postby Nobbie » 28. May 2010 13:33

Altrea wrote:Natürlich muss man wissen, dass es solche Funktionen gibt!


Man muss nicht nur wissen, dass es sie gibt - man sollte sie auch eigentlich nicht nativ einsetzen (klingt jetzt widersprüchlich, aber aus Portabilitätssicht muss man das so sehen).

Setzt man (richtigerweise) in php.ini den Wert von

Code: Select all
mbstring.func_overload = 2


und gleichzeitig auch das Encoding auf UTF-8

Code: Select all
mbstring.internal_encoding    = UTF-8


so läuft das gleiche Beispielprogramm in der gleichen Umgebung so, wie man es vermuten würde und gibt als strlen() den Wert 5 aus.

Aber das wird ein Anfänger nicht unbedingt verstehen, was er da nun alles eingestellt hat (halte ich aber, wenn überhaupt, so herum für den richtigen Weg, weil es das Coding portabel hält).
Nobbie
 
Posts: 6627
Joined: 09. March 2008 13:04

Re: Probleme bei if-Anweisung

Postby Poison of the Cursed » 30. May 2010 15:44

Hallo Altrea, hallo Nobbie,

vielen Dank für eure Rückmeldungen.
Also, dass mit den Zeichensätzen scheint wirklich eine Wissenschaft für sich zu sein.

Ich habe jetzt hin und her überlegt, wie ich meine Dateien einstellen soll. Außerdem ist jetzt schon wieder ein Fehler aufgekommen.

Ich hatte mit den Rat von Altrea zu Herzen genommen und mal einige Dateien auf UTF-8 umgestellt, also mit UTF-8 gespeichert, charset auf UTF-8 gesetzt, meta-Tags korrigiert und die Datenbank ebenfalls auf UTF-8 gesetzt. Da es hier ziemlich viele Varianten zur Auswahl gibt, habe ich utf8_general_ci genommen.
Soweit alles bestens, bis ich eine meiner Rätselfragen aus der Datenbank ausgelesen habe.

Das steht in SQL:
Welche Zutat, gibt Neville in der ersten Unterrichtsstunde für Zaubertränke zu früh in seinen Kessel und bringt diesen damit zum Schmelzen?


und das kommt in meiner Datei an:

Welche Zutat, gibt Neville in der ersten Unterrichtsstunde f�r Zaubertr�nke zu fr�h in seinen Kessel und bringt diesen damit zum Schmelzen?


Wo liegt der Fehler?
Habe in SQL schon verschiedene andere UTF-8 Einstellungen getestet. Fehler besteht weiterhin.

Bin ich denn jetzt vollkommen blöd?

Liebe Grüße
Poison
Poison of the Cursed
 
Posts: 31
Joined: 27. April 2010 17:56

Re: Probleme bei if-Anweisung

Postby Nobbie » 30. May 2010 19:17

Poison of the Cursed wrote:Bin ich denn jetzt vollkommen blöd?


Da könnte man nun boshaft "ja" antworten, aber das wäre sicherlich etwas übertrieben. Man kann und darf aber guten Gewissens sagen, dass Du in der Materie vollkommen "kenntnisfrei" bist. Auch das ist insofern nicht schlimm, als dass das sicherlich für die meisten "Hobbyprogrammierer" zutrifft und ganz besondes beim Thema "Characterset" ist ganz ganz große Leere angesagt.

Ob ich Dir noch die Zusammenhänge genauer erklären will, weiß ich jetzt noch nicht, weil ich erst einmal kochen muss, sonst gibt es nichts zu Abend. Aber um ein paar wichtige Eckdaten schon einmal vorweg zu schicken:

die Tatsache, dass Du bei einer vorhandenen (mit Datensätzen gefüllten) Datenbank den Zeichensatz von X auf Y umgestellt hast, bedeutet für Deine Abfragen und die Darstellung im Browser genau NICHTS. Die Datenbank ändert vorhandene Datensätze NICHT, sie interessiert sich auch (fast) nicht um den Zeichensatz (nur bei Sortierungen wäre das relevant, aber das ist schon zu ausschweifend). Fakt ist, dass vorhandene Daten, die ja nichts anderes als eine Ansammlung von Bytes sind, vorhandene Daten bleiben. Die Einstellung des Zeichensatzes (in der Datenbank) hat in keiner Weise einen Einfluss darauf, wie die Daten gespeichert werden - und schon gar nicht werden sie in irgendeiner Weise verändert, nur weil Du den Zeichensatz geändert hast.

Mit anderen Worten: es ist vollkommen logisch, dass die Zeichen in Deinem Browser falsch dargestellt werden - weil sie nicht in dem Format aus der Datenbank angeliefert werden, wie Du es im Browser "behauptest".

Für mehr reicht leider im Moment meine Zeit nicht, aber vielleicht reicht es ja aus, bei Dir einen Denkprozess anzustoßen, dass Du mal versuchst zu abstrahieren, was denn eigentlich ein "Zeichensatz" ist und in welchem Umfeld dieser Begriff überhaupt eine bestimmte Bedeutung hat. Gespeicherte Daten sind nur Bytes, sonst nichts - da mußt Du anfangen.
Nobbie
 
Posts: 6627
Joined: 09. March 2008 13:04

Re: Probleme bei if-Anweisung

Postby Altrea » 30. May 2010 20:55

Es ist ein großer Unterschied, ob du der Datenbank nur sagt, dass die Daten in einem gewisser Charset-codierung vorliegen, oder ob die Daten auch wirklich nach dieser codierung gespeichert wurden.

Das ist so als wenn dir jemand ein chinesisches Schriftstück in die Hand gibt aber sagt es sei Japanisch.

Wenn du den Charset von schon vorhandenen Daten ändern möchtest, musst du diese Daten konvertieren (um bei dem Beispiel mit den Schriftstücken zu bleiben: eine Art Übersetzung).

MySQL bietet zu diesem Zweck die Möglichkeit über ein ALTER TABLE Query ein CONVERT TO CHARACTER abzusetzen. Die genaue Syntax dazu bietet das MySQL Manual - ALTER TABLE.
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 6583
Joined: 17. August 2009 13:05
XAMPP Version: 5.5.19
Operating System: W7Ux64

Re: Probleme bei if-Anweisung

Postby Poison of the Cursed » 31. May 2010 20:39

Hallo Altrea, hallo Nobbie,

vielen Dank für eure Hinweise und Denkanstöße.

OK, ich habe mir die Artikel in Wikipedia zu Zeichensätzen und Zeichencodierungen durchgesehen, anschließend noch die Seiten des Referenzhandbuches zu mySQL gelesen.
Außerdem habe ich noch eine Seite entdeckt, auf der genau beschrieben wird, wie man eine Datenbank, eingestellt auf ISO in UTF-8 ändert.

@Nobbie:
Ich weiß, du bist sicher enttäuscht, aber richtig begriffen habe ich das mit den Zeichensätzen immer noch nicht. Vielleicht weil sich dahinter zu viel Logik verbirgt und ich bin leider einer der Menschen, der mit Logik so seine Schwierigkeiten hat. Bin eher der kreative Typ.
Nun ja, ich weiß nun wie Zeichensätze aussehen (bei Wiki war eine Tabelle mit der Belegung des ISO-8859 Zeichensatzes drin) und ich habe auch verstanden, was der Unterschied zwischen ISO und Unicode ist. Leider fehlt mir bei solchen Sachen dann immer die Verbindung dazu, wie mir dieses Wissen bei der Beseitigung meines Problems helfen kann.

ABER:
der Fehler ist nun behoben.

Ich habe folgende Befehle in SQL ausgeführt:

Code: Select all
ALTER DATABASE `datenbank_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

ALTER TABLE `tabellen_name` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

ALTER TABLE `user_interest`  DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;


Im Anschluss wird geraten diesen Befehl noch auf die Tabellen anzuwenden, wobei ich nicht so richtig verstanden habe, wieso:

Code: Select all
ALTER TABLE `tabellen_name` ADD INDEX `index_name` ( `feld_1` ( 10 ) ) ;


Damit lege ich den Index der Tabelle fest, soviel habe ich begriffen. Aber da der PRIMARY KEY auf das Feld "benutzername" noch besteht, war mir nicht ganz klar, wieso ich das nochmal wiederholen soll. In dem Beispiel mit der Umstellung von ISO auf UTF-8 wurde es gemacht, weil es in den Tabellen mehrere Indexfelder gegeben hat und da dann Probleme auftauchen könnten. Sollte ich den Befehl zur Sicherheit ausführen, obwohl ich nur ein Feld mit einem Index belegt habe? Oder ist der Hintergrund für diesen Befehl ein anderer, nämlich dass hier der Index auf 10 Zeichen begrenzt wird?

Zum Schluss habe ich in meiner connect.php nach dem Öffnen der Datenbankverbindung folgende Codeschnispel eingefügt

Code: Select all
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");


und auch meinen PHP-Code, ganz am Anfang der Datei (noch vor session_start) mit einem

Code: Select all
header('Content-Type: text/html; charset=utf-8');


versehen. Werde morgen gleich noch testen, ob die Funktion session_start jetzt beeinträchtigt ist, weil ja eigentlich dieser String immer am Anfang einer php-Datei mit SESSION stehen sollte.

Nochmal danke für eure Hilfe. Bis zum nächsten Fehler. Auch wenn ich immer die Hoffnung habe, keine Fehler mehr zu produzieren, werden es denke ich, noch viele sein. :cry:

Liebe Grüße
Poison
Poison of the Cursed
 
Posts: 31
Joined: 27. April 2010 17:56

Previous

Return to PHP

Who is online

Users browsing this forum: No registered users and 3 guests