| Autor | Zpráva | ||
|---|---|---|---|
| vodys Profil * |
#1 · Zasláno: 6. 2. 2014, 18:20:04
Zdravím, potýkám se s problémem.
Na svých webových stránkách mám nastavený charset windows-1250. Jedná se o statické stránky, nejsou propojené s databází. Ale nyní jsem si přidal komentáře na stránku, když vepíšu komentář, zobrazí se jak má, ale po aktualizaci stránky se z diakritiky stane jen ÄÄÅ¡ÄÅ¡ÄÄÅ¡Ä .. Přikládám kód, který mám na komentáře a prosím o určení chyby, nebo radu na jaký jazyk mám nastavit výstup z DB, aby se vše zobrazovalo jak má. add-comment.php <?php
extract($_POST);
if($_POST['act'] == 'add-com'):
$name = htmlentities($name, ENT_QUOTES, 'UTF-8');
$email = htmlentities($email, ENT_QUOTES, 'UTF-8');
$comment = htmlentities($comment, ENT_QUOTES, 'UTF-8');
// Connect to the database
include('../config.php');
// Get gravatar Image
// https://fr.gravatar.com/site/implement/images/php/
$default = "mm";
$size = 35;
$grav_url = "http://www.gravatar.com/avatar/" . md5( strtolower( trim( $email ) ) ) . "?d=" . $default . "&s=" . $size;
if(strlen($name) <= '1'){ $name = 'Guest';}
//insert the comment in the database
mysql_query("INSERT INTO comments (name, email, comment, id_post)VALUES( '$name', '$email', '$comment', '$id_post')");
if(!mysql_errno()){
?>
<div class="cmt-cnt">
<img src="<?php echo $grav_url; ?>" alt="" />
<div class="thecom">
<h5><?php echo $name; ?></h5><span class="com-dt"><?php echo date('d-m-Y H:i'); ?></span>
<br/>
<p><?php echo $comment; ?></p>
</div>
</div><!-- end "cmt-cnt" -->
<?php } ?>
<?php endif; ?>index.php <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<?php
// Connect to the database
include('kom/config.php');
$id_post = "1"; //the post or the page id
?>
<div class="cmt-container" >
<?php
$sql = mysql_query("SELECT * FROM comments WHERE id_post = '$id_post'") or die(mysql_error());;
while($affcom = mysql_fetch_assoc($sql)){
$name = $affcom['name'];
$email = $affcom['email'];
$comment = $affcom['comment'];
$date = $affcom['date'];
// Get gravatar Image
// https://fr.gravatar.com/site/implement/images/php/
$default = "mm";
$size = 35;
$grav_url = "http://www.gravatar.com/avatar/".md5(strtolower(trim($email)))."?d=".$default."&s=".$size;
?>
<div class="cmt-cnt">
<img src="<?php echo $grav_url; ?>" />
<div class="thecom">
<h5><?php echo $name; ?></h5><span data-utime="1371248446" class="com-dt"><?php echo $date; ?></span>
<br/>
<p>
<?php echo $comment; ?>
</p>
</div>
</div><!-- end "cmt-cnt" -->
<?php } ?>
<div class="new-com-bt">
<span>Napište komentář ...</span>
</div>
<div class="new-com-cnt">
<input type="text" id="name-com" name="name-com" value="" placeholder="Jméno" />
<input type="text" id="mail-com" name="mail-com" value="" placeholder="Váš email" />
<textarea class="the-new-com"></textarea>
<div class="bt-add-com">ODESLAT</div>
<div class="bt-cancel-com">zrušit</div>
</div>
<div class="clear"></div>
</div><!-- end of comments container "cmt-container" -->
<script type="text/javascript">
$(function(){
//alert(event.timeStamp);
$('.new-com-bt').click(function(event){
$(this).hide();
$('.new-com-cnt').show();
$('#name-com').focus();
});
/* when start writing the comment activate the "add" button */
$('.the-new-com').bind('input propertychange', function() {
$(".bt-add-com").css({opacity:0.6});
var checklength = $(this).val().length;
if(checklength){ $(".bt-add-com").css({opacity:1}); }
});
/* on clic on the cancel button */
$('.bt-cancel-com').click(function(){
$('.the-new-com').val('');
$('.new-com-cnt').fadeOut('fast', function(){
$('.new-com-bt').fadeIn('fast');
});
});
// on post comment click
$('.bt-add-com').click(function(){
var theCom = $('.the-new-com');
var theName = $('#name-com');
var theMail = $('#mail-com');
if( !theCom.val()){
alert('You need to write a comment!');
}else{
$.ajax({
type: "POST",
url: "kom/ajax/add-comment.php",
data: 'act=add-com&id_post='+<?php echo $id_post; ?>+'&name='+theName.val()+'&email='+theMail.val()+'&comment='+theCom.val(),
success: function(html){
theCom.val('');
theMail.val('');
theName.val('');
$('.new-com-cnt').hide('fast', function(){
$('.new-com-bt').show('fast');
$('.new-com-bt').before(html);
})
}
});
}
});
});
</script>table.sql CREATE TABLE IF NOT EXISTS `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(40) NOT NULL, `email` varchar(60) NOT NULL, `comment` text NOT NULL, `id_post` int(11) NOT NULL, `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ); Nejlépe poprosím o radu co, kam přidat, aby to fungovalo jak má. Děkuji |
||
| Kajman Profil |
V souboru config.php máte nejspíše připojení do databáze. Hned po připojení tam volejte
mysql_query("SET NAMES cp1250")A v tom add-comment.php si opravte řádky 3-5 $name = mysql_real_escape_string(htmlentities($name, ENT_QUOTES, 'UTF-8')); $email = mysql_real_escape_string(htmlentities($email, ENT_QUOTES, 'UTF-8')); $comment = mysql_real_escape_string(htmlentities($comment, ENT_QUOTES, 'UTF-8')); |
||
| Doby92 Profil * |
#3 · Zasláno: 6. 2. 2014, 21:06:29
vodys:
Není divu když máš nastaveno v hlavičce windows-1250 a v databázi a v kódu zas jiné kódování. Zkus nastavit vše na stejné kódování. |
||
| Kajman Profil |
#4 · Zasláno: 6. 2. 2014, 21:10:19
Doby92:
Pokud je kódování stránek podmnožinou kódování pro ukládání v databázi, tak to bude fungovat také - jen se přes set names musí mysql říct kódování použité pro komunikaci. Při sjednocení se ale ušetří nutnost konverze. |
||
| vodys Profil * |
#5 · Zasláno: 7. 2. 2014, 10:25:45
Warning: mysql_real_escape_string(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /DISK2/WWW/beta/kom/ajax/add-comment.php on line 4 Warning: mysql_real_escape_string(): A link to the server could not be established in /DISK2/WWW/beta/kom/ajax/add-comment.php on line 4 Warning: mysql_real_escape_string(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /DISK2/WWW/beta/kom/ajax/add-comment.php on line 5 Warning: mysql_real_escape_string(): A link to the server could not be established in /DISK2/WWW/beta/kom/ajax/add-comment.php on line 5 Warning: mysql_real_escape_string(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /DISK2/WWW/beta/kom/ajax/add-comment.php on line 6 Warning: mysql_real_escape_string(): A link to the server could not be established in /DISK2/WWW/beta/kom/ajax/add-comment.php on line 6 |
||
| Kajman Profil |
#6 · Zasláno: 7. 2. 2014, 11:18:22
vodys:
Ještě je potřeba přehodit řádky. Tedy mysql_real_escape_string používat až po připojení databáze vykonané includem souboru config.php. |
||
| vodys Profil * |
#7 · Zasláno: 7. 2. 2014, 11:52:45 · Upravil/a: vodys
Opravil jsem, vepíše se správně na stránku, ale po aktualizaci se opět z DB vypíše špatná diakritika..
"ÄšĹ" ačkoliv jsem v configu nastavil kódování pro výstup z db. <?php
$mysql_host = "sql18.pipni.cz";
$mysql_database = "comment_sys"; //create the database called "comment_sys"
$mysql_user = "****";
$mysql_password = "****";
mysql_connect($mysql_host,$mysql_user,$mysql_password);
mysql_select_db($mysql_database);
mysql_query("SET NAMES cp1250");
?>První malý úspěch je, že se z databáze strávně vypisují písmena "šýáíé" .. další jako je "ěčřž" to vypisuje špatně.. |
||
| Kajman Profil |
#8 · Zasláno: 7. 2. 2014, 13:35:01
Jaké porovnání máte u sloupců tabulky comments? Když se podívate adminerem na data v ní, tak jsou v pořádku?
Také by problémy mohly nastat tím, že voláte htmlentities, říkáte mu, že jsou data v UTF-8, ale jsou ve windows-1250 kódování. |
||
| vodys Profil * |
#9 · Zasláno: 7. 2. 2014, 14:44:26
U výstupů $name $comment $email mám porovnání cp1250_general_ci
Já sice volám htmlentities v UTF-8, ale SET NAMES mám nastavené pro výstup ve win1250 |
||
|
Časová prodleva: 12 let
|
|||
0