BsCyB Posted June 2, 2011 Posted June 2, 2011 έφτιαξα μία φόρμα στην όποια μέσω PHP καταχωρώ νέες εγγραφές σε μία βάση δεδομένων στην mysql αλλά όποτε καταχωρώ μέσω του site μια νέα εγγραφή με Ελληνικούς χαρακτήρες όπως βλέπετε στην mysql τους εμφανίζει με ερωτημάτικα αν και έχω αλλάξει την κωδικοποίηση στις PHP σελίδες σε UTF8 όπως έχω αλλάξει και την κωδικοποήση στην mysql σε UTF8 ξέρει κάνεις τι πρέπει να κάνω για να το διορθώσω? Quote
Blane Posted June 2, 2011 Posted June 2, 2011 Αν μπορείς δώσε μας τον κώδικα που που βάζεις κάθε καταχώρηση μέσα στην db. Quote
BsCyB Posted June 2, 2011 Author Posted June 2, 2011 ορίστε <?php $con=mysql_connect("localhost","developer","javalab"); if(!$con) { die('Δεν έγινε η σύνδεση με την βάση δεδομένων'.mysql_error()); } mysql_select_db("cycladestravel", $con); $sql="INSERT INTO travels(travel_id,travel_destination,travel_description,travel_price) VALUES ('$_POST[tID]','$_POST[tDestination]','$_POST[tDescription]','$_POST[tPrice]')"; mysql_set_charset('utf-8'); mysql_query("SET NAMES 'utf8';", $con); mysql_query("SET CHARACTER SET 'UTF8';", $con); if (!mysql_query($sql, $con)) { die('Σφάλμα: ' . mysql_error()); } echo " 1 εγγραφή καταχωρήθηκε "; mysql_close($con) ?> Quote
Blane Posted June 2, 2011 Posted June 2, 2011 Δοκίμασε όπως φτιάχνεις το table να το ορίσεις κάπως έτσι: CREATE TABLE IF NOT EXISTS `travels` ( `travel_id` int(11) NOT NULL auto_increment, `travel_destination` varchar(255) collate utf8_unicode_ci NOT NULL, `travel_description` varchar(255) collate utf8_unicode_ci NOT NULL, `travel_price` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; Είναι πολύ βασικό επίσης να έχεις βάλει τα σωστά charsets και στις σελίδες που προβάλλονται τα records. Quote
BsCyB Posted June 2, 2011 Author Posted June 2, 2011 Δοκίμασε όπως φτιάχνεις το table να το ορίσεις κάπως έτσι: CREATE TABLE IF NOT EXISTS `travels` ( `travel_id` int(11) NOT NULL auto_increment, `travel_destination` varchar(255) collate utf8_unicode_ci NOT NULL, `travel_description` varchar(255) collate utf8_unicode_ci NOT NULL, `travel_price` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; Είναι πολύ βασικό επίσης να έχεις βάλει τα σωστά charsets και στις σελίδες που προβάλλονται τα records. to dokimasa afto kai akoma to idio provlima iparxei kai epeisis oles i php selides exoun charset utf8 Quote
Blane Posted June 2, 2011 Posted June 2, 2011 Μόνο στην db έχεις το πρόβλημα με το πως εμφανίζονται, ή και στην ιστοσελίδα που προβάλλεις τα records; Quote
BsCyB Posted June 3, 2011 Author Posted June 3, 2011 στην σέλιδα που προβάλω τα records εμφανίζονται κανονικά εκτός βέβαια αυτά τα οποία στην mysql εμφανίζονται με ?? Quote
Hli4Snet Posted June 3, 2011 Posted June 3, 2011 στην σέλιδα που προβάλω τα records εμφανίζονται κανονικά εκτός βέβαια αυτά τα οποία στην mysql εμφανίζονται με ?? kita afou sta dixni stin selida mia xara logika kati pezei me to programa pou blepis tin db sou. Quote
Blane Posted June 3, 2011 Posted June 3, 2011 kita afou sta dixni stin selida mia xara logika kati pezei me to programa pou blepis tin db sou. Αυτό ακριβώς. Άμα κάνεις τη δουλειά σου στην ιστοσελίδα, είσαι gg. Quote
BsCyB Posted June 3, 2011 Author Posted June 3, 2011 Αυτό ακριβώς. Άμα κάνεις τη δουλειά σου στην ιστοσελίδα, είσαι gg. oxi den katalaves enow oses eggrafes exw kataxorisi me elinikous xaraktires stin db apo tin mysql tous emfanizei kanonika sto site alla an kanw kataxorisi apo to site me elinikous xaraktires tote kai stin mysql kai sto site tous emfanizei me erotimatika Quote
fdLP. Posted June 4, 2011 Posted June 4, 2011 μετα το connection με την database σου, βαλε mysql_query("SET NAMES UTF8"); οταν κανεις POST data στο column travel_description, απλα κανε escape το text μεσω του mysql_real_escape_string() οταν το εμφανιζεις, χρησιμοποιεισαι στο text για να διαβασει σε UTF-8 διαβασε περισσοτερο για to function αυτο στο php.net $text = htmlentities($text, ENT_COMPAT, 'UTF-8'); πρεπει παντα να χρησιμοποεις UTF8(MySQL) και UTF-8(Browser) encoding. επισης στο <head> tag βαλε <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> εαν εχεις και παλι προβλημα, reply. Quote
BsCyB Posted June 4, 2011 Author Posted June 4, 2011 evala to mysql_query("SET NAMES UTF8"); kai to <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> alla den exw idea pou na valw to $text = htmlentities($text, ENT_COMPAT, 'UTF-8'); kai pos na xrisimopoihso to mysql_real_escape_string() Quote
fdLP. Posted June 4, 2011 Posted June 4, 2011 εφοσον εχεις μια φορμα που κανεις POST στην database σου, οταν πατησεις το button της φορμας σου και πριν βαλεις τα data μεσω του mysql_query("INSERT INTO ...."); οτιδηποτε μεταβλητη θα την περνας μεσω του mysql_real_escape_string() π.χ $text = mysql_real_escape_string($text); // εαν βαλω π.χ '1' or '' θα το κανει escape => \'1\' or \'\' ετσι ωστε να αποφυγεις το SQL injection εαν θες να εμφανισεις κατι που ειναι se foreign characters, πρεπει να το τρεξεις μεσω του htmlentities($text, ENT_COMPAT, 'UTF-8') , ετσι ωστε να κανει encode ολους τους χαρακτηρες... εαν παλι εχεις προβλημα, ποσταρε το μερος του κωδικα που χρησιμοποιεις για αυτη την λειτουργια Quote
BsCyB Posted June 4, 2011 Author Posted June 4, 2011 επείδη δεν βλέπω να βγάζω άκρη :) <?php $con=mysql_connect("localhost","developer","javalab"); mysql_query("SET NAMES UTF8"); if(!$con) { die('Δεν έγινε η σύνδεση με την βάση δεδομένων'.mysql_error()); } mysql_select_db("cycladestravel", $con); $sql="INSERT INTO travels(travel_id,travel_destination,travel_description,travel_price) VALUES ('$_POST[tID]','$_POST[tDestination]','$_POST[tDescription]','$_POST[tPrice]')"; mysql_set_charset('utf-8'); mysql_query("SET NAMES 'utf8';", $con); mysql_query("SET CHARACTER SET 'UTF8';", $con); if (!mysql_query($sql, $con)) { die('Σφάλμα: ' . mysql_error()); } echo " 1 εγγραφή καταχωρήθηκε "; mysql_close($con) ?> Quote
fdLP. Posted June 4, 2011 Posted June 4, 2011 επείδη δεν βλέπω να βγάζω άκρη :) <?php $con=mysql_connect("localhost","developer","javalab"); mysql_query("SET NAMES UTF8"); if(!$con) { die('Δεν έγινε η σύνδεση με την βάση δεδομένων'.mysql_error()); } mysql_select_db("cycladestravel", $con); $sql="INSERT INTO travels(travel_id,travel_destination,travel_description,travel_price) VALUES ('$_POST[tID]','$_POST[tDestination]','$_POST[tDescription]','$_POST[tPrice]')"; mysql_set_charset('utf-8'); mysql_query("SET NAMES 'utf8';", $con); mysql_query("SET CHARACTER SET 'UTF8';", $con); if (!mysql_query($sql, $con)) { die('Σφάλμα: ' . mysql_error()); } echo " 1 εγγραφή καταχωρήθηκε "; mysql_close($con) ?> εφοσον δεν εμφανιζεις τιποτα αλλα κανεις post μονο, το htmlentities δεν το χρειαζεσαι. Δοκιμασε τον παρακατω κωδικα: <?php $con=mysql_connect("localhost","developer","javalab"); mysql_query("SET NAMES UTF8"); if(!$con) { die('Δεν έγινε η σύνδεση με την βάση δεδομένων'.mysql_error()); } mysql_select_db("cycladestravel", $con); $tID = $_POST["tID"]; $tDestination = $_POST["tDestination"]; $tDestination = mysql_real_escape_string($tDestination); $tDescription = $_POST["tDescription"]; $tDescription = mysql_real_escape_string($tDescription); $tPrice = $_POST["tPrice"]; $sql="INSERT INTO travels(travel_id,travel_destination,travel_description,travel_price) VALUES ('$tID','$tDestination','$tDescription','$tPrice')"; if (!mysql_query($sql, $con)) { die('Σφάλμα: ' . mysql_error()); } echo " 1 εγγραφή καταχωρήθηκε "; mysql_close($con) ?> επεισης , δες αν η database σου ειναι utf8_unicode_ci οπως και ολα τα tables σου, τα columns που εχουν κειμενο και οπως ειπα και να βαλεις και το meta tag <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> μετα το head tag. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.