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: 11 let
|
0