但是为什么采用变量传值的时候,中文就会出现乱码了呢?在上段代码稍作修改。
<?php
$id=$_POST['id'];
$address=$_POST['address'];if(!empty($id))
{
$db=@new mysqli("localhost","root","44803815","test");
    if(mysqli_connect_errno())
    {
     echo("连接数据库失败!");
        echo mysqli_connect_errno();
        exit;
    }    else
    {
     echo("ok");
        echo("<br>");
    }    mysql_query("SET NAMES GBK");//别人提醒要注意的地方
    $sql="INSERT INTO love2(id,address)VALUES ('$id', '$address')";    $rs=$db->query($sql);
    if(!$rs)
    {
     $db->close();
        echo("数据记录插入失败!");
        exit;
    }
    else
    {
     echo("<font color='red' size='5'>恭喜您注册成功</font><br>\n");
        $db->close();
    }?>
<html><head>
  <meta http-equiv="Content-Type" content="text/html;charset=gb2132" >
  <title>registering form</title>
</head><body>
<?php
if(!empty($id))
    {
echo ("你填写的信息是:<br>\n");
    echo ("ID:$id<br>\n");
    echo ("address:$address<br>\n");
    }}
?>
<form name="frmRegister" method="post" action="22.php">
<table width="330" border="0" align="center" cellpadding="5" bgcolor="#eeeeee">
<tr>
      <td width="40%">ID:</td>
      <td><input name="id" type="text" id="id"></td>
    </tr>
    <tr>
      <td>address:</td>
      <td><input name="address" type="text" id="address"></td>
    </tr>
    <tr>
      <td colspan="2" align="center">
        <input type="submit" name="submit" value="提交" >
        <input type="reset" name="reset" value="重置">
    </tr>
</table></body></html>
=========================================================================================
最后在mysql中查看address的值,如果是中文的话,就会出现乱码,如果是英文,则是正常的,望高手解答

解决方案 »

  1.   

    你只保证了数据在插入时候的编码.
    所以你用程序读取的时候,应该也是正常的,记得读取前要加上   mysql_query("SET NAMES GBK");
    你在mysql看中文乱码,很有可能与你的建表语句和mysql默认编码有关.
    你在mysql命令行下,查询前执行 SET NAMES GBK,然后再尝试select,我想应该是中文了吧.
      

  2.   

    楼上的,采用你的方法:
    我在mysql命令行里:set names gbk;
    然后:select * from love2;
    出现的还是乱码,在phpadmin里看到也是乱码
      

  3.   


    CREATE TABLE `test` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `name` VARCHAR( 255 ) NOT NULL ,
    `description` VARCHAR( 255 ) NOT NULL 
    ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_bin;看上面的sql语句.这是标准的sql.
    另外,在生成完的表结构在phpmyadmin里,会看到name和description这两个字段的整理哪行也是utf8的.
    这样就一致了.
      

  4.   

    楼上的,如果我在mysql命令行里输入:
    set names utf8
    这样,从mysql本身里输入的中文内容都变成乱码了。
    而改为:set names GBK;
    则内容又恢复正常了
    ============================================================
    <?php 
    $id=10;
    $name="黄非红";
    echo(" <b>向mysql数据库中插入数据 </b>"); 
    $sqlcon=mysql_connect("localhost","root","44803815"); 
    mysql_select_db("test",$sqlcon); 
    mysql_query("SET NAMES GBK"); 
    $strsql="insert into love2(id,address) values('$id','name')"; 
    $result=mysql_query($strsql,$sqlcon); 
    echo(" <br>"); 
    if($result) 

    echo("ok"); 

    else 

    echo("no ok"); 

    mysql_close($sqlcon); ?> 
    ============================================================
    如果做上面这种简单的变量替换,输入的中文依然是正常的,但是经过POST方法提交后,不知道为什么就变成乱码了
      

  5.   

    总之保持一致就好了,要么都用gbk,要么都用utf8,否则的话你就需要自己实时处理了. 
      

  6.   

    我统一采用GBK,为什么还不行,救救我吧
      

  7.   

    都用gbk,你的建表语句和连接都用gbk了吗?保持一致,注意,是这样的.
    html页面php页面用gbk.
    数据库建表语句,也要统一用gbk.
    如果这样还乱码,我就要跳楼喽!
      

  8.   

    遇到怪事了,在mysql数据库中,只能把表格属性设置成utf8-general-ci才能从网页里提交进数据,一摸一样的程序,如果设置成gbk或者gb2312则不行。
    而我在网页程序里则是采用的是:set names gbk;
    charset="gb2312"
    ======================================================================================
    为什么数据库要采用utf8-general-ci才行,但是我采用的是gbk编码。这样能插入数据进去,但是是乱码
    如果改成set names utf8  再把charset="utf-8",则网页和数据库都是乱码
      

  9.   

    首先你应该在数据库查询之前使用mysql_query('set names gbk');
    再一个你再数据库链接的时候用得面向对象的mysqli 为什么后来却用mysql 来设置使用的字符编码呢!应该是:mysqli_query('set names gbk')吧?
      

  10.   

    页面meta 与 set names的必须一样,
    可以与db的不一样你看看show variables like 'char%'的结果 (插入时,读出时)
      

  11.   

    现在问题是解决了,跟各位说的没关系,不过还是谢谢大家了。
    也不知道为什么,解决的办法是:让传递的变量名跟mysql数据库中的字段名不一样,就ok了。
    ===================================================================================================
    <html><head>
    <meta http-equiv="Content-Type" content="text/html;charset=gb2132" >
      <title>向mysql数据库中插入数据</title></head><body><?php
    $fx=$_POST['fx'];
    $name=$_POST['name'];
    echo("<b>向mysql数据库中插入数据</b>");
    $sqlcon=mysql_connect("localhost","root","44803815");
    mysql_select_db("test",$sqlcon);
    mysql_query("SET NAMES GBK");
    $strsql="insert into love2(id,address) values('$fx','$name')";
    $result=mysql_query($strsql,$sqlcon);
    if($result)
    {
    echo("ok");
    }
    else
    {
    echo("no ok");
    }
    mysql_close($sqlcon);?>
     <form name="frmRegister" method="post" action="22.php">
    <table width="330" border="0" align="center" cellpadding="5" bgcolor="#eeeeee">
        <tr>
          <td>ID:</td>
          <td><input name="fx" type="text" id="fx"></td>
        </tr>
        <tr>
          <td>address:</td>
          <td><input name="name" type="text" id="name"></td>
        </tr>
            <input type="submit" name="submit" value="提交" >
            <input type="reset" name="reset" value="重置">
        </tr>
    </table>
    </body></html>
      

  12.   

    新的问题又出现了,就是每次输入一个数据,mysql表中,又多插了一个空白项!
    刷新一次,就多插一个空白项
      

  13.   

    终于彻底解决了中文字符乱码的问题:
    没想到一句
    mysql_query(set names gbk);
    摆放在代码中的位置,这么重要。
    直接影响中文字符在数据库中是否是乱码,最后谢谢大家这两天的帮