但是为什么采用变量传值的时候,中文就会出现乱码了呢?在上段代码稍作修改。
<?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的值,如果是中文的话,就会出现乱码,如果是英文,则是正常的,望高手解答
<?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的值,如果是中文的话,就会出现乱码,如果是英文,则是正常的,望高手解答
所以你用程序读取的时候,应该也是正常的,记得读取前要加上 mysql_query("SET NAMES GBK");
你在mysql看中文乱码,很有可能与你的建表语句和mysql默认编码有关.
你在mysql命令行下,查询前执行 SET NAMES GBK,然后再尝试select,我想应该是中文了吧.
我在mysql命令行里:set names gbk;
然后:select * from love2;
出现的还是乱码,在phpadmin里看到也是乱码
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的.
这样就一致了.
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方法提交后,不知道为什么就变成乱码了
html页面php页面用gbk.
数据库建表语句,也要统一用gbk.
如果这样还乱码,我就要跳楼喽!
而我在网页程序里则是采用的是:set names gbk;
charset="gb2312"
======================================================================================
为什么数据库要采用utf8-general-ci才行,但是我采用的是gbk编码。这样能插入数据进去,但是是乱码
如果改成set names utf8 再把charset="utf-8",则网页和数据库都是乱码
再一个你再数据库链接的时候用得面向对象的mysqli 为什么后来却用mysql 来设置使用的字符编码呢!应该是:mysqli_query('set names gbk')吧?
可以与db的不一样你看看show variables like 'char%'的结果 (插入时,读出时)
也不知道为什么,解决的办法是:让传递的变量名跟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>
刷新一次,就多插一个空白项
没想到一句
mysql_query(set names gbk);
摆放在代码中的位置,这么重要。
直接影响中文字符在数据库中是否是乱码,最后谢谢大家这两天的帮