[PHP] SQL Select mit Umlauten in UTF-8 Kodierung werden nicht angezeigt

Dieses Thema im Forum "Webentwicklung" wurde erstellt von UPionier, 25. Februar 2008 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 25. Februar 2008
    SQL Select mit Umlauten in UTF-8 Kodierung werden nicht angezeigt

    Hi Leute ich habe folgendes Problem,

    mein PHP Script funktioniert soweit sogut nur wenn ich eine Abfrage mit einem Sonderzeichen mache erhalte ich kein Ergebnis.

    Ich gebe euch ein Beispiel:



    Ich gebe Folgendes ein im Formular

    Vorwahl: 2421
    Postleitzahl: 52353
    Strasse: Küferst


    Ich bekomme folgendes Ergebnis
    "
    Folgende Daten wurden �bermittelt:

    Vorwahl: 2421
    Postleitzahl: 52353
    Strasse: Küferst

    Es wurden folgende Einträge gefunden:

    kein Eintrag gefunden

    "

    der SQL lautet

    "
    SELECT * FROM `verfuegbarkeit` WHERE `onkz` LIKE '2421' AND `plz` LIKE '52353' AND `strasse` LIKE 'Küferst%'
    "
    der durchläuft.
    Wenn ich diesen in PHPMyAdmin eingebe funktioniert das ganze auch nur leider nicht in PHP

    Ich habe alles auf UTF-8 unicode in der Datenbank umgestellt.

    Das Script ist wie folgt aufgebaut:

    verfuegbarkeit.php
    Code:
    <html>
    <head>
    
    <title>Verf&uuml;gbarkeitsabfrage</title>
    
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="style.css" media="screen" />
    </head>
    <body>
    <?php
    
    if (!$_POST['gesendet'] && !$_POST['name']) {
    
    ?>
    <h1>Bitte geben Sie folgende Daten korrekt ein:</h1>
    <table>
     <tr>
     <form method="POST" accept-charset="utf-8" action="<?php echo $PHP_SELF ?>"> 
     <th>Ortsvorwahl (ohne f&uuml;hrende 0): </th>
     
     <th><input type="text" name="onkz" size="30" /></th>
    </tr>
    
    <tr> 
     <th>Postleitzahl:</th> 
     <th> <input type="text" name="plz" size="30" /></th>
    </tr>
    
    <tr> 
     <th>Stra&szlig;e:</th> 
     <th> <input type="text" name="strasse" size="30" /></th>
    </tr> 
    
    <tr>
     <th>Ergebnis ermitteln:</th>
     <th> <input type="submit" name="Submit" value="Absenden" />
     <input type="reset" name="reset" value="Reset" /></th>
     <input type="hidden" name="gesendet" value="1">
    </tr>
    
    </form>
    </table>
    <?php
    
    } else {
    echo "
     Folgende Daten wurden übermittelt:<p>
     <b>Vorwahl:</b> $_POST[onkz]<br>
     <b>Postleitzahl:</b> $_POST[plz]<br>
     <b>Strasse:</b> $_POST[strasse]<br>
     <p>
    
     </form>
     </p>
    ";
    
    include "sql_select.php";
    }
    
    ?>
    </body>
    </html>
    
    und die Datei

    sql-select.php

    Code:
    MYSQL_PASS', 'dmadmin'); 
     define('MYSQL_DATABASE', 'verfuegbarkeit'); 
     
    @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die(mysql_error());
     mysql_select_db(MYSQL_DATABASE) OR die(mysql_error()); 
    
     
    
     
    $sql = " 
    SELECT *
    FROM `verfuegbarkeit`
    WHERE `onkz` LIKE '$_POST[onkz]'
    AND `plz` LIKE '$_POST[plz
    
    Könnt ihr mir vielleicht helfen damit ich das in Griff kriege?

    Danke UPionier
     
  2. 25. Februar 2008
    AW: SQL Select mit Umlauten in UTF-8 Kodierung werden nicht angezeigt

    Das einzige was mir grad spontan einfällt ist einfach das ü mit &uuml; zu ersetzen, oder
    die funktione htmlentytis zu verwenden.
     
  3. 25. Februar 2008
    AW: SQL Select mit Umlauten in UTF-8 Kodierung werden nicht angezeigt

    Hmm bei der Lösung müsste ich also, in der Datenbank alle Sonderzeichen z.B Ä in Auml; unwandeln und dann den abgefragten String von Ä in Auml; umwandeln.

    Gibt es da keine konfortablere Lösung?
     
  4. 25. Februar 2008
    AW: SQL Select mit Umlauten in UTF-8 Kodierung werden nicht angezeigt

    Doch aber die fällt mir grad nicht ein... jedenfalls keine die auf Freehoster funktioniert, in der PHP.ini ist irgendein wert den man ändern muss.

    Ich schau mal... ... also in der php.ini muss volgendes stehen:

    Code:
    default_charset = "iso-8859-1"
     
  5. 25. Februar 2008
    AW: SQL Select mit Umlauten in UTF-8 Kodierung werden nicht angezeigt

    aber eigtl. soll ja alles auf utf8 gewandelt werden, also müsste ich da ja utf8 deklarieren, ich werde es nochmals versuchen mit dem htmlentities, aber bin für ideen offen

    EDIT:
    So habe die Umschreibung in die Sonderzeichen geschafft also ö wird zu &ouml; nur das Problem ist jetz, muss ich in der DB alle "ö" jetz in "&ouml;" umschreiben, weil so wird ja der sql select falsch oder wie soll ich das machen?

    Neuer Code ist wie folgt

    Code:
    <html>
    <head>
    
    <title>Verf&uuml;gbarkeitsabfrage</title>
    
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="style.css" media="screen" />
    </head>
    <body>
    <?php
    
    if (!$_POST['gesendet'] && !$_POST['name']) {
    
    ?>
    <h1>Bitte geben Sie folgende Daten korrekt ein:</h1>
    <table>
     <tr>
     <form method="POST" accept-charset="utf-8" action="<?php echo $PHP_SELF ?>"> 
     <th>Ortsvorwahl (ohne f&uuml;hrende 0): </th>
     
     <th><input type="text" name="onkz" size="30" /></th>
    </tr>
    
    <tr> 
     <th>Postleitzahl:</th> 
     <th> <input type="text" name="plz" size="30" /></th>
    </tr>
    
    <tr> 
     <th>Stra&szlig;e:</th> 
     <th> <input type="text" name="strasse" size="30" /></th>
    </tr> 
    
    <tr>
     <th>Ergebnis ermitteln:</th>
     <th> <input type="submit" name="Submit" value="Absenden" />
     <input type="reset" name="reset" value="Reset" /></th>
     <input type="hidden" name="gesendet" value="1">
    </tr>
    
    </form>
    </table>
    <?php
    
    } else {
    
    
    
    //HTML Zeichen filtern
    $onkz_secure = htmlspecialchars("$_POST[onkz]", ENT_QUOTES);
    $plz_secure = htmlspecialchars("$_POST[plz]", ENT_QUOTES);
    $strasse_secure = htmlspecialchars("$_POST[strasse]", ENT_QUOTES);
    
    //Strings umschreiben
    $onkz_clean = htmlentities("$onkz_secure",ENT_QUOTES,"UTF-8");
    $plz_clean = htmlentities("$plz_secure",ENT_QUOTES,"UTF-8");
    $strasse_clean = htmlentities("$strasse_secure",ENT_QUOTES,"UTF-8");
    
    echo "
     Folgende Daten wurden übermittelt:<p>
     <b>Vorwahl:</b> $onkz_clean<br>
     <b>Postleitzahl:</b> $plz_clean<br>
     <b>Strasse:</b> $strasse_clean<br>
     <p>
    
     </form>
     </p>
    ";
    
    include "sql_select.php";
    
    
    }
    
    
    
    
    
    ?>
    </body>
    </html>
    

    die sql-select.php habe ich auch den neue Variablen angepasst

    sql_select.php
    Code:
    Es wurden folgende Eintr&auml;ge gefunden:<p>
    <?php
    
     error_reporting(E_ALL); 
    
     define('MYSQL_HOST', 'localhost'); 
     define('MYSQL_USER', 'dmadmin'); 
     define('MYSQL_PASS', 'dmadmin'); 
     define('MYSQL_DATABASE', 'verfuegbarkeit'); 
     
    @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die(mysql_error());
     mysql_select_db(MYSQL_DATABASE) OR die(mysql_error()); 
    
     
    
     
    $sql = " 
    SELECT *
    FROM `verfuegbarkeit`
    WHERE `onkz` LIKE '$onkz_clean'
    AND `plz` LIKE '$plz_clean'
    AND `strasse` LIKE '$strasse_clean%'
    
    
    
    ";
    
    
    $ausgabe = mysql_query($sql);
    echo mysql_error(); 
    
    ?>
    <table>
    <tr>
    <th>Stra&szlig;e:</th>
    <th>Postleitzahl:</th>
    <th>Ort:</th>
    <th>Anschlussbereich:</th>
    <th>Produkt</th>
    </tr>
    <?
     while($row = mysql_fetch_array($ausgabe)) {
     ?> 
     
    
    
    <tr>
    <th><?=$row['strasse'];?></th>
    <th><?=$row['plz'];?></th>
    <th><?=$row['area'];?></th>
    <th><?=$row['asb'];?></th>
    <th><?=$row['produkt'];}?></th>
    </tr>
    
    </table>
     
    
     
     
    </p>
    
    <br /><br /><br />
    <hr width="95%" height="2px"/>
    DEBUG INFORMATIONEN:<br /><br />
     <?
     
     echo "$sql";
     
     ?>
    
     
  6. 25. Februar 2008
    AW: SQL Select mit Umlauten in UTF-8 Kodierung werden nicht angezeigt

    Hast du dir mal die google TOP 10 zu den relevanten Themen reingetan? Ich vermute nicht, denn mit den dort zu findenden Anleitungen ist utf-8 Kompatibilität ohne Probleme zu erreichen .... Wenn du allerdings die Codierungen mischt und hin und her fummelst, gibt das eher Murks.

    - MySQL Sets müssen auf utf-8 gestellt werden / gestellt sein.
    - Alle beteiligten Dateien müssen auf utf-8 codiert sein, ohne BOM.
    - Alle Dateien müssen als utf-8 augeliefert werden.
    - Auf die Kodierung innerhalb von Formularen muss geachtet werden.

    Jeder dieser Schritte kann perfekt ergoogelt werden!
     
  7. 25. Februar 2008
    AW: SQL Select mit Umlauten in UTF-8 Kodierung werden nicht angezeigt

    schau dir deine sql-abfrage an.
    - $strasse_clean%
    und php bei der übergabe von werten
    - "$_POST[onkz]"

    vieleicht liegts daran
     
  8. 25. Februar 2008
    AW: SQL Select mit Umlauten in UTF-8 Kodierung werden nicht angezeigt

    mach nach dem öffnen der mysqlverbindung:

    PHP:
    mysql_set_charset ( "utf8" );
    Den Rest macht PHP alleine.
     
  9. 26. Februar 2008
    AW: SQL Select mit Umlauten in UTF-8 Kodierung werden nicht angezeigt

    Das eine in ISO-8859-1 geschriebene Scriptsprachen, die im "Umzug" nach unicode steckt, "deren PEAR- und PECL - Vereine" ISO-8859-1 für die Codierung vorraussetzen, deren Standardcodierung für viele "String-Umwandlungs-Funktionen" wie z.B. htmlentitites etc. ISO-8859-1 ist, die das HTTP - Protokoll manipulieren kann, dies aber bzgl. der Codierung nicht automatisch tut, über die google genügend Tipps liefern muss damit jeder das auch wirklich hinbekommt .... "den Rest von alleine macht", nur weil man das charset der SQL - Verbindung ändert, was ich auch bereits oben sagte, halte ich für groben Unfug!
     
  10. 26. Februar 2008
    AW: SQL Select mit Umlauten in UTF-8 Kodierung werden nicht angezeigt

    Mhm komisch, dass dieser grobe Unfug funktioniert.

    PHP wandelt die Daten aus der mysqldatenbank dann in das defaultCharset um, welches PHP benutzt.
     
  11. 26. Februar 2008
    AW: SQL Select mit Umlauten in UTF-8 Kodierung werden nicht angezeigt

    Jo und dann liest du es schön als utf-8 aus und sendest es ISO codiert zum Browser ... es bedarf schon mehr Schritte um sicherzugehen dass utf-8 richtig in einer Webapplikation angewandet wird und zum Beispiel der Webserver so gut es geht vor Codierungsangriffen geschützt wird .... Gute Lektüre um dies z.B. mal einzusehen wäre die Ausarbeitung vom htmlpurifier - Projekt.

    Und da du mir ja in anderen Threads vorwirfst, ich würde Anfänger zu wenig bedenken, solltest du dich selbst dran halten und anfangen ordentlich aufzuklären oder dich selbst mal tiefer mit den Hintergründen zu beschäftigen, ähnlich zum Sinn der Stringbegrenzungen, POST statt Session, utf -8 etc.
     
  12. 27. Februar 2008
    AW: SQL Select mit Umlauten in UTF-8 Kodierung werden nicht angezeigt

    Thema geschlossen.

    Grund:
     
  13. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.