kostenloser Webspace werbefrei: lima-city


Charset von PHP & MYSQL anpassen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    m*4

    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??
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. 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
  5. Autor dieses Themas

    m*4

    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
  6. 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...
  7. Autor dieses Themas

    m*4

    Ok, es war nicht umgestellt. Ich werd's mal versuchen.
  8. 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^^
  9. Autor dieses Themas

    m*4

    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
  10. 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^^
  11. Autor dieses Themas

    m*4

    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="&Uuml;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
  12. 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?
  13. Autor dieses Themas

    m*4

    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
  14. 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
  15. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!