38 1234
发新话题
打印

[已解决] 为什么就是无法验证用户?sql函数没用好

为什么就是无法验证用户?sql函数没用好

复制PHP内容到剪贴板
PHP代码:
if($username && $password)
    {
    
$db=new DB;
    
$db->connect(HOST,USER,PASS);
    
$db->select_db(DBNAME);
    echo 
"处理后的NAME".$username;
    echo 
"<br>处理后的密码".$password;
    
$sql"SELECT * FROM reg WHERE user = '$username' AND pwd = '$password'";
    
$Result=$db->num_rows($sql);
    
var_dump($Result);
    if (
$Result)
    {    
//如果有符合的行数返回,那么就把变量注册到session
        
session_register('username');
        
session_register('password');
        
$_SESSION['isuser']=1;
        echo 
".";
        } else {
    
ShowMsg("登录失败,请确认你的用户名、密码输入是正确的","javascript:history.go(-1)");
    exit();
    }


直接执行SQL语句没有问题,POST也传过来并显示了.
问题就处在 $Result=$db->num_rows($sql);
函数为

    function num_rows($sql) {
        $query = $this->query($sql);
        $rs =& mysql_num_rows($query);      //取得结果集中行的数目
        return $rs;
    }

我用var_dump的结果是int(0),请问我究竟该用什么函数?来实现我这个效果呢?


然后这是我故意打错的,这样我的类才会根据错误输出到页面上给大家看.
大家可以看到SQL语句已经变成了POST值的字符串.这样可以告诉一些朋友认为我POST没有传到该页面.

然后是正确SQL语句$sql= "SELECT * FROM reg WHERE user = '$username' AND pwd = '$password'  LIMIT 0 , 1";的运行结果.

注意那个int(0)是var_dump的输出

已解决~
不过如果你能够不看最后一楼我的回帖而找出原因,那你自我就错能力也不错了!

其实我是给忘了...


[ 本帖最后由 konakona 于 2008-8-20 20:58 编辑 ]
卖帽子咯!http://shop34406169.taobao.com
不管你是菜鸟还是高手,有问题,大家一起讨论。懂,就一定会帮!
群25229487

TOP

对啊,绝对等于0不就行了,表示没有这条记录,用户就可以注册啊
$num = mysql_num_rows($result)
if ($num ==0 )
{
    可以注册
}
现在我还是菜鸟呢,什么时候才可以变成大鸟啊。。。
哎,要我怎么说?
都不看题的?


我首先注册了一个用户,资料被记录在数据库里了.

然后在phpmyadmin里SELECT * FROM reg WHERE user = '测试' AND pwd = 'ceshi'
执行后能会显示出一条记录.


sql部分是完全无误的.
然后我怀疑传值部分,也测试了.能显示值.

最后我var_dump$result,结果是int(0)
奇怪吧,估计是函数没用对.请高手解答.
硬要我说到这份上?上面已经够清楚了吧...为什么回答的总以为我会漏过这种细节呢- -||哎

[ 本帖最后由 konakona 于 2008-8-15 22:24 编辑 ]
卖帽子咯!http://shop34406169.taobao.com
不管你是菜鸟还是高手,有问题,大家一起讨论。懂,就一定会帮!
群25229487

TOP

$sql= "SELECT * FROM reg WHERE user = $username AND pwd = $password";

把单引号去掉看看,好像记得在哪里说过,变量放在单引号里面就按照字符串来处理

TOP

不好意思, 凡是类.我都看不懂..
PHP开发群: 36954311  欢迎大家参与,讨论PHP
菜鸟学会PHP最快而且有效的方法: 先飞!
模板引擎 PHPnew 5.0 (简约,快速)

q

引用:
原帖由 彪形大汉 于 2008-8-15 22:42 发表
$sql= "SELECT * FROM reg WHERE user = $username AND pwd = $password";

把单引号去掉看看,好像记得在哪里说过,变量放在单引号里面就按照字符串来处理
你是指

sql="'.变量.'"            //这个的格式???还是指什么?????????????

而且我要输入进数据库进行查询的本来就是字符串

我在phpmyadmin里测试时,用的sql语句就是加了引号的,而且查处来了.你们也没有看题???

我注册用户用的就是主楼那种sql语法.就一个单引号.写入成功.(主楼是用户登陆的验证)
没有问题,sql语句完全没有任何问题我不想再重复啦兄弟们- -||不要把我跟那种不自己测试就胡乱问问题的人分一类去.

我已经把所有问题都排除了,就是函数有问题.帮忙看下啦~~~~~~~~~

[ 本帖最后由 konakona 于 2008-8-16 00:21 编辑 ]
卖帽子咯!http://shop34406169.taobao.com
不管你是菜鸟还是高手,有问题,大家一起讨论。懂,就一定会帮!
群25229487

TOP

引用:
原帖由 于安 于 2008-8-15 22:46 发表
不好意思, 凡是类.我都看不懂..
这没什么难度的
卖帽子咯!http://shop34406169.taobao.com
不管你是菜鸟还是高手,有问题,大家一起讨论。懂,就一定会帮!
群25229487

TOP

看了你的程序,小提几点看法,没有冒犯的意思,
1,不知道你的类怎么写的,为什么不把connect,和mysql_select_db放在一起呢
$db = new Db( $user,$pass,$dbname,$host );
继而set names 'utf8';
2,sql
注册用户唯一,你的sql最好加上 ' limit 0,1';找到就终止.省得浪费时间,最好不要select *
3session_register
手册上If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled
4num_rows
在你query的时候,就将查询数量读出来,这样岂不更好,num_rows直接读出值,
//其它的不说了
引用:
原帖由 clearchen 于 2008-8-16 01:19 发表
看了你的程序,小提几点看法,没有冒犯的意思,
1,不知道你的类怎么写的,为什么不把connect,和mysql_select_db放在一起呢
$db = new Db( $user,$pass,$dbname,$host );
继而set names 'utf8';
2,sql
注册用户唯一, ...
那个类是别人写的我只是拿来用而已
其实我直接用myssqli都可以.

第二点
SELECT  FROM reg WHERE user = '$username' AND pwd = '$password'  LIMIT 0 , 1
会报错误.
SELECT * FROM reg WHERE user = '$username' AND pwd = '$password'  LIMIT 0 , 1
SELECT * FROM reg WHERE user = '$username' AND pwd = '$password'
数据库里只可能有一笔符合要求的资料,因为是注册唯一的用户.
LIMIT 0 , 1到底在这样的情况上能减少多少服务器负担?

第三点
毕竟query返回的东西只是个result结果集.

[ 本帖最后由 konakona 于 2008-8-18 16:09 编辑 ]
卖帽子咯!http://shop34406169.taobao.com
不管你是菜鸟还是高手,有问题,大家一起讨论。懂,就一定会帮!
群25229487

TOP

复制PHP内容到剪贴板
PHP代码:
function num_rows($sql) {
     return 
mysql_num_rows($this->query($sql));      //取得结果集中行的数目
}

TOP

 38 1234
发新话题