我的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('无法连接到数据库 <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>
执行插入语句是对的,就是执行语句不对,每次结果都是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('无法连接到数据库 <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>
//SQL 语句出错
$sql = 'SELECT `username` as name FROM `user` WHERE `username` ="'.$username.'"';
另外我还有一个登录界面也是,只要你输入了密码,不管对不对都能成功登陆进去,为什么啊?
代码是这样的<!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>
不是双引号,是引号都行这是 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>进入留言板';
}
}
?>
//sql语句应该是这样,上面的错了
问题是这样的,十分奇怪。
在我楼主的帖子里面的代码,我的本意是在数据库里面搜索这个用户名有没有用,但是我即使使用的是已经被注册的用户名,还是不会提示我已经被使用了,也就是查询结果无论怎样都是flase。
而在2楼的帖子的代码,我希望的是判断用户名和密码对不对,但是无论怎样,只要我打字进去了就可以通过去,也就是查询结果无论怎样都是true。
百思不得其解,望各位高手指点迷津,感激不尽!!!
因為$sql已經錯了, 所以 mysql_query 返回一個錯誤
又由於 有 @ 所以不會報錯, 只返回一個 FALSE 給 $result所以我相信LZ 還沒有把那個 $sql 應該還是錯的, 可以試試不加 @ 第二個錯是
就算$sql 正確了, $result 也不過是個 resource, 這個resource永真
所以如果$sql改正解了, 那什麼用戶名都註冊不了才對,呵呵LZ應該檢查的是 $row = mysql_fetch_array($result); 中的 $row才對
这句是我想检查一下到底查到了没有所以才加上去的,可以看出实际上要不要这个完全无所谓,只是试一试
因為$sql已經錯了, 所以 mysql_query 返回一個錯誤
又由於 有 @ 所以不會報錯, 只返回一個 FALSE 給 $result所以我相信LZ 還沒有把那個 $sql 應該還是錯的, 可以試試不加 @
-------------------------------------------------------
这个我回去再试,不管怎样还是感谢你!
-------------------------------------------------------第二個錯是
就算$sql 正確了, $result 也不過是個 resource, 這個resource永真
所以如果$sql改正解了, 那什麼用戶名都註冊不了才對,呵呵
-------------------------------------------------------
问题就是,$sql明明就不对!!!那么就不该得到一个resource而应该和
上面一个例子一样得到一个false,这样才能登陆失败啊
<?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>进入留言板';
}
}
?>
//这样写sql 会比较方便。
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
$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
这句的意思已经很明显了
為什麼連接用 mysqli_connect
查詢用 mysql_query
這樣mysql_query當然會拿不到resource, 而嘗試用默認用戶名(ODBC)跟密碼進行登錄你把mysqli_connect 換成 mysql_connect
這兩個不能混用的...
總之要統一...
我的账号和密码就是root和没有密码啊,就是查询语句不能正确执行,插入语句是可以正确执行的,应该是SQL语句不对啊,正确的语句是怎么样的呢?请大侠伸出援助之手!
Fatal error: Call to a member function select_db() on a non-object in D:\wamp\www\whether.php on line 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问题应该是在PHP.INI里你只开启了mysqli的扩展,而没有开启mysql扩展
查詢用 mysql_query
這樣mysql_query當然會拿不到resource, 而嘗試用默認用戶名(ODBC)跟密碼進行登錄你把mysqli_connect 換成 mysql_connect
這兩個不能混用的...应该是上面的,引用错了
不是沒有開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庫來進行資料庫的操作...嘛,可能還有其它錯,按報錯信息來改就行...
PHP code
$sql = "SELECT `username