前言
按照我之前教程一套搭建好LAMP服务器在写入中文时会出现一个问题就是乱码。现在就一起来看看这是什么情况,一起解决这个问题。当然这也将是你的第一网站。
MySQL 部分
1、首先在mysql命令控制台新建数据库
MariaDB [(none)]> create database test;
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> use test;
Database changed
MariaDB [test]> create table test_table(
-> id int(5) auto_increment primary key,
-> user char(10),
-> pass char(10),
-> text char(10),
-> sex char(1),
-> connect char(10));
Query OK, 0 rows affected (0.00 sec)
MariaDB [test]>
HTML和PHP部分
2、登录注册代码 index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<div>
<b>登录</b>
<form action="login.php" method="post">
<p><span>用户名:</span><input type="text" name="user" required="" /></p>
<p><span>密码:</span><input type="password" name="pass"/ required=""></p>
<p><input type="reset" name=""/> <input type="submit" name=""/></p>
</form>
<a href="register.html">新用户注册</a>
</div>
</body>
</html>
register.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<div>
<b>注册</b>
<form action="register.php" method="post">
<p><span>用户名:</span><input type="text" name="user" required=""/></p>
<p><span>密码:</span><input type="password" name="pass" required=""/></p>
<p><span>性别:</span>
<input type="radio" name="sex" checked="checked" value="男"/>男
<input type="radio" name="sex" value="女"/>女
</p>
<p><span>联系:</span><input type="text" name="connect" value="" required=""/></p>
<p><span>文本:</span><input type="text" name="text" required=""/></p>
<p>
<input type="reset" name=""/> <input type="submit" name=""/>
</p>
</form>
<a href="index.html">已注册</a>
</div>
</body>
</html>
login.php
<meta charset="utf-8">
<?php
$conn = mysqli_connect('localhost','root','','test') or die('数据库连接失败');
$conn->query("SET NAMES 'UTF8'");
$user = $_POST['user'];
$pass = $_POST['pass'];
$sql="SELECT * FROM test_table where user='$user' and pass='$pass'";
$rs=$conn->query($sql);
$row = $rs-> fetch_array();
if($row['user']==$user&& $row['pass']==$pass){
echo $row['user']."登陆成功!";
}
else{
echo"登录失败,请重新登录!";
}
?>
register.php
<?php
header ( "Content-type:text/html;charset=utf-8" );
$conn = mysqli_connect('localhost','root','','test') or die('数据库连接失败');
$conn->query("SET NAMES 'UTF8'");
$user = $_POST['user'];
$pass = $_POST['pass'];
$sex = $_POST['sex'];
$connect = $_POST['connect'];
$text = $_POST['text'];
$sql = "INSERT INTO test_table VALUES ('','{$user}' ,'{$pass}','{$text}','{$sex}' ,'{$connect}' )";
$result = $conn->query($sql);
echo("注册成功!!!<br/><a href='index.html'>点击登录</a>")
?>
3.测试网站 将写好的四个文件一起放入/var/www/html下,如图所示
然后再浏览器中输入公网Ip/index.html 就可以访问到你的网站了,我这里是配置了域名的,所以只需要把IP替换成域名即可,如图所示 点击新用户注册,点击提交,如图所示。
注册成功后,我们再回过头查看数据库中tes_table表中的数据插入成功没有。我们会发现一个问题。只要是插入中文都会成乱码。 怎么解决这个问题,我们查看数据库字符集发现
show variables like 'character%';
问题就出现在| character_set_database | latin1 | h和| character_set_server | latin1 |这里,接下来我们需要在/etc目录下找到my.cnf文件,用记事本打开。 一、在[client]字段里加入default-character-set=utf8,如下: 没有该字段就手动添加
[client]
default-character-set=utf8
二、在[mysqld]字段里加入character-set-server=utf8,如下:
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8
三、在[mysql]字段里加入default-character-set=utf8,如下:
[mysql]
no-auto-rehash
default-character-set=utf8
四、修改完成后,systemctl restart mariadb重启mariadb服务就生效。注意:[mysqld]字段与[mysql]字段是有区别的。这点在网上没人反馈过。 使用SHOW VARIABLES LIKE ‘character%’;查看,发现数据库编码全已改成utf8。 4、删除之前所建的库和表,在重新创建test库和test_table表,重新在网页上进行用户注册操作。 到这里,我们的第一个网站写完了。以后也可将要运行的HTML文件和PHP文件放/var/www/html根目录下,就可以实现远程访问了。
|