我的SQL语句都是用PHPMYADMIN帮我生成的,不知道为什么我在PHPMYADMIN里面运行可以得到正确的结果,但是用PHP的mysql_query()运行结果就不对,请教。
执行插入语句是对的,就是执行语句不对,每次结果都是false。
以下是我的代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>注册页面</title>
</head><body>
<?php
if(isset($_POST['username'])&&isset($_POST['password'])&&isset($_POST['password2']))
{
@$db=mysqli_connect('localhost','root','') or die('无法连接到数据库&nbsp;<a href="'.$_SERVER['PHP_SELF'].'">返回</a>');
$username=trim($_POST['username']);
$password=trim($_POST['password']);
$password2=trim($_POST['password2']);
$sql = 'SELECT `username` as name FROM `user` WHERE `username` ='.$username;
$result=@mysql_query($sql);
if($result)
{
echo '<h2 class="warn">用户名已经存在</h2>';
}
else
{
if($password!=$password2)
{
echo '<h2 class="warn">两次输入的密码不一致</h2>';
}
else
{
$sql = 'INSERT INTO `userdata`.`user` (`username`, `password`, `registerdata`, `lastland`, `landtimes`) VALUES ('.$username.', SHA1('.$password.'), NOW(), NOW(), \'1\')'; 
if($db->query($sql))
{
echo '<h2 class="msg">注册成功</h2>';
}
}
}
}
else
{
?>
<h1 align="center">注册</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table border="1" align="center">
<tr><td>用户名:</td><td><input name='username' type="text" maxlength="15" /></td></tr>
<tr><td>密码:</td><td><input name='password' type="password" maxlength="15" /></td></tr>
<tr><td>确认密码:</td><td><input name='password2' type="password" maxlength="15" /></td></tr>
<tr><td><input type="submit" value="注册" /></td><td align="center"><input type="reset" value="重设" /></td></tr>
</table>
</form>
<?php
}
?>
</body>
</html>

解决方案 »

  1.   


    //SQL 语句出错
    $sql = 'SELECT `username` as name FROM `user` WHERE `username` ="'.$username.'"';
      

  2.   

    假如我输入一个新的账户可以正确注册,但是如果我输入一个已经存在的账户,并不能告诉我“已经有了这个用户”。
    另外我还有一个登录界面也是,只要你输入了密码,不管对不对都能成功登陆进去,为什么啊?
    代码是这样的<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>验证登陆</title>
    </head>
    <body>
    <?php
    if(!isset($_POST['name'])||!isset($_POST['password']))
    echo '<h1 align="center">你并没有填写资料!</h1>';
    else 
    {
    $name=$_POST['name'];
    $password=$_POST['password'];
    $db=mysqli_connect('localhost','root','') or die('无法连接到数据库');
    $db->select_db('userdata') or die('无法链接到数据表');
    $sql='SELECT * FROM `user` WHERE `username` = '.$name.' AND `password` = sha1('.$password.')';
    $result=$db->query($sql);
    $row=mysql_fetch_row($result);
    print_r($row);
    if(!$result)
    {
    echo '用户名不正确或密码错误';
    }
    else 
    {
    echo '登录成功!';
    echo '点击<a href="borad.php">这里</a>进入留言板';
    }
    }
    ?>
    </body>
    </html>
      

  3.   

    一定要加双引号啊?谢了,我现在是在网吧,没有装wamp不能试,我回家再尝试,感激!
      

  4.   


    不是双引号,是引号都行这是 sql 语法___________________________________________假如我输入一个新的账户可以正确注册,但是如果我输入一个已经存在的账户,并不能告诉我“已经有了这个用户”。这里就是注册前查询一下库,是否存在这个用户名了,不存在就注册,存在就返回,重新注册。
    这里最好用 ajax 来实现,______________________________________________另外我还有一个登录界面也是,只要你输入了密码,不管对不对都能成功登陆进去,为什么啊?说明你的验证有问题<?php
    if(!$_POST['name'] or !$_POST['password'])
    echo '<h1 align="center">你并没有填写资料!</h1>';
    else 
    {
    $name=$_POST['name'];
    $password=$_POST['password'];
    $db=mysqli_connect('localhost','root','') or die('无法连接到数据库');
    $db->select_db('userdata') or die('无法链接到数据表');
    $sql='SELECT * FROM `user` WHERE `username` = "'.$name.'" AND `password` ="'. sha1($password).'"';
    $result=$db->query($sql);
    $row=mysql_fetch_row($result);
    //print_r($row);
    if(!$result)
    {
    echo '用户名不正确或密码错误';
    }
    else 
    {
    echo '登录成功!';
    echo '点击<a href="borad.php">这里</a>进入留言板';
    }
    }
    ?>
      

  5.   

    $sql='SELECT * FROM `user` WHERE `username` = "'.$name.'" AND `password` ="'. sha1($password).'"';
    //sql语句应该是这样,上面的错了
      

  6.   

    还是不行啊,结果和不加引号是一样的啊。
    问题是这样的,十分奇怪。
    在我楼主的帖子里面的代码,我的本意是在数据库里面搜索这个用户名有没有用,但是我即使使用的是已经被注册的用户名,还是不会提示我已经被使用了,也就是查询结果无论怎样都是flase。
    而在2楼的帖子的代码,我希望的是判断用户名和密码对不对,但是无论怎样,只要我打字进去了就可以通过去,也就是查询结果无论怎样都是true。
    百思不得其解,望各位高手指点迷津,感激不尽!!!
      

  7.   

    首先,樓上的都已經講到$sql = 'SELECT `username` as name FROM `user` WHERE `username` ='.$username;這句SQL錯誤然後LZ的程式碼裏 有一句 $result=@mysql_query($sql);
    因為$sql已經錯了, 所以 mysql_query 返回一個錯誤
    又由於 有 @ 所以不會報錯, 只返回一個 FALSE 給 $result所以我相信LZ 還沒有把那個 $sql 應該還是錯的, 可以試試不加 @ 第二個錯是
    就算$sql 正確了, $result 也不過是個 resource, 這個resource永真
    所以如果$sql改正解了, 那什麼用戶名都註冊不了才對,呵呵LZ應該檢查的是 $row = mysql_fetch_array($result); 中的 $row才對
      

  8.   

     $row = mysql_fetch_array($result); 
    这句是我想检查一下到底查到了没有所以才加上去的,可以看出实际上要不要这个完全无所谓,只是试一试
      

  9.   

    然後LZ的程式碼裏 有一句 $result=@mysql_query($sql);
    因為$sql已經錯了, 所以 mysql_query 返回一個錯誤
    又由於 有 @ 所以不會報錯, 只返回一個 FALSE 給 $result所以我相信LZ 還沒有把那個 $sql 應該還是錯的, 可以試試不加 @  
    -------------------------------------------------------
    这个我回去再试,不管怎样还是感谢你!
    -------------------------------------------------------第二個錯是
    就算$sql 正確了, $result 也不過是個 resource, 這個resource永真
    所以如果$sql改正解了, 那什麼用戶名都註冊不了才對,呵呵
    -------------------------------------------------------
    问题就是,$sql明明就不对!!!那么就不该得到一个resource而应该和
    上面一个例子一样得到一个false,这样才能登陆失败啊
      

  10.   


    <?php
    if(!isset($_POST['name'])||!isset($_POST['password']))
    echo '<h1 align="center">你并没有填写资料!</h1>';
    else 
    {
    $name=$_POST['name'];
    $password=$_POST['password'];
    $db=mysqli_connect('localhost','root','') or die('无法连接到数据库');
    $db->select_db('userdata') or die('无法链接到数据表');
    $sql='SELECT * FROM `user` WHERE `username` = '.$name.' AND `password` = sha1('.$password.')';
    $result=$db->query($sql);
    $row=mysql_fetch_row($result);
    //print_r($row);
    if(!$row)             //这里应该为 $row ,没留意
    {
    echo '用户名不正确或密码错误';
    }
    else 
    {
    echo '登录成功!';
    echo '点击<a href="borad.php">这里</a>进入留言板';
    }
    }
    ?>
      

  11.   

    $sql = "SELECT `username` as `name` FROM `user` WHERE `username` ='$username'";name 为关健字,请及时在两边加上  ``$sql = "SELECT `username` as `name` FROM `user` WHERE `username` ='$username'";
     //这样写sql 会比较方便。
      

  12.   

    我听从了ghostxyz0的建议,把那个@删除了,果然就报错了,错误信息如下,求各位大哥告诉我如何解决
    Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in D:\wamp\www\register.php on line 17Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in D:\wamp\www\register.php on line 17
      

  13.   

    $db=mysqli_connect('localhost','root','') or die('无法连接到数据库');
    $db->select_db('userdata') or die('无法链接到数据表');
    登入MYSQL的帐号及密码呢???????
    Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in D:\wamp\www\register.php on line 17
    这句的意思已经很明显了
      

  14.   

    密码为空的root是否可以登陆MYSQL服务器?
      

  15.   


    為什麼連接用 mysqli_connect
    查詢用 mysql_query
    這樣mysql_query當然會拿不到resource, 而嘗試用默認用戶名(ODBC)跟密碼進行登錄你把mysqli_connect 換成 mysql_connect
    這兩個不能混用的...
      

  16.   

    要麼就把mysql_query 改成 $db->query
    總之要統一...
      

  17.   

    更加糊涂了…………到底是SQL不对还是账号和密码不对啊?
    我的账号和密码就是root和没有密码啊,就是查询语句不能正确执行,插入语句是可以正确执行的,应该是SQL语句不对啊,正确的语句是怎么样的呢?请大侠伸出援助之手!
      

  18.   

    把mysqli_query去掉i以后的结果是这样的
    Fatal error: Call to a member function select_db() on a non-object in D:\wamp\www\whether.php on line 18
      

  19.   


    正解把mysqli_query去掉i以后的结果是这样的
    Fatal error: Call to a member function select_db() on a non-object in D:\wamp\www\whether.php on line 18问题应该是在PHP.INI里你只开启了mysqli的扩展,而没有开启mysql扩展
      

  20.   

    為什麼連接用 mysqli_connect
    查詢用 mysql_query
    這樣mysql_query當然會拿不到resource, 而嘗試用默認用戶名(ODBC)跟密碼進行登錄你把mysqli_connect 換成 mysql_connect
    這兩個不能混用的...应该是上面的,引用错了
      

  21.   


    不是沒有開mysql擴展
    而是沒有選擇 要操作的數據庫...
    從程式碼來看,你對資料庫的操作基本都是通過 mysqli 類來操作的
    所以還建議把 mysql_query 換成 $db->query()
    把我最初說的 $row = mysql_fetch_array($result); 改成 $row = $result->fetch_array(); (*)1樓的程式碼還少了指定資料庫
    可以在mysqli_connect的第四個參數加上,即
    $db= mysqli_connect('localhost','root','','userdata')2樓的程式就按 (*) 處改
    看到有mysql_ 開頭都進行相應的替換, 完全通過mysqli庫來進行資料庫的操作...嘛,可能還有其它錯,按報錯信息來改就行...
      

  22.   

    $sql = "SELECT `username` as `name` FROM `user` WHERE `username` ='$username'";name 为关健字,请及时在两边加上 ``
    PHP code
    $sql = "SELECT `username