Dienstag, 11. November 2014

Daten in Unicode von PHP Formular zu MSSQL übertragen

Wie überträgt man die Daten mit PHP Formular an MSSQL Datenbank.
Zwischen klassische Lösungen  PHP <-> MySQL und PHP<->MSSQL gibt es einige Unterschiede. Dazu gehört: die Datentransferierung in Unicode. Da unsere Daten mehsprachig sein können, ist das Thema Unicode besonders gut zu beachten. Folgende Besonderheiten sollen berücksichtigt werden:
  1. Die Columns (Spalten in der Tabelle), die für Unicode Inhalt gedacht sind müssen als nvarchar Type haben.
  2. Erstellung der Tabelle: $table - Tabellename, ID- automatische Zeilenzähler, tickertext  und kategoriy haben NVARCHAR Type.  $result = mssql_query("CREATE TABLE $table ( ID int IDENTITY(1,1) PRIMARY KEY,  tickertext NVARCHAR( 200 ) NOT NULL ,  kategory NVARCHAR( 150 ) ) ") or die(mysql_error());
  3. Vor der Datenbankverbindung ini_set('mssql.charset', 'UTF-8'); 
  4. Im Form Tag <form METHOD="post"  action="ticker-formmailer.php" ENCTYPE="multipart/form-data" name="ticker" accept-charset="utf-8">
  5. Datenübergabe:  Es gibt zwei Lösungen dafür.
    1. $tabele = "DWNews_Ticker"; //Tabellename
      $tickertext = $_POST['tickertext']; //Datenübergabe vom Formular mit POST Methode
      $kategorie  = $_POST['kategorie']; //Datenübergabe vom Formular mit POST Methode
      $result = mssql_query("INSERT INTO DWNews_Ticker (tickertext, kategory) VALUES (N'$tickertext',N'$kategorie')");
      Nachtei von der Übertragung, dass die Daten in einer verzehrter Codierung übertragen wurden. Dafür aber auf der Webseite, Benutzer-Oberfläche korrekt ausgelesen.
    2. $tickertext = iconv('UTF-8', 'UTF-16LE', $_POST['tickertext']); //Konvertierung durch native encoding
      $tickertext = bin2hex($tickertext); //Konvertierung durch hexadecimal
      $tickertext = '0x'.$tickertext;
      Gleiche für die zweite nvarchar:
      $kategorie = iconv('UTF-8', 'UTF-16LE', $_POST['kategorie']); //convert into native encoding
      $kategorie = bin2hex($kategorie); //convert into hexadecimal
      $kategorie = '0x'.$kategorie;
      Hier werden die Daten in die Datenbank gespeichert
       
      $result = mssql_query("INSERT INTO DWNews_Ticker (tickertext, kategory) VALUES (CONVERT(nvarchar(2000),  $tickertext), CONVERT(nvarchar(2000),  $kategorie))");
      Mit der Übertragung werden die Sätze aus dem Formular als Unicode in der Datenbank kopiert.
       

Keine Kommentare:

Kommentar veröffentlichen