|
我的配置是win2000 server sp3平台下apache_2.0.44-win32-x86-no_ssl + php-4.3.1-Win32 + mysql-3.23.56-win
一段连接mysql数据库的代码
<?php
$username = $_POST['user']; //user是接login.htm传来的用户名
$password = $_POST['psw']; //psw是接login.htm传来的用户密码
$connection = @mysql_connect("localhost", "ss", "ss") or die("无法连接数据库!");
@mysql_select_db("master", $connection) or die("选择数据表失败!");
$query = "SELECT uname , password FROM masterinfo";
$query .= " WHERE uname = '$username'";
echo $query;
$result = @mysql_query($query, $connection) or die("该用户名不存在,数据操作请求失败!");
echo $result;
//@mysql_close($connection) or die("关闭数据库失败!");
while($row = mysql_fetch_array($result))
{
if($row["password"] == $password)
echo "<p><center><font color = red>恭喜您,登陆成功!</font></center>";
else
{
echo "对不起,不能登陆!";
echo "<p><center><a href=login.php>返回重填</a></center>";
}
}
我发现三个问题:
1. 如果代码开头不用$_POST系统变量把传来的用户名和密码转换成本页所用变量名,而
仅用$user和$psw,即直接使用login.htm文件定义的变量名,就不能连接数据库。
echo $query语句返回SELECT uname , password FROM masterinfo WHERE uname = ''
无论输入任意用户名,返回值总为空。
2. @mysql_connect("localhost","ss","ss")处,如果主机名、用户名、密码任意一个为空
或都为空,同样能连接数据库。
3. 如果在login.htm登录页面中的用户名框和密码框中填入任意数据或都为空,echo $result
语句都能返回一个Resource id,且均为#3。即使用户名与masterinfo表中的用户名字段不一致,
echo $result语句都能返回这个值,而不在前面报错为“该用户名不存在,数据操作请求失败!”。
以上问题困扰了我很长时间,从书中也找不到答案,我不知道是配置有问题,还是数据库定义有问题,
还是php代码有问题。望大虾们指点。 |
|