php mysql用户登录显示用户存在
Posted
技术标签:
【中文标题】php mysql用户登录显示用户存在【英文标题】:php mysql user login show user exists 【发布时间】:2013-07-17 09:39:48 【问题描述】:我正在阅读有关在 php 和 mysql 中创建用户注册和登录表单的 vid 教程。
以下脚本应在 login.php 表单上回显“存在”,但仅显示空白(表示用户不存在,但实际上是数据库上唯一的用户名)
<?php
function user_exists($username)
$username = sanitize($username);
$query = mysql_query("SELECT * FROM `users` WHERE `username` = '$username'");
return (mysql_result($query, 0) == 1) ? true : false;
?>
登录表单部分代码如下:
if (user_exists('andy') === true)
echo 'exists';
die();
我是否遗漏了一些语法或一些明显的东西?如果有帮助,这里是 vid 教程的链接http://www.youtube.com/watch?v=Til3oVNlho4
【问题讨论】:
你的操作系统是什么?您的空白屏幕 - 上面有任何信息吗?也许您没有打开数据库连接。您的页面上还有其他代码吗? 该系列教程包含很多不好的做法:从使用过时的函数(如 mysql_query)到使用 md5 进行密码散列的易受攻击的概念,等等。如果你想做正确的事,那么我建议阅读一本好的书。 如果您在 mysql 工具中而不是在 web 上使用 php 单独运行查询会发生什么? Please, don't usemysql_*
functions in new code。它们不再维护and are officially deprecated。看到warning?改为了解prepared statements,并使用PDO 或MySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial.
@tereško 有趣的是你应该这么说。您提供 OP 的教程的链接也是 mysql_
,而不是 mysqli
,那么为什么要让 OP 保持在同一轨道上呢? ;)
【参考方案1】:
如果您有一个空白屏幕,最好添加回显语句以查看发生了什么。
function user_exists($username) echo '|Input Username=$username ';
$username = sanitize($username); echo '|Sanitized=$username ';
$query = mysql_query("SELECT * FROM `users` WHERE `username` = '$username'");
echo '|output any mysql_error '.mysql_error();
$numberOfRows = mysql_num_rows($query); echo '|Number of Rows=$numberOfRows ';
$hasRows = ($numberOfRows > 0); echo '|Has rows=$hasRows ';
//used explicit parentheses around logic for clarity...and again next line
$exists = ($hasRows) ? 1 :0;
//or just do this...
$exists = $hasRows;
return $exists;
【讨论】:
嗯,这就是登录页面上的 echo 'exists' 语句的用途,这就是正在空白的屏幕.. 这需要返回true,上面的目的是找出为什么它没有。另一个想法是使用 == 而不是 === 这是“身份”。 true 是原生的,而 user_exists() 是一个对象。他们可能都 ==true 但只有 true===true。 抱歉,我明白你的意思了,我试试看!如果这不起作用我将不得不交换教程,似乎没有办法解决它! 你成功了吗?在视频中,他从 user_exists() 返回一个不同于整数 1 或 0 的布尔值。对于 1===true,这将是错误的,因为类型不匹配。【参考方案2】:为什么不这样做呢?
<?php
function user_exists($username)
$username = sanitize($username);
$query = mysql_query("SELECT * FROM `users` WHERE `username` = '$username'");
$exists = mysql_num_rows($query) == 1 ? 1 :0;
return $exists;
?>
【讨论】:
我知道你在这里得到了什么,但我认为这个想法是用第二页上的第二个脚本测试数据库连接和功能..以上是关于php mysql用户登录显示用户存在的主要内容,如果未能解决你的问题,请参考以下文章