Jump to content

[GR][Ηelp] PHP kai mysql


BsCyB

Recommended Posts

έφτιαξα μία φόρμα στην όποια μέσω PHP καταχωρώ νέες εγγραφές σε μία βάση δεδομένων στην mysql

 

unledyi.png

 

αλλά όποτε καταχωρώ μέσω του site μια νέα εγγραφή με Ελληνικούς χαρακτήρες όπως βλέπετε στην mysql τους εμφανίζει με ερωτημάτικα αν και έχω αλλάξει την κωδικοποίηση στις PHP σελίδες σε UTF8 όπως έχω αλλάξει και την κωδικοποήση στην mysql σε UTF8

 

ξέρει κάνεις τι πρέπει να κάνω για να το διορθώσω?

Link to comment
Share on other sites

ορίστε

 

<?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)

?>

Link to comment
Share on other sites

Δοκίμασε όπως φτιάχνεις το 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.

Link to comment
Share on other sites

Δοκίμασε όπως φτιάχνεις το 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

Link to comment
Share on other sites

Μόνο στην db έχεις το πρόβλημα με το πως εμφανίζονται, ή και στην ιστοσελίδα που προβάλλεις τα records;

Link to comment
Share on other sites

στην σέλιδα που προβάλω τα records εμφανίζονται κανονικά εκτός βέβαια αυτά τα οποία στην mysql εμφανίζονται με ??

Link to comment
Share on other sites

στην σέλιδα που προβάλω τα records εμφανίζονται κανονικά εκτός βέβαια αυτά τα οποία στην mysql εμφανίζονται με ??

 

kita afou sta dixni stin selida mia xara logika kati pezei me to programa pou blepis tin db sou.

 

Link to comment
Share on other sites

kita afou sta dixni stin selida mia xara logika kati pezei me to programa pou blepis tin db sou.

 

 

Αυτό ακριβώς. Άμα κάνεις τη δουλειά σου στην ιστοσελίδα, είσαι gg.

Link to comment
Share on other sites

Αυτό ακριβώς. Άμα κάνεις τη δουλειά σου στην ιστοσελίδα, είσαι 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

Link to comment
Share on other sites

μετα το 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.

Link to comment
Share on other sites

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()

Link to comment
Share on other sites

εφοσον εχεις μια φορμα που κανεις 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 ολους τους χαρακτηρες...

 

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

Link to comment
Share on other sites

επείδη δεν βλέπω να βγάζω άκρη :)

 

 

<?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)

?>

Link to comment
Share on other sites

επείδη δεν βλέπω να βγάζω άκρη :)

 

 

<?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.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now


×
×
  • Create New...