我的代码有一个小问题 它允许我访问数据库
1-即使密码字段为空 2 - 如果id不在用户表中,那就自己!! (例如:3)
但如果我输入一个存在的ID,它运作良好,我必须输入正确的传递
这是我的代码:
index.php:
<form action="login1.php" action ="get">
user id <input type="text" name="uid">
<br>
password <input type="password" name="pass">
<br>
<input type="submit" value ="login ">
</form>
<?php
session_start();
?>
login1.php
<?php
session_start();
$uid=@$_GET['uid'];
$pass = @$_GET['pass'];
$link = mysql_connect('localhost','root','') or die ('cannot connect');
mysql_select_db('mydb');
$query = "select upassword , id from user where id=".$uid;
$result= mysql_query($query) or die ('cannot run query');
while ( $row = mysql_fetch_array($result))
{
if (($row{'upassword'} != $pass ))
{
echo " pass wrong ";
mysql_free_result($result);
mysql_close($link);
exit();
}
}
mysql_free_result($result);
$query="select * from address ";
$result= mysql_query($query);
while ($row= mysql_fetch_array($result))
{
echo "user : ".$row{'pname'}."<br>";
}
mysql_free_result($result);
mysql_close($link);
?>
这是我的db:
[DB][1]
此致,,
答案 0 :(得分:0)
首先,PHP数组访问器是方括号,而不是大括号。
其次,您的代码应该假设密码错误并且默认情况下禁止访问所有密码,并且只有在密码正确时才允许访问。出于自动防故障原因。
例如,
$authenticated = false;
while ( $row = mysql_fetch_array($result))
{
if (($row['upassword'] == $pass )) {
$authenticated = true;
break;
}
}
if(!$authenticated) {
echo " pass wrong ";
exit();
} else {
....[do you stuff here]....
}
Thrid,php mysql已被弃用了一段时间。你应该使用mysqli或PDO。