ελληνικοι χαρακτηρες σε Mysql μεσω PHP  Το θέμα επιλύθηκε

...ρύθμιση - εγκατάσταση web server, mail server, ftp server, κλπ

Συντονιστές: the_eye, konnn

ελληνικοι χαρακτηρες σε Mysql μεσω PHP

Δημοσίευσηαπό koslibpro » 04 Ιουν 2012, 15:01

Καλησπερα!

εχω ρωτησει σε forums,εχω ψαξει στο Internet..κανενας δεν εδωσε λυση στο προβλημα μου..

λοιπον,εχω μια φορμα σε *.htm που με ενα action κανει ενα αρχειο submit.php
ολα λειτουργουν μια χαρα με τους λατινικους χαρακτηρες,και καταχωρουνται σωστα στην βαση μου και ανακτωνται απο μια φορμα αναζητησης που εχω φτιαξει..με τα ελληνικα ομως τα χαλαω.μου ειπαν πρεπει να τα βαλεις ολα σε utf8 και επισης να σωσεις τα αρχεια σου σε utf8.
μεσα στο submit.php αρχειο μου εχω αυτα
Κώδικας: Επιλογή όλων
mysql_set_charset('utf8',$con);
mysql_query("SET NAMES 'utf8'",$con);

($con = mysql_connect("localhost","root","password");


Υποτιθεται παντως οτι αυτη ειναι η λυση στο προβλημα μου.ομως και παλι μου βγαζει τα ελληνικα γραμματα με ?????? μεσα στην βαση.με τους αριθμους καλα τα παει,αλλα τα chars τα χαλαει.

ολος ο κωδικας στο κομματι αυτο ειναι:
Κώδικας: Επιλογή όλων
$con = mysql_connect("localhost","root","password");
if (!$con)
{
die('Σφάλμα σύνδεσης με την βάση δεδομένων: ' . mysql_error());
}
mysql_select_db("dbname", $con); //select database
mysql_set_charset('utf8',$con);
mysql_query("SET NAMES 'utf8'",$con);
αν χρειαζεται πουθενα..

τι να κανω βρε παιδια?μα εχω κανει οτι πρεπει,γιατι να μην αποθηκευονται τα ελληνικα?

ευχαριστω πολυ εκ των προτερων!
Spoiler: show
1 Γνώσεις → Linux: Χαμηλό>Μεσαίο┃ Προγραμματισμός: PHP,C ┃ Αγγλικά: Proficiency
2 Λειτουργικό → Ubuntu 13.04 precise 32-bit (en_US.UTF-8)
3 Προδιαγραφές → CPU: i3-2310M 2.1Ghz ‖ RAM 4Gb
4 Κάρτες γραφικών: NVidia GeForce GT 540M 1Gb

Personal blog - website
Άβαταρ μέλους
koslibpro
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 356
Εγγραφή: 12 Μάιος 2011, 16:37
Τοποθεσία: Piraeus
Εκτύπωση

Re: ελληνικοι χαρακτηρες σε Mysql μεσω PHP

Δημοσίευσηαπό the_eye » 04 Ιουν 2012, 15:15

Την βάση στην δημιουργία της πρέπει να ορίσεις το Collation ως utf8_general_ci
Όσο λιγότερο κλειστό λογισμικό έχεις, τόσα λιγότερα προβλήματα.
1 Γνώσεις ⇛ Linux: Καλό ┃ Προγραμματισμός: Ναι PHP, MySQL ┃ Αγγλικά: Καλά
2 Ubuntu 24.04.2
3 Intel Core i3-6100 CPU @ 3.70GHz ‖ RAM 7836 MiB ‖ Gigabyte B150M-HD3 DDR3-CF - Gigabyte B150M-HD3 DDR3
4 Intel HD Graphics 530 [8086:1912] {i915}
5 enp1s0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
Άβαταρ μέλους
the_eye
Διαχειριστής
Διαχειριστής
 
Δημοσιεύσεις: 11717
Εγγραφή: 16 Μαρ 2010, 17:19
Launchpad: ntoulasd
IRC: the_eye_
Εκτύπωση

Re: ελληνικοι χαρακτηρες σε Mysql μεσω PHP

Δημοσίευσηαπό koslibpro » 04 Ιουν 2012, 15:26

ετσι την εχω ορισει..
Spoiler: show
1 Γνώσεις → Linux: Χαμηλό>Μεσαίο┃ Προγραμματισμός: PHP,C ┃ Αγγλικά: Proficiency
2 Λειτουργικό → Ubuntu 13.04 precise 32-bit (en_US.UTF-8)
3 Προδιαγραφές → CPU: i3-2310M 2.1Ghz ‖ RAM 4Gb
4 Κάρτες γραφικών: NVidia GeForce GT 540M 1Gb

Personal blog - website
Άβαταρ μέλους
koslibpro
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 356
Εγγραφή: 12 Μάιος 2011, 16:37
Τοποθεσία: Piraeus
Εκτύπωση

Re: ελληνικοι χαρακτηρες σε Mysql μεσω PHP

Δημοσίευσηαπό parenthesis » 04 Ιουν 2012, 16:53

Εμένα μου εμφανίζει κανονικά τα ελληνικά στη βάση.
Για δοκίμασε να τρέξεις τα παρακάτω :

index.html
Κώδικας: Επιλογή όλων
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="el" lang="el">
<head>
<title>Testing Greek</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="universe"><div class="content">
<p>Δώσε κάτι με ελληνικούς χαρακτήρες : </p>
<form action="submit.php" method="post">
<div class="text">
<textarea name="shout"></textarea>
</div><br />
<input type="submit" value="TestGreek" class='submit' />
</form>
</div>
</div>
</body>
</html>


submit.php
Κώδικας: Επιλογή όλων
<?php
$con = mysql_connect( 'localhost', 'root', 'password' ) or die(mysql_error());
mysql_set_charset('utf8', $con);

mysql_query("CREATE DATABASE `TestingGreek` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci");

mysql_select_db( 'TestingGreek' ) or die(mysql_error());

mysql_query("CREATE TABLE `TestingGreek`.`table1` (
`id` INT( 3 ) NOT NULL ,
`name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci");

//header( 'Content-type: text/html; charset=utf8' );

$shout = $_POST[ 'shout' ];
echo $_POST[ 'shout' ];
mysql_query(
"INSERT INTO table1
(id, name)
VALUES
('1',
'" . $shout . "')"
);
header( 'Location: index.html' );
?>
Τελευταία επεξεργασία από parenthesis και 04 Ιουν 2012, 18:44, έχει επεξεργασθεί 1 φορά/ες συνολικά
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Πολύ καλό
2 Dual boot:
  • Ubuntu 13.04 raring 3.8.0-34-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic
  • Fedora 19 Schrödinger’s Cat 3.13.5-101.fc19.x86_64 64bit (el_GR.utf8, gnome)
3 Intel Core i5-3337U CPU @ 1.80GHz ‖ RAM 3844 MiB ‖ TOSHIBA VCUAA - TOSHIBA SATELLITE U940
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 eth0: Realtek RTL8101E/RTL8102E Ethernet [10ec:8136] (rev 05) ⋮ wlan0: Intel Centrino Wireless-N 2230 [8086:0887] (rev c4)
Άβαταρ μέλους
parenthesis
punkTUX
punkTUX
 
Δημοσιεύσεις: 150
Εγγραφή: 06 Οκτ 2009, 22:47
Launchpad: mara_sdr
Εκτύπωση

Re: ελληνικοι χαρακτηρες σε Mysql μεσω PHP

Δημοσίευσηαπό koslibpro » 04 Ιουν 2012, 18:14

οντως τωρα τρεχει κανονικα και τα εμφανιζει τα ελληνικα!
τι να κανω?τι να αλλαξω στον δικο μου κωδικα για να δουλευει τελικα..?
Spoiler: show
1 Γνώσεις → Linux: Χαμηλό>Μεσαίο┃ Προγραμματισμός: PHP,C ┃ Αγγλικά: Proficiency
2 Λειτουργικό → Ubuntu 13.04 precise 32-bit (en_US.UTF-8)
3 Προδιαγραφές → CPU: i3-2310M 2.1Ghz ‖ RAM 4Gb
4 Κάρτες γραφικών: NVidia GeForce GT 540M 1Gb

Personal blog - website
Άβαταρ μέλους
koslibpro
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 356
Εγγραφή: 12 Μάιος 2011, 16:37
Τοποθεσία: Piraeus
Εκτύπωση

Re: ελληνικοι χαρακτηρες σε Mysql μεσω PHP  Το θέμα επιλύθηκε

Δημοσίευσηαπό parenthesis » 04 Ιουν 2012, 18:49

Ίσως να πρέπει και κατά τη δημιουργία του εσωτερικού table της βάσης σου να ορίσεις ρητά ότι θες utf-8 και σε όλο το table και σε κάθε μεταβλητή που σε ενδιαφέρει (CREATE TABLE ... `name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ... ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci).

Τι να σου πω, αφού σου δούλεψε, δες τι διαφορετικό έχω κάνει εγώ και άλλαξέ το αντίστοιχα... ;)
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Πολύ καλό
2 Dual boot:
  • Ubuntu 13.04 raring 3.8.0-34-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic
  • Fedora 19 Schrödinger’s Cat 3.13.5-101.fc19.x86_64 64bit (el_GR.utf8, gnome)
3 Intel Core i5-3337U CPU @ 1.80GHz ‖ RAM 3844 MiB ‖ TOSHIBA VCUAA - TOSHIBA SATELLITE U940
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 eth0: Realtek RTL8101E/RTL8102E Ethernet [10ec:8136] (rev 05) ⋮ wlan0: Intel Centrino Wireless-N 2230 [8086:0887] (rev c4)
Άβαταρ μέλους
parenthesis
punkTUX
punkTUX
 
Δημοσιεύσεις: 150
Εγγραφή: 06 Οκτ 2009, 22:47
Launchpad: mara_sdr
Εκτύπωση

Re: ελληνικοι χαρακτηρες σε Mysql μεσω PHP

Δημοσίευσηαπό Αποστόλης » 04 Ιουν 2012, 20:26

collate και charset των tables της βάσης πρέπει να είναι utf8.
headers και metta charset επίσης.
π.χ. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Στα queries, όπως πολύ σωστά αναφέρθηκε, set names = utf8.

ΟΛΑ αυτά πρέπει να είναι utf8.
Γνώσεις ⇛ Linux:Μέτριο┃ Προγραμματισμός:Ναι ┃ Αγγλικά: Αρκετά Καλά
Λειτουργικό ⇛ Arch Linux 64bit ┃ Ubuntu Studio 10.4 64bit
Προδιαγραφές ⇛ HP Pavillion dv7 1199ev ┃ Intel 2 Core Duo T 9400, 2.53 Ghz ┃ 4GB ┃ NVIDIA GeForce 9600M GT ┃ Intel 82801I (ICH9 Family) HD Audio ┃ TFT 17" 1440x900
Αποστόλης
punkTUX
punkTUX
 
Δημοσιεύσεις: 170
Εγγραφή: 24 Ιουν 2009, 13:09
Εκτύπωση

Re: ελληνικοι χαρακτηρες σε Mysql μεσω PHP

Δημοσίευσηαπό Αποστόλης » 04 Ιουν 2012, 21:14

Λυπάμαι αλλά λόγω του γιού μου δεν πρόλαβα να συμπληρώσω προηγουμένως.
Το set names πάει μετά τα queries.
Επίσης μια συνηθισμένη πρακτική είναι να βρίσκεται μόνιμα μετά τη σύνδεση με τη βάση σε κάποιο file το οποίο κάνεις include/require
Δεν έχει νόημα να το βάζεις οπουδήποτε.
Στο σημείο που το έχεις δεν βοηθάει και πολύ.
Δες ενα παράδειγμα:
Κώδικας: Επιλογή όλων
public function Set_Connection($link,$db) {
$link = mysql_connect($this->host, $this->user, $this->pass) or die ("Η ΣΥΝΔΕΣΗ ΜΕ ΤΟΝ HOST ΑΠΕΤΥΧΕ.");
mysql_query("SET NAMES 'utf8' ") or die ("Η ΕΝΤΟΛΗ SET NAMES ΔΕΝ ΕΚΤΕΛΕΣΤΗΚΕ.");
$db = mysql_select_db ($this->database) or die ("Η ΣΥΝΔΕΣΗ ΜΕ ΤΗ ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ ΑΠΕΤΥΧΕ.");
}
Γνώσεις ⇛ Linux:Μέτριο┃ Προγραμματισμός:Ναι ┃ Αγγλικά: Αρκετά Καλά
Λειτουργικό ⇛ Arch Linux 64bit ┃ Ubuntu Studio 10.4 64bit
Προδιαγραφές ⇛ HP Pavillion dv7 1199ev ┃ Intel 2 Core Duo T 9400, 2.53 Ghz ┃ 4GB ┃ NVIDIA GeForce 9600M GT ┃ Intel 82801I (ICH9 Family) HD Audio ┃ TFT 17" 1440x900
Αποστόλης
punkTUX
punkTUX
 
Δημοσιεύσεις: 170
Εγγραφή: 24 Ιουν 2009, 13:09
Εκτύπωση

Re: ελληνικοι χαρακτηρες σε Mysql μεσω PHP

Δημοσίευσηαπό koslibpro » 05 Ιουν 2012, 09:52

Σας ευχαριστω πολυ παιδια,με κατατοπησατε αψογα!
Για την ιστορια,επρεπε κατα την δημιουργια της βασης να ορισω με σαφηνεια οτι θελω καθε πινακας να ειναι σε utf8.
Και φυσικα σε καθε συνδεση με την βαση,να γινεται set NAMES utf8 κτλπ.

Σας ευχαριστω και παλι!
Spoiler: show
1 Γνώσεις → Linux: Χαμηλό>Μεσαίο┃ Προγραμματισμός: PHP,C ┃ Αγγλικά: Proficiency
2 Λειτουργικό → Ubuntu 13.04 precise 32-bit (en_US.UTF-8)
3 Προδιαγραφές → CPU: i3-2310M 2.1Ghz ‖ RAM 4Gb
4 Κάρτες γραφικών: NVidia GeForce GT 540M 1Gb

Personal blog - website
Άβαταρ μέλους
koslibpro
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 356
Εγγραφή: 12 Μάιος 2011, 16:37
Τοποθεσία: Piraeus
Εκτύπωση

Re: ελληνικοι χαρακτηρες σε Mysql μεσω PHP

Δημοσίευσηαπό fuzzfree » 05 Ιούλ 2012, 15:48

και το ίδιο το αρχείο να είναι σε utf8 εάν έχει "καρφωτά" ελληνικά (όπως το δικό σου index.html).

Καλό είναι και στην αρχή του script (ή κάποιο include/bootstrap) να ορίζεις και την εσωτερική κωδικοποίηση για την php

Κώδικας: Επιλογή όλων
//set the internal encoding
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
mb_substitute_character('none');
fuzzfree
babeTUX
babeTUX
 
Δημοσιεύσεις: 4
Εγγραφή: 05 Ιούλ 2012, 14:53
Εκτύπωση

Επόμενο

  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

Επιστροφή στο Διακομιστές / Εξυπηρετητές