Mysql PHP Sprachen / Languages

Alles, was PHP betrifft, kann hier besprochen werden.

Mysql PHP Sprachen / Languages

Postby neko-kun » 26. May 2006 14:29

Phhuu, endlich geschafft. :D
Ich kann alle Schriftarten von meiner Datenbank anzeigen.
Das Beispiel, dass ich nehmen werde ist Japanisch.
Wenn es recht ist werde ich in Englisch schreiben.


In mysqlAdmin I set Collation to utf8_unicode_c. In the sql table you can see Japanese text now, however when you launch the php page the Japanese text comes out as “?????”, even thought the browser can normally see Asian text.

What I did next was to place the following code into the php file before any query on the table.
Code: Select all
mysql_query("SET CHARACTER SET 'utf8'");


If you check the php now, instead of seeing “?????” you will see “[b]三浦ã
Last edited by neko-kun on 26. May 2006 14:33, edited 1 time in total.
neko-kun
 
Posts: 7
Joined: 26. May 2006 12:05

Postby neko-kun » 26. May 2006 14:31

So, nun das ich ein Problem gelöst habe stehe ich vor ein neues. :evil:

Ich kann zwar Information in verschiedenen Sprachen aus meiner Datenbank holen und anschauen aber nicht danach suchen. Warum? Und wie kann ich das Problem lösen?
neko-kun
 
Posts: 7
Joined: 26. May 2006 12:05

Postby nullplan » 28. May 2006 10:44

Mal ne Nebenfrage. oder auch gleich mehrere:
  1. Wie hast du die japanischen Zeichen in die MySQL-Tabelle gekriegt?
  2. Wo hast du die Kanji her?

Tschö,
nullplan
P.S.: Was heist "nicht suchen können"? Was geht nicht? Das 'WHERE'-Statement?
Lernen ohne zu denken ist sinnlos, aber denken ohne zu lernen ist gefährlich. - Konfuzius
nullplan
 
Posts: 22
Joined: 14. May 2006 10:19

Postby neko-kun » 29. May 2006 18:07

Kanji > Windows

Also ich habe Windows XP. Kanji war glaube ich schon drauf. Schau mall auf
Start > Einstellungen > Regions- und Sprachoptionen > Sprachen

Dann in Zusätzlichen Sprachunterstützung klick auf Dateien für ostasiatiche Sprachen installieren. Jetzt solltest du alle asiatische Schriften erkenn auch außerhalb deines Browsers.

Hier ist ein guter link:
http://newton.uor.edu/Departments&Progr ... on_XP.html



Kanji > mySQL

Also ich benütze mysqlAdmin, also nicht die Dos Version von mySQL. Und wie ich im obigen post erklärt habe ich in der Tabellen Sructure die Collations auf utf8_unicode_c gesetzt. Dann kann man verschiede Sprachsymbole eingeben.



Mein Problem

Also ich kann die Information von meiner Datenbank auf meiner PHP Seite aufrufen, also:

Code: Select all
$query = "SELECT * FROM People";
$result = mysql_query($query);

while ($record = mysql_fetch_assoc($result))
   {
   while (list ($fieldname, $fieldvalue) = each ($record))
      {
      echo $fieldname.": ".$fieldvalue."<BR>";
      }
   echo "<BR>";
   }


Und dann spuckt es alle Informationen von meiner Tabelle aus auch die in Japanischer Schrift.

Aber wenn ich ein PHP Seite schreibe die den Besuchter bittet den Nahmen einzugeben über den er beschied wissen will und der Besucher gibt zum Beispiel den Nahmen 三浦あいか ein, findet die Seite keine Resultate obwohl es in der Datenbank stehet. Gibt er jedoch einen Nahmen ein in normaler Schrift findet die Seite die Information.
neko-kun
 
Posts: 7
Joined: 26. May 2006 12:05

Postby nullplan » 30. May 2006 13:03

Ich empfehle, mit MySQL zu suchen. Also
Code: Select all
SELECT * FROM users WHERE username == $_POST['username']

Oder wie auch immer du den übertragenen Username nennst. Wenn du diese Query abschickst, solltest du nur ein Ergebnis zurückbekommen (wenn du die Daten richtig eingespeist hast). Ich bin mir gerade nicht sicher, ob der Vergleichsoperator für 'gleich' in SQL '==' ist, oder einfach nur '='. Aber da wird dich MySQL ja früh genug drauf hinweisen.
Ich hoffe, du hast das oben stehende Statement verstanden. users soll die Tabelle sein, wo deine User samt Passwort-Hash drinstehen, und username ist die Spalte, in der der Nutzername drinsteht. Und wenn du deine Login-Informationen von einem Formular beziehst, das seine Daten per POST sendet (weil GET wäre ja blöd: Dann stehen die Daten in der Adresszeile, und der hinter dem Nutzer Stehende lächelt, wenn dann in der Adresszeile "bla/bla.php?username=yyy&password=xxx" steht), musst du die Info deines UNames natürlich aus der Superglobalen $_POST ziehen.
Tschö,
nullplan
Lernen ohne zu denken ist sinnlos, aber denken ohne zu lernen ist gefährlich. - Konfuzius
nullplan
 
Posts: 22
Joined: 14. May 2006 10:19

Postby neko-kun » 30. May 2006 16:50

Ich hab ein Fehler in meinen obigen post gefunden. Der Code ist anders:

Code: Select all
$nameinput=$_POST['Name'];
$nameinput = trim($nameinput);
echo "<B>Your search request: </B>" .$nameinput. "<BR><BR>";

$query = "SELECT * FROM People WHERE Name LIKE '%".$nameinput."%'";
$result = mysql_query($query);

while ($record = mysql_fetch_assoc($result))
   {
   while (list ($fieldname, $fieldvalue) = each ($record))
      {
      echo $fieldname.": ".$fieldvalue."<BR>";
      }
   echo "<BR>";
   }


Also: $query = "SELECT * FROM People WHERE Name LIKE '%".$nameinput."%'";
Nicht: $query = "SELECT * FROM People";

Da es kein Login Page ist, wo der Benutzer einen bestimmten Nahmen eingeben muss, sondern eine Suchmaschine werden soll, muss das Resultat nicht == sein wie der Input. Zum Beispiel:

Input=> Apfel
Output=> Apfelbaum, Apfelschorle, Adamsapfel, …


Tut mir Leid für das Missverständnis.


P.S.: Hat Jemand mein Problem gelöst?
neko-kun
 
Posts: 7
Joined: 26. May 2006 12:05

Postby nullplan » 31. May 2006 08:09

Probiere mal folgende query:
Code: Select all
 $sql = "SELECT * FROM People WHERE name REGEXP /.*".strtolower($nameinput).".*/";

Wenn er dann nichts findet, kann ich dir auch nicht weiterhelfen. Rei rethorisch, äh.. theoretisch müsste das funktionieren.
Tschö,
nullplan
P.S.: Ich habe noch eine Idee:
Code: Select all
<?php
  include "mysql.config.inc.php"; #oder wo du deine MySQL-Zugriffs-Config halt hinspeicherst
  mysql_query("SET CHARACTER SET 'utf8'") or die(mysql_error());
  $sql = "SELECT * FROM `people`";
  $res = mysql_query($sql);
  $name = $_POST['name'];
  while ($row = mysql_fetch_assoc($res)) {
    if preg_match("/.*".$name.".*/,$row['name']) {
      foreach($row as $key => $val) {
        echo $key.": ".$val;
      }
    }
  }
  mysql_close();
?>
Lernen ohne zu denken ist sinnlos, aber denken ohne zu lernen ist gefährlich. - Konfuzius
nullplan
 
Posts: 22
Joined: 14. May 2006 10:19

Postby neko-kun » 04. June 2006 13:54

Ich hab’s gelöst :D . Mein Fehler war, dass ich nicht den Table auf Unicode gestelt hatte sondern nur die einzelnen Fields in MyAdmin.

So, nun werde ich euch zeigen was ich gemacht habe.

Step 1
Erst einmal ins phpMyAdmin.
Im Browser: http://localhost/
Dort im Tools Sektion auf phpMyAdmin kicken.
Log dich ein.
Image

Step 2
Dann eine neue Database erstellen.
So, jetzt das wichtigste. Im Collation uft8_unicode_ci auswählen.
Image

Step 3
Namen der Table und Anzahl der Felder eingeben.
Image

Step 4
Gewünschte Felder ausfüllen. Collation muss nicht noch mal auf uft8_unicode_ci gestellt werden. (Das war mein Fehler vorher. Ich habe nur hier uft8_unicode_ci eingegeben. So hat es nur halbwegs funktioniert.)
Image

Step 5
So, jetzt bemerke ich ein Fehler. :evil: Meine Tabelle scheint keinen Namen zu haben. Wenn ich weiter will kommt eine Fehler Meldung. Wenn das nicht mit euch geschieht gehe zu Step 8, ansonsten klickt auf das kleine Häuschen, dass euch zur Starseite bringt.
Image

Step 6
Auf Database Link klicken
Image

Step 7
Tabelle auswählen.
Image

Step 8
So, jetzt wird der Name angezeigt. Auf den Insert Knopf klicken um die Tabelle auszufüllen.
Image

Step 9
Tabelle ausfüllen mit Fremdsprachige Zeichen.
Image

Step 10
Auf den Browse Knopf klicken.
Image

Step 11
Und nun sieht Ihr den Inhalt euerer Tabelle.
Image

Step 12
Der Code. Ihr müsst zwei Zeilen zu euerer PHP hinzufügen um den Browser zu sagen wie es die Information lesen soll.
Und zwar:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
und
mysql_query("SET CHARACTER SET 'utf8'");
Das erste kommt in die <Head></Head> Tag rein und das andere bevor Ihr die query aufruft.

Ich habe ein Beispiel Code geschrieben, dass die Tabelle ausdrucket:
Code: Select all
<html>
<head>
<? /*   sets browser to read utf-8 */ ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>PHP Sprachen</title>
</head>
<body>
<?
/*   Calls up login information from an external file */
   include("xxxxxxx.xxx");

/*   MySQL login */
   $connection = mysql_connect($host,$user,$password)
   or die ("couldn’t connect to server");
   $db = mysql_select_db($database,$connection)
   or die ("Couldn’t select database");

/*   sets caracters to utf-8 */
   mysql_query("SET CHARACTER SET 'utf8'");
   
/*   Calls up Tabe information */
   $query = "SELECT * FROM Namen";
   $result = mysql_query($query);


/*   Prints out the table */
   while ($record = mysql_fetch_assoc($result))
      {
      
      while (list($fieldname, $fieldvalue) = each ($record))
         {
         echo $fieldname.": <B>".$fieldvalue."</B><BR>";
         }
      echo "<BR>";
      }
?>
   
</body>
</html>



So, ich hoffe, dass das einige Leute hilft.
neko-kun
 
Posts: 7
Joined: 26. May 2006 12:05

Ergänzung

Postby nullplan » 05. June 2006 09:44

Und für alle, die fremdsprachige Zeichen auch in anderen Sprachen (XML etc.) einsetzen wollen: die Alternativlösung zum Meta-Tag:
Code: Select all
$mimetype = "text/html"; //oder was auch immer sonst
/* für XML: application/xml */
  header("Content-Type: ".$mimetype."; charset=utf-8");

Das hat den Vorteil, dass man auch im Plain-Text-Format (MIME-Type: text/plain) fremdartige Zeichen einsetzen kann.
Tschö,
nullplan
P.S.: Ja, ich weis, dass XML eine Charset-Eigenschaft im Root-Tag hat. Deswegen soll diese Möglichkeit trotzdem nicht unerwähnt bleiben.
Lernen ohne zu denken ist sinnlos, aber denken ohne zu lernen ist gefährlich. - Konfuzius
nullplan
 
Posts: 22
Joined: 14. May 2006 10:19


Return to PHP

Who is online

Users browsing this forum: No registered users and 12 guests