Charset von PHP & MYSQL anpassen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
art
ausgeben
befehl
browser
code
datei
datenbank
datum
formular
http
index
kunde
leute
problem
quellcode
sagen
speichern
tabelle
url
zeile
-
Hallo Leute,
ich habe ein Problem mit Kommunikation zwischen PHP und MYSQL.
Ich bin der Meinung, dass die MYSQL-Datenbank auf UTF-8 eingestellt ist, und in der von PHP erzeugten HTML-Datei habe ich im Header auch UTF-8 festgelegt (<meta http-equiv="content-type" content="text/html; charset=utf-8">).
Alles war in der Datenbank steht wird ordentlich angezeigt. Aber wenn ich was in die Datenbank reinschreibe (über ein Formular), kommt nur Mist raus.
Irgendwo muss die UTF-8-Kette unterbrochen sein ... aber wo?? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Poste doch mal den Code und/oder die URL des Formulars... So ist es schwer, irgendetwas zu deinem Problem zu sagen...
Bei einem Projekt hat mir die Funktion utf8_decode() geholfen...
Hab nochmal nachgelesen und bin auf das (http://de.selfhtml.org/html/formulare/definieren.htm#zeichenkodierung) gestoßen...
Beitrag zuletzt geändert: 11.11.2009 10:46:37 von staymyfriend -
Wenn du es als meta-zeile in den Quellcode reinpappst, dann reicht das nciht aus... du musst die Datei selbst auch als UTF-8 datei speichern. Wenn du den Eclipse verwendest, kannst du das mal schnell bei properties machen... das wäre der einzige weg, den ich kenne, wie du es unter Windows nachträglich anstellen kannst... der Editor hat beim abspeichern die Möglichkeit bei Dateityp einzustellen, wlche Codierung du haben willst....
unter linux geht es nachträglich ganz einfach mit dem Befehl
iconv -f ISO_8859-15 -t UTF-8 index.php > index.php
bei -f gibst du die aktuelle convertierung an, bei strich -t die zukünftige... der Befehl ändert die Datei nciht, deswegen eine Ausgabeumlenkung über > in diese Datei... eigentlich ganz simpel...
Edit: ich bin mir zu 98% sicher, dass der Code nicht ausschlaggebend ist, sondern dass du einfach nur diesen Fakt übersehen hast^^
Beitrag zuletzt geändert: 11.11.2009 10:37:49 von sebulon -
Wenn du es als meta-zeile in den Quellcode reinpappst, dann reicht das nciht aus... du musst die Datei selbst auch als UTF-8 datei speichern. Wenn du den Eclipse verwendest ...
Ja, ich benutze eclipse, aber ich bin mir sicher das das nicht daran liegt, dass ich die Datei im falschen Format speicher. Wenn das Problemdarin bestünde, dass ich mit 'echo' etwas ausgeben will und das nicht funktioniert, dann wäre es das Dateiformat. Aber das kann in dem Fall nicht sein.
Hab nochmal nachgelesen und bin auf das (http://de.selfhtml.org/html/formulare/definieren.htm#zeichenkodierung) gestoßen...
Das müsste funktionieren! Danke.
Beitrag zuletzt geändert: 11.11.2009 15:37:10 von m84 -
m84 schrieb:
Wenn du es als meta-zeile in den Quellcode reinpappst, dann reicht das nciht aus... du musst die Datei selbst auch als UTF-8 datei speichern. Wenn du den Eclipse verwendest ...
Ja, ich benutze eclipse, aber ich bin mir sicher das das nicht daran liegt, dass ich die Datei im falschen Format speicher. Wenn das Problemdarin bestünde, dass ich mit 'echo' etwas ausgeben will und das nicht funktioniert, dann wäre es das Dateiformat. Aber das kann in dem Fall nicht sein.
prüfen wir ds einfach nach
geh auf die Datei.
mach einen Rechtsklick. Dann kommt eine liste. dort klickst du auf "Properties"
dann hast du den Reiter "resource" im weißen Feld links. der müsste aktiviert sein.
Unten siehst du ein Kästchen mit der Überschrift: Text file encoding
Da muss auf irgendeine Art und weise "UTF-8" stehen
______________________________________________________
Wenn da ASCII steht, war es doch deine Datei, die Probleme hat...
würde gerne das Ergebnis der Auswertung hier sehen... -
Ok, es war nicht umgestellt. Ich werd's mal versuchen.
-
Sag ich doch kannst mir ruhig mal was glauben, wenn ich sage, dass ich mir zu mehr als 60% sicher bin
das Problem, was du jetzt hast: du müstest es bei jeder Datei nachträglich manuell umstellen.
aber du kannst eine globale Einstellung machen
Dazu gehst du oben auf der Menüleiste auf "Project">"properties"-> ungefähr selbe Position wieder encoding...
wenn du das auf UTF-8 umstellst, werden alle dateien automatisch in UTF-8 geschrieben..
dein Meta ist nur eine Browser-information, damit der Browser weiß, wie er das verarbeiten soll-... in dem Großteil aller Fälle erkennt der Browser automatisch, dass das ein anderer Zeichensatz ist... UTF-8 ist langsam standard im Internet, deswegen kannst du wirklich ohne zu zögern das so machen... ncihts ist schlimmer, als ein Mischmasch aus mehreren codierungen^^ -
Jetzt sollte alles in UTF-8 sein. Vielen Dank für den Tipp. Jetzt weiss ich auf jeden Fall wie das geht.
Aber leider funzt es immer noch nicht. :(
Was mich total wundert ist, dass wenn ich das, was in der Datenbank ist, so ausgeben, kommt mist raus. Wenn ich das aber als value für ein Input setze, dann wird alles korrekt dargestellt.
Beitrag zuletzt geändert: 11.11.2009 16:08:35 von m84 -
ok, dann wird jetzt der code interessant... denn die Datenbank ist in UTF-8?
Code her und beispiel daten im input und wie der output aussehen soll, so vom Muster her^^ -
Ich benutze mein eigenes Templatesystem. Das hier ist eine der Templatedateien - ist aber das, was ausschalggebend ist:
Im oberen Bereich (wenn editiert wird ($_POST['edit'])) ist die Ausgabe i.O., aber im Unteren Bereich wo die Daten in die Tabelle geschrieben werden gibt es die Probleme.
<?php /* * Daten: * 'kunden' -- Array mit allen Kunden */ ?> <?php $headline = each($data['kunden']); ?> <h1>Kundendatenbank</h1> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <?php if (isset($_POST['edit'])) { ?> <table class="main"> <?php foreach ($headline['value'] AS $key => $val) { ?> <tr> <th><?php echo $key; ?></th> <td><input size="30" name="dbdata[<?php echo $key; ?>]" value="<?php echo $val; ?>"></td> </tr> <?php } ?> <tr> <th>Neues PWD</th> <td><input size="30" name="newpwd"></td> </tr> <tr> <td colspan="2" align="right"><input type="submit" name="editok" value="Übernehmen"></td> </tr> </table> <input type="hidden" name="id" value="<?php echo $_POST['suchwort']; ?>"> <?php } ?> <p align="right"> <input type="submit" value="suchen" name="suchen"> <input name="suchwort"> <select name="spalte"> <?php foreach ($headline['value'] AS $key => $val) { ?> <option value="<?php echo $key; ?>"><?php echo htmlentities($key); ?></option> <?php } ?> <option>id</option> </select> </p> <table border="0" width="100%" class="main"> <tr> <?php foreach ($headline['value'] AS $key => $val) { ?> <th><?php echo htmlentities($key); ?></th> <?php } ?> <th colspan="2">bearbeiten</th> </tr> <?php foreach ($data['kunden'] AS $key => $val) { ?> <tr> <?php foreach ($val AS $entry) { ?> <td><?php echo htmlentities($entry); ?></td> <?php } ?> <td align="center"><input <?php if (isset($_POST['edit'])) echo 'disabled="disabled" '; ?>type="submit" value="e" name="edit[<?php echo $key; ?>]"></td> <td align="center"><input type="submit" value="x" name="delete[<?php echo $key; ?>]"></td> </tr> <?php } ?> </table> </form>
Also im Endeffekt lese ich die Daten einfach aus der Datenbank und gebe sie aus (ohne irgendwelche Veränderungen). Von daher denke ich, ist der Code eigentlich nicht so wichtig.
Beitrag zuletzt geändert: 11.11.2009 16:20:20 von m84 -
1. das ist kein Template. in einem Template hat PHP NIX zu suchen, außer, wenn man die fertig ausgewerteten Variablen einsetzt...
das heißt, es wird erst erechnet, dann wird die Maske aufgerufen und per PHP die Werte eingesetzt.. so läuft das mit den Templates. Templates sind dazu da, die Geschäftslogik vom Design zu trennen...
<?php $headline = each($data['kunden']); ?>
-> da gehts schon los: was soll diese codezeile bezwecken??? woher beziehst du deine Daten? wie sieht die Datenstruktur aus? -
Keine Sorge. Das läuft schon alles korrekt.
Viele Leute vergessen, das PHP auch eine Art Templatesystem ist und das es im Endeffekt egal ist, ob man sich eine eigene Scriptsprach schreibt, die einem die Tabelle zusammenbastelt oder direkt PHP benutzt.
Das Templatesystem daran ist, dass die Datenverarbeitung von der HTML gestaltung getrennt ist.
Mit der Zeile $headline = each($data['kunden']); nehme ich mir einfach nur irgendeinen Datensatz, um daraus die Überschriften der Tabelle zusammen zu setzen.
Die Daten werden in einer andrene Datei geholt. $data ist die Variable, die die bereits verarbeiteten Daten beinhaltet, die zur Ausgabe relevant sind.
Beitrag zuletzt geändert: 11.11.2009 16:45:48 von m84 -
hehe,
lies dir mal den Artikel durch und sage selbst, was der Fehler ist... den each befehl kannte ich nciht, ich hab immer mir foreach gearbeitet...
und dann nenne mir den Fehler^^ betrifft genau diese eine Zeile, die mir aufgestoßen ist...
http://www.w3schools.com/php/func_array_each.asp -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage