php mysql 中文跟数据库对比不成功

2015-08-13 17:07:17 +08:00
 YAFEIML
用户名如果用中文,无法正常登陆成功,英文没有问题。
mysql内无乱码
<?php
//插入连接数据库的相关信息
require_once 'config.php';

//开启一个会话
if (!session_id()) session_start();

$error_msg = "";
//如果用户未登录,即未设置$_SESSION['user_id']时,执行以下代码
if(!isset($_SESSION['user_id'])){
if(isset($_POST['submit'])){//用户提交登录表单时执行如下代码
$dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
$user_username = mysqli_real_escape_string($dbc,trim($_POST['username']));
$user_password = mysqli_real_escape_string($dbc,trim($_POST['password']));

if(!empty($user_username)&&!empty($user_password)){
//MySql中的SHA()函数用于对字符串进行单向加密
$query = "SELECT id, name FROM admin_user WHERE name = '$user_username' AND "."pass = SHA('$user_password')";
//用用户名和密码进行查询
$data = mysqli_query($dbc,$query);
//若查到的记录正好为一条,则设置SESSION,同时进行页面重定向
if(mysqli_num_rows($data)==1){
$addlogin = "update admin_user set logincount = logincount+1 where name = '$user_username';";
$row = mysqli_fetch_array($data);
$_SESSION['user_id']=$row['id'];
$_SESSION['username']=$row['name'];
mysqli_query($dbc,$addlogin);
$home_url = 'index.php';
header('Location: '.$home_url);
}else{//若查到的记录不对,则设置错误信息
$error_msg = $user_username.', Sorry, you must enter a valid username and password to log in.';
}
}else{
$error_msg = $user_username.', Sorry, you must enter a valid username and password to log in.';
}
}
}else{//如果用户已经登录,则直接跳转到已经登录页面
$home_url = 'index.php';
header('Location: '.$home_url);
}
?>
2353 次点击
所在节点    问与答
16 条回复
PublicID
2015-08-13 17:16:46 +08:00
来玩Python
YAFEIML
2015-08-13 17:18:29 +08:00
@PublicID 那个入门太难了
feiyuanqiu
2015-08-13 17:25:59 +08:00
这东西还是你自己打断点调试最好

可以先把这个sql的内容打印出来看看
$query = "SELECT id, name FROM admin_user WHERE name = '$user_username' AND "."pass = SHA('$user_password')";
arnofeng
2015-08-13 17:27:38 +08:00
用框架
YAFEIML
2015-08-13 17:31:26 +08:00
@feiyuanqiu 行吧,我先试试

@arnofeng 基础太差,怕用框架走歪路。
qinxg
2015-08-13 17:41:34 +08:00
编码? 表字段是不是utf8呢? 不懂php 和mysql 乱说的。。
haiyang416
2015-08-13 17:44:01 +08:00
看了这些代码,再看楼主之前发的帖子,需要善意提醒一下,你的入门路走歪了。
既然刚入门,就不要学那些已经过时已久的代码了,推荐阅读 PHP the right way: http://ww.phptherightway.com
用 PDO 代替 mysqli,使用 prepare 代替手动拼接查询语句。
至于你发的代码,你可以设断点调试一下,确认最后拼接的查询语句是否正确,最简单的方式是将生成的语句打印出来,
放数据库里跑一次。
haiyang416
2015-08-13 17:48:36 +08:00
如果查询语句没有错误,可以查看下数据库中的数据是否正常。
mumu
2015-08-13 17:53:15 +08:00
mysql_query("SET NAMES utf8");用它试试
arnofeng
2015-08-13 21:47:14 +08:00
@YAFEIML 推荐入门用CI框架,官网有视频。一周入门,上手快。
yangqi
2015-08-13 21:59:15 +08:00
别想了,多半是编码问题
zhs227
2015-08-13 22:12:58 +08:00
把SQL打出来看看,再把SQL放到数据库里跑一下就明白了。八成是编码问题。另外,教程确实太老了
YAFEIML
2015-08-14 07:31:25 +08:00
@haiyang416 好的,这个非常好,正在学习。
@arnofeng 学习框架的话会不会相当于学习另外一种东西?我是说在不了解PHP的情况下会不会走歪?
arnofeng
2015-08-14 07:41:50 +08:00
@YAFEIML 两种,先学了框架,再去看php资料。或者先阅读资料,再用框架。不过最终,你还是要用框架的。
YAFEIML
2015-08-14 08:54:08 +08:00
@arnofeng 框架没有局限性吗?不会适用任何项目吧?所以说得掌握很多个框架喽?
arnofeng
2015-08-14 11:28:02 +08:00
@YAFEIML 几乎没有啊。因为在里面你也能不用它的库写东西,你可以用其中一小部分你用的顺手的,其他的你自己写就是了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/212995

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX